Files
weave-scope/probe/docker/reporter.go
Peter Bourgon 3dd59c8b9b Fixes to NodeMetadata
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.
2015-07-30 17:20:44 +02:00

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
}