mirror of
https://github.com/weaveworks/scope.git
synced 2026-05-09 02:36:52 +00:00
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.
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/weaveworks/scope/report"
|
|
)
|
|
|
|
// Prune returns a copy of the Nodes with all information not strictly
|
|
// necessary for rendering nodes and edges in the UI cut away.
|
|
func Prune(nodes report.Nodes) report.Nodes {
|
|
result := report.Nodes{}
|
|
for id, node := range nodes {
|
|
result[id] = PruneNode(node)
|
|
}
|
|
return result
|
|
}
|
|
|
|
// PruneNode returns a copy of the Node with all information not strictly
|
|
// necessary for rendering nodes and edges stripped away. Specifically, that
|
|
// means cutting out parts of the Node.
|
|
func PruneNode(node report.Node) report.Node {
|
|
prunedChildren := report.MakeNodeSet()
|
|
node.Children.ForEach(func(child report.Node) {
|
|
prunedChildren = prunedChildren.Add(PruneNode(child))
|
|
})
|
|
prunedNode := report.MakeNode(
|
|
node.ID).
|
|
WithTopology(node.Topology).
|
|
WithAdjacent(node.Adjacency...).
|
|
WithChildren(prunedChildren)
|
|
// Copy counters across, but with zero timestamp so they compare equal
|
|
node.Latest.ForEach(func(k string, _ time.Time, v string) {
|
|
if strings.HasPrefix(k, report.CounterPrefix) {
|
|
prunedNode.Latest = prunedNode.Latest.Set(k, time.Time{}, v)
|
|
}
|
|
})
|
|
return prunedNode
|
|
}
|