mirror of
https://github.com/weaveworks/scope.git
synced 2026-08-19 04:16:21 +00:00
Show how many containers have been grouped together under an image
This commit is contained in:
@@ -124,7 +124,7 @@ var (
|
||||
"curl": {
|
||||
ID: "curl",
|
||||
LabelMajor: "curl",
|
||||
LabelMinor: "",
|
||||
LabelMinor: "2 processes",
|
||||
Rank: "curl",
|
||||
Pseudo: false,
|
||||
Adjacency: report.MakeIDList("apache"),
|
||||
@@ -144,7 +144,7 @@ var (
|
||||
"apache": {
|
||||
ID: "apache",
|
||||
LabelMajor: "apache",
|
||||
LabelMinor: "",
|
||||
LabelMinor: "1 process",
|
||||
Rank: "apache",
|
||||
Pseudo: false,
|
||||
Adjacency: report.MakeIDList(
|
||||
@@ -167,7 +167,7 @@ var (
|
||||
"bash": {
|
||||
ID: "bash",
|
||||
LabelMajor: "bash",
|
||||
LabelMinor: "",
|
||||
LabelMinor: "1 process",
|
||||
Rank: "bash",
|
||||
Pseudo: false,
|
||||
Origins: report.MakeIDList(
|
||||
@@ -243,7 +243,7 @@ var (
|
||||
test.ClientContainerImageName: {
|
||||
ID: test.ClientContainerImageName,
|
||||
LabelMajor: test.ClientContainerImageName,
|
||||
LabelMinor: "",
|
||||
LabelMinor: "1 container",
|
||||
Rank: test.ClientContainerImageName,
|
||||
Pseudo: false,
|
||||
Adjacency: report.MakeIDList(test.ServerContainerImageName),
|
||||
@@ -265,7 +265,7 @@ var (
|
||||
test.ServerContainerImageName: {
|
||||
ID: test.ServerContainerImageName,
|
||||
LabelMajor: test.ServerContainerImageName,
|
||||
LabelMinor: "",
|
||||
LabelMinor: "1 container",
|
||||
Rank: test.ServerContainerImageName,
|
||||
Pseudo: false,
|
||||
Adjacency: report.MakeIDList(test.ClientContainerImageName, render.TheInternetID),
|
||||
|
||||
+53
-1
@@ -19,6 +19,9 @@ const (
|
||||
|
||||
TheInternetID = "theinternet"
|
||||
TheInternetMajor = "The Internet"
|
||||
|
||||
containersPrefix = "container-"
|
||||
processesPrefix = "process-"
|
||||
)
|
||||
|
||||
// LeafMapFunc is anything which can take an arbitrary NodeMetadata, which is
|
||||
@@ -249,9 +252,37 @@ func MapProcess2Name(n RenderableNode) (RenderableNode, bool) {
|
||||
node := newDerivedNode(name, n)
|
||||
node.LabelMajor = name
|
||||
node.Rank = name
|
||||
node.NodeMetadata.Metadata[processesPrefix+n.ID] = ""
|
||||
return node, true
|
||||
}
|
||||
|
||||
func countPrefix(prefix string, n RenderableNode) int {
|
||||
count := 0
|
||||
for key := range n.NodeMetadata.Metadata {
|
||||
if strings.HasPrefix(key, prefix) {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// MapCountProcessName maps 1:1 process name nodes, counting
|
||||
// the number of processes grouped together and putting
|
||||
// that info in the minor label.
|
||||
func MapCountProcessName(n RenderableNode) (RenderableNode, bool) {
|
||||
if n.Pseudo {
|
||||
return n, true
|
||||
}
|
||||
|
||||
processes := countPrefix(processesPrefix, n)
|
||||
if processes == 1 {
|
||||
n.LabelMinor = "1 process"
|
||||
} else {
|
||||
n.LabelMinor = fmt.Sprintf("%d processes", processes)
|
||||
}
|
||||
return n, true
|
||||
}
|
||||
|
||||
// MapContainer2ContainerImage maps container RenderableNodes to container
|
||||
// image RenderableNodes.
|
||||
//
|
||||
@@ -276,7 +307,10 @@ func MapContainer2ContainerImage(n RenderableNode) (RenderableNode, bool) {
|
||||
return n, false
|
||||
}
|
||||
|
||||
return newDerivedNode(id, n), true
|
||||
// Add container-<id> key to NMD, which will later be counted to produce the minor label
|
||||
result := newDerivedNode(id, n)
|
||||
result.NodeMetadata.Metadata[containersPrefix+n.ID] = ""
|
||||
return result, true
|
||||
}
|
||||
|
||||
// MapContainerImage2Name maps container images RenderableNodes to
|
||||
@@ -303,9 +337,27 @@ func MapContainerImage2Name(n RenderableNode) (RenderableNode, bool) {
|
||||
node := newDerivedNode(name, n)
|
||||
node.LabelMajor = name
|
||||
node.Rank = name
|
||||
node.NodeMetadata = n.NodeMetadata.Copy() // Propagate NMD for container counting.
|
||||
return node, true
|
||||
}
|
||||
|
||||
// MapCountContainers maps 1:1 container image nodes, counting
|
||||
// the number of containers grouped together and putting
|
||||
// that info in the minor label.
|
||||
func MapCountContainers(n RenderableNode) (RenderableNode, bool) {
|
||||
if n.Pseudo {
|
||||
return n, true
|
||||
}
|
||||
|
||||
containers := countPrefix(containersPrefix, n)
|
||||
if containers == 1 {
|
||||
n.LabelMinor = "1 container"
|
||||
} else {
|
||||
n.LabelMinor = fmt.Sprintf("%d container(s)", containers)
|
||||
}
|
||||
return n, true
|
||||
}
|
||||
|
||||
// MapAddress2Host maps address RenderableNodes to host RenderableNodes.
|
||||
//
|
||||
// Otherthan pseudo nodes, we can assume all nodes have a HostID
|
||||
|
||||
+20
-14
@@ -28,8 +28,11 @@ var ProcessRenderer = MakeReduce(
|
||||
// ProcessRenderer is a Renderer which produces a renderable process
|
||||
// name graph by munging the progess graph.
|
||||
var ProcessNameRenderer = Map{
|
||||
MapFunc: MapProcess2Name,
|
||||
Renderer: ProcessRenderer,
|
||||
MapFunc: MapCountProcessName,
|
||||
Renderer: Map{
|
||||
MapFunc: MapProcess2Name,
|
||||
Renderer: ProcessRenderer,
|
||||
},
|
||||
}
|
||||
|
||||
// ContainerRenderer is a Renderer which produces a renderable container
|
||||
@@ -49,18 +52,21 @@ var ContainerRenderer = MakeReduce(
|
||||
// ContainerImageRenderer is a Renderer which produces a renderable container
|
||||
// image graph by merging the container graph and the container image topology.
|
||||
var ContainerImageRenderer = Map{
|
||||
MapFunc: MapContainerImage2Name,
|
||||
Renderer: MakeReduce(
|
||||
Map{
|
||||
MapFunc: MapContainer2ContainerImage,
|
||||
Renderer: ContainerRenderer,
|
||||
},
|
||||
LeafMap{
|
||||
Selector: report.SelectContainerImage,
|
||||
Mapper: MapContainerImageIdentity,
|
||||
Pseudo: PanicPseudoNode,
|
||||
},
|
||||
),
|
||||
MapFunc: MapCountContainers,
|
||||
Renderer: Map{
|
||||
MapFunc: MapContainerImage2Name,
|
||||
Renderer: MakeReduce(
|
||||
Map{
|
||||
MapFunc: MapContainer2ContainerImage,
|
||||
Renderer: ContainerRenderer,
|
||||
},
|
||||
LeafMap{
|
||||
Selector: report.SelectContainerImage,
|
||||
Mapper: MapContainerImageIdentity,
|
||||
Pseudo: PanicPseudoNode,
|
||||
},
|
||||
),
|
||||
},
|
||||
}
|
||||
|
||||
// AddressRenderer is a Renderer which produces a renderable address
|
||||
|
||||
Reference in New Issue
Block a user