Add image table to container nodes

Also, extend metadata of images with sizes
This commit is contained in:
Alfonso Acosta
2016-10-19 17:43:24 +00:00
parent 260464e7f2
commit 216cc0d605
3 changed files with 26 additions and 11 deletions

View File

@@ -4,6 +4,7 @@ import (
"net"
"strings"
humanize "github.com/dustin/go-humanize"
docker_client "github.com/fsouza/go-dockerclient"
"github.com/weaveworks/scope/probe"
@@ -15,8 +16,11 @@ import (
const (
ImageID = "docker_image_id"
ImageName = "docker_image_name"
ImageSize = "docker_image_size"
ImageVirtualSize = "docker_image_virtual_size"
ImageLabelPrefix = "docker_image_label_"
IsInHostNetwork = "docker_is_in_host_network"
ImageTableID = "image_table"
)
// Exposed for testing
@@ -46,6 +50,14 @@ var (
ContainerTableTemplates = report.TableTemplates{
LabelPrefix: {ID: LabelPrefix, Label: "Docker Labels", Prefix: LabelPrefix},
EnvPrefix: {ID: EnvPrefix, Label: "Environment Variables", Prefix: EnvPrefix},
ImageTableID: {ID: ImageTableID, Label: "Image",
FixedRows: map[string]string{
ImageID: "ID",
ImageName: "Name",
ImageSize: "Size",
ImageVirtualSize: "Virtual Size",
},
},
}
ContainerImageTableTemplates = report.TableTemplates{
@@ -236,16 +248,17 @@ func (r *Reporter) containerImageTopology() report.Topology {
r.registry.WalkImages(func(image docker_client.APIImages) {
imageID := trimImageID(image.ID)
nodeID := report.MakeContainerImageNodeID(imageID)
node := report.MakeNodeWith(nodeID, map[string]string{
ImageID: imageID,
})
node = node.AddPrefixTable(ImageLabelPrefix, image.Labels)
if len(image.RepoTags) > 0 {
node = node.WithLatests(map[string]string{ImageName: image.RepoTags[0]})
latests := map[string]string{
ImageID: imageID,
ImageSize: humanize.Bytes(uint64(image.Size)),
ImageVirtualSize: humanize.Bytes(uint64(image.VirtualSize)),
}
if len(image.RepoTags) > 0 {
latests[ImageName] = image.RepoTags[0]
}
nodeID := report.MakeContainerImageNodeID(imageID)
node := report.MakeNodeWith(nodeID, latests)
node = node.AddPrefixTable(ImageLabelPrefix, image.Labels)
result.AddNode(node)
})

View File

@@ -192,6 +192,8 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report, dct Decorator)
imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutVersion)
c = propagateLatest(docker.ImageName, image, c)
c = propagateLatest(docker.ImageSize, image, c)
c = propagateLatest(docker.ImageVirtualSize, image, c)
c = propagateLatest(docker.ImageLabelPrefix+"works.weave.role", image, c)
c.Parents = c.Parents.
Delete(report.ContainerImage).

View File

@@ -42,7 +42,7 @@ func (node Node) extractTable(template TableTemplate) (rows map[string]string, t
if label, ok := template.FixedRows[key]; ok {
rows[label] = value
}
if strings.HasPrefix(key, template.Prefix) {
if len(template.Prefix) > 0 && strings.HasPrefix(key, template.Prefix) {
label := key[len(template.Prefix):]
rows[label] = value
}
@@ -85,8 +85,8 @@ func (t Table) Copy() Table {
// FixedRow describes a row which is part of a TableTemplate and whose value is extracted
// from a predetermined key
type FixedRow struct {
Key string `json:"key"`
Label string `json:"label"`
Key string `json:"key"`
}
// TableTemplate describes how to render a table for the UI.