From ffa90719b0504531aa25b18de12d64cfdff51ac1 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 10 Mar 2020 09:58:21 +0000 Subject: [PATCH] Change containers-by-hostname renderer from Map to Renderer It was relying on the previous behaviour of Merge() adding up counters. --- render/container.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/render/container.go b/render/container.go index da3042c84..347d56745 100644 --- a/render/container.go +++ b/render/container.go @@ -169,10 +169,7 @@ var ContainerImageRenderer = Memoise(FilterEmpty(report.Container, // // not memoised var ContainerHostnameRenderer = FilterEmpty(report.Container, - MakeMap( - MapContainer2Hostname, - ContainerWithImageNameRenderer, - ), + containerHostnameRenderer{}, ) var portMappingMatch = regexp.MustCompile(`([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):([0-9]+)->([0-9]+)/tcp`) @@ -312,21 +309,24 @@ func MapContainerImage2Name(n report.Node) report.Node { var containerHostnameTopology = MakeGroupNodeTopology(report.Container, report.DockerContainerHostname) -// MapContainer2Hostname maps container Nodes to 'hostname' renderabled nodes.. -func MapContainer2Hostname(n report.Node) report.Node { - // Propagate all pseudo nodes - if n.Topology == Pseudo { - return n - } +// containerHostnameRenderer collects containers by docker hostname +type containerHostnameRenderer struct{} - // Otherwise, if some some reason the container doesn't have a hostname - // (maybe slightly out of sync reports), just drop it - id, ok := n.Latest.Lookup(report.DockerContainerHostname) - if !ok { - return report.Node{} - } +func (m containerHostnameRenderer) Render(ctx context.Context, rpt report.Report) Nodes { + containers := ContainerWithImageNameRenderer.Render(ctx, rpt) + ret := newJoinResults(nil) - node := NewDerivedNode(id, n).WithTopology(containerHostnameTopology). - AddCounter(n.Topology, 1) - return node + for _, n := range containers.Nodes { + if n.Topology == Pseudo { + ret.passThrough(n) + continue + } + // If some some reason the container doesn't have a hostname, just drop it + id, ok := n.Latest.Lookup(report.DockerContainerHostname) + if !ok { + continue + } + ret.addChildAndChildren(n, id, containerHostnameTopology) + } + return ret.result(containers) }