diff --git a/render/mapping.go b/render/mapping.go index 5f0f24381..2c78b33aa 100644 --- a/render/mapping.go +++ b/render/mapping.go @@ -527,13 +527,14 @@ func MapCountProcessName(n RenderableNode, _ report.Networks) RenderableNodes { return RenderableNodes{n.ID: n} } + output := n.Copy() processes, _ := n.Node.Counters.Lookup(processesKey) if processes == 1 { - n.LabelMinor = "1 process" + output.LabelMinor = "1 process" } else { - n.LabelMinor = fmt.Sprintf("%d processes", processes) + output.LabelMinor = fmt.Sprintf("%d processes", processes) } - return RenderableNodes{n.ID: n} + return RenderableNodes{output.ID: output} } // MapContainer2ContainerImage maps container RenderableNodes to container @@ -757,13 +758,14 @@ func MapCountContainers(n RenderableNode, _ report.Networks) RenderableNodes { return RenderableNodes{n.ID: n} } + output := n.Copy() containers, _ := n.Node.Counters.Lookup(ContainersKey) if containers == 1 { - n.LabelMinor = "1 container" + output.LabelMinor = "1 container" } else { - n.LabelMinor = fmt.Sprintf("%d containers", containers) + output.LabelMinor = fmt.Sprintf("%d containers", containers) } - return RenderableNodes{n.ID: n} + return RenderableNodes{output.ID: output} } // MapCountPods maps 1:1 service nodes, counting the number of pods grouped @@ -773,13 +775,14 @@ func MapCountPods(n RenderableNode, _ report.Networks) RenderableNodes { return RenderableNodes{n.ID: n} } + output := n.Copy() pods, _ := n.Node.Counters.Lookup(podsKey) if pods == 1 { - n.LabelMinor = "1 pod" + output.LabelMinor = "1 pod" } else { - n.LabelMinor = fmt.Sprintf("%d pods", pods) + output.LabelMinor = fmt.Sprintf("%d pods", pods) } - return RenderableNodes{n.ID: n} + return RenderableNodes{output.ID: output} } // trySplitAddr is basically ParseArbitraryNodeID, since its callsites diff --git a/render/topologies.go b/render/topologies.go index 496787e37..ffe2772f5 100644 --- a/render/topologies.go +++ b/render/topologies.go @@ -42,7 +42,9 @@ func (r processWithContainerNameRenderer) Render(rpt report.Report) RenderableNo SelectContainer, ).Render(rpt) + outputs := RenderableNodes{} for id, p := range processes { + outputs[id] = p pid, ok := p.Node.Latest.Lookup(process.PID) if !ok { continue @@ -55,11 +57,11 @@ func (r processWithContainerNameRenderer) Render(rpt report.Report) RenderableNo if !ok { continue } - p.LabelMinor = fmt.Sprintf("%s (%s:%s)", report.ExtractHostID(p.Node), container.LabelMajor, pid) - processes[id] = p + output := p.Copy() + output.LabelMinor = fmt.Sprintf("%s (%s:%s)", report.ExtractHostID(p.Node), container.LabelMajor, pid) + outputs[id] = output } - - return processes + return outputs } // ProcessWithContainerNameRenderer is a Renderer which produces a process @@ -131,7 +133,9 @@ func (r containerWithHostIPsRenderer) Render(rpt report.Report) RenderableNodes SelectHost, ).Render(rpt) + outputs := RenderableNodes{} for id, c := range containers { + outputs[id] = c networkMode, ok := c.Node.Latest.Lookup(docker.ContainerNetworkMode) if !ok || networkMode != docker.NetworkModeHost { continue @@ -150,11 +154,11 @@ func (r containerWithHostIPsRenderer) Render(rpt report.Report) RenderableNodes } } - c.Sets = c.Sets.Add(docker.ContainerIPs, newIPs) - containers[id] = c + output := c.Copy() + output.Sets = c.Sets.Add(docker.ContainerIPs, newIPs) + outputs[id] = output } - - return containers + return outputs } // ContainerWithHostIPsRenderer is a Renderer which produces a container graph @@ -175,7 +179,9 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report) RenderableNode SelectContainerImage, ).Render(rpt) + outputs := RenderableNodes{} for id, c := range containers { + outputs[id] = c imageID, ok := c.Node.Latest.Lookup(docker.ImageID) if !ok { continue @@ -184,12 +190,12 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report) RenderableNode if !ok { continue } - c.Rank = ImageNameWithoutVersion(image.LabelMajor) - c.Latest = image.Latest.Merge(c.Latest) - containers[id] = c + output := c.Copy() + output.Rank = ImageNameWithoutVersion(image.LabelMajor) + output.Latest = image.Latest.Merge(c.Latest) + outputs[id] = output } - - return containers + return outputs } // ContainerWithImageNameRenderer is a Renderer which produces a container