Merge pull request #3748 from weaveworks/move-counters-to-latest

Move Counters into Latest
This commit is contained in:
Bryan Boreham
2020-03-11 21:14:01 +00:00
committed by GitHub
14 changed files with 146 additions and 368 deletions

View File

@@ -169,10 +169,7 @@ var ContainerImageRenderer = Memoise(FilterEmpty(report.Container,
//
// not memoised
var ContainerHostnameRenderer = FilterEmpty(report.Container,
MakeMap(
MapContainer2Hostname,
ContainerWithImageNameRenderer,
),
containerHostnameRenderer{},
)
var portMappingMatch = regexp.MustCompile(`([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):([0-9]+)->([0-9]+)/tcp`)
@@ -312,21 +309,24 @@ func MapContainerImage2Name(n report.Node) report.Node {
var containerHostnameTopology = MakeGroupNodeTopology(report.Container, report.DockerContainerHostname)
// MapContainer2Hostname maps container Nodes to 'hostname' renderabled nodes..
func MapContainer2Hostname(n report.Node) report.Node {
// Propagate all pseudo nodes
if n.Topology == Pseudo {
return n
}
// containerHostnameRenderer collects containers by docker hostname
type containerHostnameRenderer struct{}
// Otherwise, if some some reason the container doesn't have a hostname
// (maybe slightly out of sync reports), just drop it
id, ok := n.Latest.Lookup(report.DockerContainerHostname)
if !ok {
return report.Node{}
}
func (m containerHostnameRenderer) Render(ctx context.Context, rpt report.Report) Nodes {
containers := ContainerWithImageNameRenderer.Render(ctx, rpt)
ret := newJoinResults(nil)
node := NewDerivedNode(id, n).WithTopology(containerHostnameTopology)
node.Counters = node.Counters.Add(n.Topology, 1)
return node
for _, n := range containers.Nodes {
if n.Topology == Pseudo {
ret.passThrough(n)
continue
}
// If some some reason the container doesn't have a hostname, just drop it
id, ok := n.Latest.Lookup(report.DockerContainerHostname)
if !ok {
continue
}
ret.addChildAndChildren(n, id, containerHostnameTopology)
}
return ret.result(containers)
}

View File

@@ -164,7 +164,7 @@ func MakeNodeSummary(rc RenderContext, n report.Node) (NodeSummary, bool) {
Adjacency: n.Adjacency,
}
// Only include metadata, metrics, tables when it's not a group node
if _, ok := n.Counters.Lookup(n.Topology); !ok {
if _, ok := n.LookupCounter(n.Topology); !ok {
if topology, ok := rc.Topology(n.Topology); ok {
summary.Metadata = topology.MetadataTemplates.MetadataRows(n)
summary.Metrics = topology.MetricTemplates.MetricRows(n)
@@ -292,7 +292,7 @@ func containerImageNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSu
// heuristic regexp match we cannot tell the difference.
base.Label, _ = report.ParseContainerImageNodeID(n.ID)
}
base.LabelMinor = pluralize(n.Counters, report.Container, "container", "containers")
base.LabelMinor = pluralize(n, report.Container, "container", "containers")
base.Rank = base.Label
base.Stack = true
return base
@@ -314,7 +314,7 @@ func addKubernetesLabelAndRank(base BasicNodeSummary, n report.Node) BasicNodeSu
func podNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSummary {
base = addKubernetesLabelAndRank(base, n)
base.LabelMinor = pluralize(n.Counters, report.Container, "container", "containers")
base.LabelMinor = pluralize(n, report.Container, "container", "containers")
return base
}
@@ -331,7 +331,7 @@ func podGroupNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSummary
base.Stack = true
// NB: pods are the highest aggregation level for which we display
// counts.
count := pluralize(n.Counters, report.Pod, "pod", "pods")
count := pluralize(n, report.Pod, "pod", "pods")
if typeName, ok := podGroupNodeTypeName[n.Topology]; ok {
base.LabelMinor = fmt.Sprintf("%s of %s", typeName, count)
} else {
@@ -423,7 +423,7 @@ func groupNodeSummary(base BasicNodeSummary, r report.Report, n report.Node) Bas
base.Shape = t.GetShape()
base.Tag = t.Tag
if t.Label != "" {
base.LabelMinor = pluralize(n.Counters, topology, t.Label, t.LabelPlural)
base.LabelMinor = pluralize(n, topology, t.Label, t.LabelPlural)
}
}
}
@@ -431,8 +431,8 @@ func groupNodeSummary(base BasicNodeSummary, r report.Report, n report.Node) Bas
return base
}
func pluralize(counters report.Counters, key, singular, plural string) string {
c, ok := counters.Lookup(key)
func pluralize(n report.Node, key, singular, plural string) string {
c, ok := n.LookupCounter(key)
if !ok {
c = 0
}

View File

@@ -123,7 +123,7 @@ var (
RenderedProcessNames = report.Nodes{
fixture.Client1Name: processNameNode(fixture.Client1Name, fixture.ServerName).
WithLatests(map[string]string{process.Name: fixture.Client1Name}).
WithCounters(map[string]int{report.Process: 2}).
AddCounter(report.Process, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -133,13 +133,14 @@ var (
fixture.ServerName: processNameNode(fixture.ServerName).
WithLatests(map[string]string{process.Name: fixture.ServerName}).
WithCounters(map[string]int{report.Process: 1}).
AddCounter(report.Process, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
)),
fixture.NonContainerName: processNameNode(fixture.NonContainerName, render.OutgoingInternetID).
AddCounter(report.Process, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.NonContainerNodeID],
RenderedProcesses[fixture.NonContainerProcessNodeID],
@@ -180,6 +181,8 @@ var (
RenderedProcesses[fixture.ServerProcessNodeID],
)),
fixture.ServerContainer2NodeID: container(fixture.ServerContainer2NodeID),
uncontainedServerID: uncontainedServerNode,
render.IncomingInternetID: theIncomingInternetNode(fixture.ServerContainerNodeID),
render.OutgoingInternetID: theOutgoingInternetNode,
@@ -190,9 +193,7 @@ var (
WithLatests(map[string]string{
docker.ContainerHostname: fixture.ClientContainerHostname,
}).
WithCounters(map[string]int{
report.Container: 1,
}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -205,10 +206,12 @@ var (
WithLatests(map[string]string{
docker.ContainerHostname: fixture.ServerContainerHostname,
}).
AddCounter(report.Container, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
RenderedContainers[fixture.ServerContainerNodeID],
RenderedContainers[fixture.ServerContainer2NodeID],
)),
uncontainedServerID: uncontainedServerNode,
@@ -226,9 +229,7 @@ var (
docker.ImageID: fixture.ClientContainerImageID,
docker.ImageName: fixture.ClientContainerImageName,
}).
WithCounters(map[string]int{
report.Container: 1,
}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -238,10 +239,12 @@ var (
)),
ServerContainerImageNodeID: containerImage(ServerContainerImageNodeID).
AddCounter(report.Container, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
RenderedContainers[fixture.ServerContainerNodeID],
RenderedContainers[fixture.ServerContainer2NodeID],
)),
uncontainedServerID: uncontainedServerNode,
@@ -254,10 +257,14 @@ var (
uncontainedServerNode,
RenderedEndpoints[fixture.NonContainerNodeID],
RenderedProcesses[fixture.NonContainerProcessNodeID],
))
RenderedContainers[fixture.ServerContainer2NodeID],
)).
AddCounter(report.Container, 1).
AddCounter(render.Pseudo, 1)
RenderedPods = report.Nodes{
fixture.ClientPodNodeID: pod(fixture.ClientPodNodeID, fixture.ServerPodNodeID).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -267,6 +274,7 @@ var (
)),
fixture.ServerPodNodeID: pod(fixture.ServerPodNodeID).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
@@ -323,6 +331,7 @@ var (
RenderedPodServices = report.Nodes{
fixture.ServiceNodeID: service(fixture.ServiceNodeID, fixture.ServiceNodeID).
AddCounter(report.Pod, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -346,6 +355,10 @@ var (
WithLatests(map[string]string{
report.HostName: fixture.ClientHostName,
}).
AddCounter(report.Container, 1).
AddCounter(report.ContainerImage, 1).
AddCounter(report.Pod, 1).
AddCounter(report.Process, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -357,12 +370,17 @@ var (
)),
fixture.ServerHostNodeID: hostNode(fixture.ServerHostNodeID, render.OutgoingInternetID).
AddCounter(report.Container, 2).
AddCounter(report.ContainerImage, 1).
AddCounter(report.Pod, 1).
AddCounter(report.Process, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedEndpoints[fixture.NonContainerNodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
RenderedProcesses[fixture.NonContainerProcessNodeID],
RenderedContainers[fixture.ServerContainerNodeID],
RenderedContainers[fixture.ServerContainer2NodeID],
RenderedContainerImages[ServerContainerImageNodeID],
RenderedPods[fixture.ServerPodNodeID],
)),

View File

@@ -195,7 +195,7 @@ func (ret *joinResults) addUnmappedChild(m report.Node, id string, topology stri
}
result.Children.UnsafeAdd(m)
if m.Topology != report.Endpoint { // optimisation: we never look at endpoint counts
result.Counters = result.Counters.Add(m.Topology, 1)
result = result.AddCounter(m.Topology, 1)
}
ret.nodes[id] = result
}