From cbba3c0fd3a3b5da6f0326b941076d04c75ab4cf Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 6 Nov 2017 21:22:33 +0000 Subject: [PATCH] Clarify use of 'id' in addToResults Pass 'id' through to the create function and expect that the result Node has that ID. Extract a function newPseudoNode for common calls. --- render/container.go | 6 ++---- render/host.go | 14 ++++++-------- render/id.go | 4 ++++ render/process.go | 6 ++---- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/render/container.go b/render/container.go index 6a5066132..f8f0dbd84 100644 --- a/render/container.go +++ b/render/container.go @@ -83,9 +83,7 @@ func (c connectionJoin) Render(rpt report.Report, dct Decorator) report.Nodes { // Nodes without a hostid may be pseudo nodes - if so, pass through to result if _, ok := m.Latest.Lookup(report.HostNodeID); !ok { if id, ok := externalNodeID(m, addr, local); ok { - addToResults(m, id, ret, mapped, func() report.Node { - return report.MakeNode(id).WithTopology(Pseudo) - }) + addToResults(m, id, ret, mapped, newPseudoNode) continue } } @@ -97,7 +95,7 @@ func (c connectionJoin) Render(rpt report.Report, dct Decorator) report.Nodes { id, found = ipNodes[report.MakeScopedEndpointNodeID(scope, addr, port)] } if found && id != "" { // not one we blanked out earlier - addToResults(m, id, ret, mapped, func() report.Node { + addToResults(m, id, ret, mapped, func(id string) report.Node { return inputNodes[id] }) } diff --git a/render/host.go b/render/host.go index c6aab85c5..384c47f5a 100644 --- a/render/host.go +++ b/render/host.go @@ -80,12 +80,10 @@ func (e endpoints2Hosts) Render(rpt report.Report, dct Decorator) report.Nodes { if !ok { continue } - addToResults(n, id, ret, mapped, func() report.Node { - return report.MakeNode(id).WithTopology(Pseudo) - }) + addToResults(n, id, ret, mapped, newPseudoNode) } else { id := report.MakeHostNodeID(report.ExtractHostID(n)) - addToResults(n, id, ret, mapped, func() report.Node { + addToResults(n, id, ret, mapped, func(id string) report.Node { return report.MakeNode(id).WithTopology(report.Host). WithLatest(report.HostNodeID, timestamp, hostNodeID) }) @@ -98,15 +96,15 @@ func (e endpoints2Hosts) Render(rpt report.Report, dct Decorator) report.Nodes { // Add Node M to the result set ret under id, creating a new result // node if not already there, and updating the old-id to new-id mapping // Note we do not update any counters for child topologies here -func addToResults(m report.Node, id string, ret report.Nodes, mapped map[string]string, create func() report.Node) { +func addToResults(m report.Node, id string, ret report.Nodes, mapped map[string]string, create func(string) report.Node) { result, exists := ret[id] if !exists { - result = create() + result = create(id) } result.Children = result.Children.Add(m) result.Children = result.Children.Merge(m.Children) - ret[result.ID] = result - mapped[m.ID] = result.ID + ret[id] = result + mapped[m.ID] = id } // Rewrite Adjacency for new nodes in ret, original nodes in input, and mapping old->new IDs in mapped diff --git a/render/id.go b/render/id.go index ea955f30e..471a38d0d 100644 --- a/render/id.go +++ b/render/id.go @@ -36,6 +36,10 @@ func NewDerivedPseudoNode(id string, node report.Node) report.Node { return output } +func newPseudoNode(id string) report.Node { + return report.MakeNode(id).WithTopology(Pseudo) +} + func pseudoNodeID(n report.Node, local report.Networks) (string, bool) { _, addr, _, ok := report.ParseEndpointNodeID(n.ID) if !ok { diff --git a/render/process.go b/render/process.go index 60d09f25e..e4288d3b5 100644 --- a/render/process.go +++ b/render/process.go @@ -100,9 +100,7 @@ func (e endpoints2Processes) Render(rpt report.Report, dct Decorator) report.Nod // Nodes without a hostid are treated as pseudo nodes if hostNodeID, ok := n.Latest.Lookup(report.HostNodeID); !ok { if id, ok := pseudoNodeID(n, local); ok { - addToResults(n, id, ret, mapped, func() report.Node { - return report.MakeNode(id).WithTopology(Pseudo) - }) + addToResults(n, id, ret, mapped, newPseudoNode) } } else { pid, timestamp, ok := n.Latest.LookupEntry(process.PID) @@ -119,7 +117,7 @@ func (e endpoints2Processes) Render(rpt report.Report, dct Decorator) report.Nod hostID, _, _ := report.ParseNodeID(hostNodeID) id := report.MakeProcessNodeID(hostID, pid) - addToResults(n, id, ret, mapped, func() report.Node { + addToResults(n, id, ret, mapped, func(id string) report.Node { if processNode, found := processes[id]; found { return processNode }