From db41cab0afe0ac9f01d73ee0716282653254cc08 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Sat, 11 Nov 2017 14:18:41 +0000 Subject: [PATCH] Make merging of node children conditional in addToResults Some operations won't want this. --- render/container.go | 4 ++-- render/host.go | 4 ++-- render/process.go | 6 +++--- render/render.go | 6 ++++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/render/container.go b/render/container.go index 34760b216..daee2262d 100644 --- a/render/container.go +++ b/render/container.go @@ -82,7 +82,7 @@ func (c connectionJoin) Render(rpt report.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 { - ret.addToResults(m, id, newPseudoNode) + ret.addToResults(m, id, true, newPseudoNode) continue } } @@ -94,7 +94,7 @@ func (c connectionJoin) Render(rpt report.Report) Nodes { id, found = ipNodes[report.MakeScopedEndpointNodeID(scope, addr, port)] } if found && id != "" { // not one we blanked out earlier - ret.addToResults(m, id, func(id string) report.Node { + ret.addToResults(m, id, true, func(id string) report.Node { return inputNodes.Nodes[id] }) } diff --git a/render/host.go b/render/host.go index 484142260..19e1fb6a1 100644 --- a/render/host.go +++ b/render/host.go @@ -79,10 +79,10 @@ func (e endpoints2Hosts) Render(rpt report.Report) Nodes { if !ok { continue } - ret.addToResults(n, id, newPseudoNode) + ret.addToResults(n, id, true, newPseudoNode) } else { id := report.MakeHostNodeID(report.ExtractHostID(n)) - ret.addToResults(n, id, func(id string) report.Node { + ret.addToResults(n, id, true, func(id string) report.Node { return report.MakeNode(id).WithTopology(report.Host). WithLatest(report.HostNodeID, timestamp, hostNodeID) }) diff --git a/render/process.go b/render/process.go index 3360e9a61..541d1dc14 100644 --- a/render/process.go +++ b/render/process.go @@ -94,7 +94,7 @@ func (e endpoints2Processes) Render(rpt report.Report) Nodes { // 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 { - ret.addToResults(n, id, newPseudoNode) + ret.addToResults(n, id, true, newPseudoNode) } } else { pid, timestamp, ok := n.Latest.LookupEntry(process.PID) @@ -111,7 +111,7 @@ func (e endpoints2Processes) Render(rpt report.Report) Nodes { hostID, _, _ := report.ParseNodeID(hostNodeID) id := report.MakeProcessNodeID(hostID, pid) - ret.addToResults(n, id, func(id string) report.Node { + ret.addToResults(n, id, true, func(id string) report.Node { if processNode, found := processes.Nodes[id]; found { return processNode } @@ -137,7 +137,7 @@ func processes2Names(processes Nodes) Nodes { } else { name, timestamp, ok := n.Latest.LookupEntry(process.Name) if ok { - ret.addToResults(n, name, func(id string) report.Node { + ret.addToResults(n, name, true, func(id string) report.Node { return report.MakeNode(id).WithTopology(MakeGroupNodeTopology(n.Topology, process.Name)). WithLatest(process.Name, timestamp, name) }, n.Topology) diff --git a/render/render.go b/render/render.go index 1787d8150..abf35519c 100644 --- a/render/render.go +++ b/render/render.go @@ -160,13 +160,15 @@ func newJoinResults() joinResults { // Add Node M under id, creating a new result node if not already there // incrementing a counter if nonblank, and updating the mapping from old ID to new ID -func (ret *joinResults) addToResults(m report.Node, id string, create func(string) report.Node, counters ...string) { +func (ret *joinResults) addToResults(m report.Node, id string, addChildren bool, create func(string) report.Node, counters ...string) { result, exists := ret.nodes[id] if !exists { result = create(id) } result.Children = result.Children.Add(m) - result.Children = result.Children.Merge(m.Children) + if addChildren { + result.Children = result.Children.Merge(m.Children) + } for _, c := range counters { result.Counters = result.Counters.Add(c, 1) }