mirror of
https://github.com/weaveworks/scope.git
synced 2026-04-22 02:18:15 +00:00
NewNodeMetadata -> MakeNodeMetadata. It doesn't return a pointer, so Make is more idiomatic. Invoke MakeNodeMetadata when necessary. The zero value for a NodeMetadata is no longer valid. Split MakeNodeMetadata to two constructors. MakeNodeMetadata when you don't have anything to prepopulate; MakeNodeMetadataWith when you do. Also, a fix to the tests in app. We unmarshal a RenderableNode struct, which has a JSON-ignored NodeMetadata field. The zero value is invalid, so we need to fix that before performing comparisons.
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package docker
|
|
|
|
import (
|
|
docker_client "github.com/fsouza/go-dockerclient"
|
|
|
|
"github.com/weaveworks/scope/report"
|
|
)
|
|
|
|
// Keys for use in NodeMetadata
|
|
const (
|
|
ImageID = "docker_image_id"
|
|
ImageName = "docker_image_name"
|
|
)
|
|
|
|
// Reporter generate Reports containing Container and ContainerImage topologies
|
|
type Reporter struct {
|
|
registry Registry
|
|
scope string
|
|
}
|
|
|
|
// NewReporter makes a new Reporter
|
|
func NewReporter(registry Registry, scope string) *Reporter {
|
|
return &Reporter{
|
|
registry: registry,
|
|
scope: scope,
|
|
}
|
|
}
|
|
|
|
// Report generates a Report containing Container and ContainerImage topologies
|
|
func (r *Reporter) Report() (report.Report, error) {
|
|
result := report.MakeReport()
|
|
result.Container.Merge(r.containerTopology())
|
|
result.ContainerImage.Merge(r.containerImageTopology())
|
|
return result, nil
|
|
}
|
|
|
|
func (r *Reporter) containerTopology() report.Topology {
|
|
result := report.NewTopology()
|
|
|
|
r.registry.WalkContainers(func(c Container) {
|
|
nodeID := report.MakeContainerNodeID(r.scope, c.ID())
|
|
result.NodeMetadatas[nodeID] = c.GetNodeMetadata()
|
|
})
|
|
|
|
return result
|
|
}
|
|
|
|
func (r *Reporter) containerImageTopology() report.Topology {
|
|
result := report.NewTopology()
|
|
|
|
r.registry.WalkImages(func(image *docker_client.APIImages) {
|
|
nmd := report.MakeNodeMetadataWith(map[string]string{
|
|
ImageID: image.ID,
|
|
})
|
|
|
|
if len(image.RepoTags) > 0 {
|
|
nmd.Metadata[ImageName] = image.RepoTags[0]
|
|
}
|
|
|
|
nodeID := report.MakeContainerNodeID(r.scope, image.ID)
|
|
result.NodeMetadatas[nodeID] = nmd
|
|
})
|
|
|
|
return result
|
|
}
|