diff --git a/render/host.go b/render/host.go index 19e1fb6a1..ec50dc03e 100644 --- a/render/host.go +++ b/render/host.go @@ -10,26 +10,14 @@ import ( // not memoised var HostRenderer = MakeReduce( endpoints2Hosts{}, - MakeMap( - MapX2Host, - ColorConnectedProcessRenderer, - ), - MakeMap( - MapX2Host, - ContainerRenderer, - ), - MakeMap( - MapX2Host, - ContainerImageRenderer, - ), - MakeMap( - MapX2Host, - PodRenderer, - ), + CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ColorConnectedProcessRenderer}, + CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerRenderer}, + CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerImageRenderer}, + CustomRenderer{RenderFunc: nodes2Hosts, Renderer: PodRenderer}, SelectHost, ) -// MapX2Host maps any Nodes to host Nodes. +// nodes2Hosts maps any Nodes to host Nodes. // // If this function is given a node without a hostname // (including other pseudo nodes), it will drop the node. @@ -38,27 +26,23 @@ var HostRenderer = MakeReduce( // format for a host, but without any Major or Minor labels. It does // not have enough info to do that, and the resulting graph must be // merged with a host graph to get that info. -func MapX2Host(n report.Node, _ report.Networks) report.Nodes { - // Don't propagate pseudo nodes - we do this in MapEndpoint2Host - if n.Topology == Pseudo { - return report.Nodes{} - } +func nodes2Hosts(nodes Nodes) Nodes { + ret := newJoinResults() - hostIDs, ok := n.Parents.Lookup(report.Host) - if !ok { - return report.Nodes{} + for _, n := range nodes.Nodes { + if n.Topology == Pseudo { + continue // Don't propagate pseudo nodes - we do this in MapEndpoint2Host + } else { + hostIDs, _ := n.Parents.Lookup(report.Host) + for _, id := range hostIDs { + ret.addToResults(n, id, false, func(id string) report.Node { + return report.MakeNode(id).WithTopology(report.Host) + }, n.Topology) + } + } } - - result := report.Nodes{} - children := report.MakeNodeSet(n) - for _, id := range hostIDs { - node := NewDerivedNode(id, n).WithTopology(report.Host) - node.Counters = node.Counters.Add(n.Topology, 1) - node.Children = children - result[id] = node - } - - return result + ret.fixupAdjacencies(nodes) + return ret.result() } // endpoints2Hosts takes nodes from the endpoint topology and produces