Set Latests just once when propagating container values

This commit is contained in:
Bryan Boreham
2018-04-11 10:42:28 +00:00
parent a1bc35437d
commit 9865fa18f0
2 changed files with 15 additions and 8 deletions

View File

@@ -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))

View File

@@ -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
}