diff --git a/render/container.go b/render/container.go index 5228136df..6d87087b7 100644 --- a/render/container.go +++ b/render/container.go @@ -143,11 +143,8 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report) Nodes { imageNameWithoutTag := docker.ImageNameWithoutTag(imageName) imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutTag) - c = propagateLatest(docker.ImageName, image, c) - c = propagateLatest(docker.ImageTag, image, c) - c = propagateLatest(docker.ImageSize, image, c) - c = propagateLatest(docker.ImageVirtualSize, image, c) - c = propagateLatest(docker.ImageLabelPrefix+"works.weave.role", image, c) + c = propagateLatests(image, c, docker.ImageName, docker.ImageTag, docker.ImageSize, docker.ImageVirtualSize, + docker.ImageLabelPrefix+"works.weave.role") c.Parents = c.Parents. Delete(report.ContainerImage). Add(report.ContainerImage, report.MakeStringSet(imageNodeID)) diff --git a/render/render.go b/render/render.go index eb3b6c8a2..a981e91e4 100644 --- a/render/render.go +++ b/render/render.go @@ -1,6 +1,8 @@ package render import ( + "time" + "github.com/weaveworks/scope/report" ) @@ -115,10 +117,18 @@ func (m Map) Render(rpt report.Report) Nodes { return output.result(input) } -func propagateLatest(key string, from, to report.Node) report.Node { - if value, timestamp, ok := from.Latest.LookupEntry(key); ok { - to.Latest = to.Latest.Set(key, timestamp, value) +func propagateLatests(from, to report.Node, keys ...string) report.Node { + var pairs []string + var ts time.Time + for _, key := range keys { + if value, timestamp, ok := from.Latest.LookupEntry(key); ok { + pairs = append(pairs, key, value) + if ts.Before(timestamp) { + ts = timestamp + } + } } + to.Latest = to.Latest.SetMulti(ts, pairs...) return to }