From 4dde1ce7151e1ebd53e3f9d9bc23fb8bb7b16ca7 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Sun, 17 Dec 2017 16:08:55 +0000 Subject: [PATCH] optimise and align endpoints2Hosts Avoid a reduce step by joining the host topology in endpoints2Hosts. This is similar to what we do in connectionJoin and endpoints2Processes. --- render/host.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/render/host.go b/render/host.go index 85c3d9038..552c0b194 100644 --- a/render/host.go +++ b/render/host.go @@ -9,12 +9,11 @@ import ( // // not memoised var HostRenderer = MakeReduce( - endpoints2Hosts{}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ProcessRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerImageRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: PodRenderer}, - SelectHost, + endpoints2Hosts{}, ) // nodes2Hosts maps any Nodes to host Nodes. @@ -50,6 +49,7 @@ type endpoints2Hosts struct { func (e endpoints2Hosts) Render(rpt report.Report) Nodes { local := LocalNetworks(rpt) + hosts := SelectHost.Render(rpt) endpoints := SelectEndpoint.Render(rpt) ret := newJoinResults() @@ -62,10 +62,16 @@ func (e endpoints2Hosts) Render(rpt report.Report) Nodes { } else { id := report.MakeHostNodeID(report.ExtractHostID(n)) ret.addChild(n, id, func(id string) report.Node { + if hostNode, found := hosts.Nodes[id]; found { + return hostNode + } + // we have a hostNodeID, but no matching host node; + // create a new one rather than dropping the data return report.MakeNode(id).WithTopology(report.Host). WithLatest(report.HostNodeID, timestamp, hostNodeID) }) } } + ret.copyUnmatched(hosts) return ret.result(endpoints) }