Move Counters into Latest

The only place Counters are used is in rendering, for the number of
nodes under a topology, so the overhead of holding a unique data
structure in every Node is unwarranted.

Counters are not set in the probe, so we don't need any
backwards-compatibility in report decoding. Similarly they are not set
until after all nodes are merged, so we don't need that logic.
This commit is contained in:
Bryan Boreham
2019-10-20 10:16:36 +00:00
parent 1ce1ecad7c
commit c03aeb5d43
13 changed files with 95 additions and 363 deletions

View File

@@ -326,7 +326,7 @@ func MapContainer2Hostname(n report.Node) report.Node {
return report.Node{}
}
node := NewDerivedNode(id, n).WithTopology(containerHostnameTopology)
node.Counters = node.Counters.Add(n.Topology, 1)
node := NewDerivedNode(id, n).WithTopology(containerHostnameTopology).
AddCounter(n.Topology, 1)
return node
}

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,14 +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).
WithCounters(map[string]int{report.Process: 1}).
AddCounter(report.Process, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.NonContainerNodeID],
RenderedProcesses[fixture.NonContainerProcessNodeID],
@@ -191,9 +191,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],
@@ -206,7 +204,7 @@ var (
WithLatests(map[string]string{
docker.ContainerHostname: fixture.ServerContainerHostname,
}).
WithCounters(map[string]int{report.Container: 1}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
@@ -228,9 +226,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],
@@ -240,7 +236,7 @@ var (
)),
ServerContainerImageNodeID: containerImage(ServerContainerImageNodeID).
WithCounters(map[string]int{report.Container: 1}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
@@ -258,11 +254,11 @@ var (
RenderedEndpoints[fixture.NonContainerNodeID],
RenderedProcesses[fixture.NonContainerProcessNodeID],
)).
WithCounters(map[string]int{render.Pseudo: 1})
AddCounter(render.Pseudo, 1)
RenderedPods = report.Nodes{
fixture.ClientPodNodeID: pod(fixture.ClientPodNodeID, fixture.ServerPodNodeID).
WithCounters(map[string]int{report.Container: 1}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -272,7 +268,7 @@ var (
)),
fixture.ServerPodNodeID: pod(fixture.ServerPodNodeID).
WithCounters(map[string]int{report.Container: 1}).
AddCounter(report.Container, 1).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedProcesses[fixture.ServerProcessNodeID],
@@ -329,7 +325,7 @@ var (
RenderedPodServices = report.Nodes{
fixture.ServiceNodeID: service(fixture.ServiceNodeID, fixture.ServiceNodeID).
WithCounters(map[string]int{report.Pod: 2}).
AddCounter(report.Pod, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Client54001NodeID],
RenderedEndpoints[fixture.Client54002NodeID],
@@ -353,12 +349,10 @@ var (
WithLatests(map[string]string{
report.HostName: fixture.ClientHostName,
}).
WithCounters(map[string]int{
report.Container: 1,
report.ContainerImage: 1,
report.Pod: 1,
report.Process: 2,
}).
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],
@@ -370,12 +364,10 @@ var (
)),
fixture.ServerHostNodeID: hostNode(fixture.ServerHostNodeID, render.OutgoingInternetID).
WithCounters(map[string]int{
report.Container: 1,
report.ContainerImage: 1,
report.Pod: 1,
report.Process: 2,
}).
AddCounter(report.Container, 1).
AddCounter(report.ContainerImage, 1).
AddCounter(report.Pod, 1).
AddCounter(report.Process, 2).
WithChildren(report.MakeNodeSet(
RenderedEndpoints[fixture.Server80NodeID],
RenderedEndpoints[fixture.NonContainerNodeID],

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
}