mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
* Pass Go context down to Renderers This is useful for cancellation or tracing. * Add tracing spans to app Also log things like number of nodes in Map, total number of reports.
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package render
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/weaveworks/scope/report"
|
|
)
|
|
|
|
// PropagateSingleMetrics creates a renderer which propagates metrics
|
|
// from a node's child to the node. The child is selected based on the
|
|
// specified topology. No metrics are propagated when there is more
|
|
// than one such child.
|
|
func PropagateSingleMetrics(topology string, r Renderer) Renderer {
|
|
return propagateSingleMetrics{topology: topology, r: r}
|
|
}
|
|
|
|
type propagateSingleMetrics struct {
|
|
topology string
|
|
r Renderer
|
|
}
|
|
|
|
func (p propagateSingleMetrics) Render(ctx context.Context, rpt report.Report) Nodes {
|
|
nodes := p.r.Render(ctx, rpt)
|
|
outputs := make(report.Nodes, len(nodes.Nodes))
|
|
for id, n := range nodes.Nodes {
|
|
var first report.Node
|
|
found := 0
|
|
n.Children.ForEach(func(child report.Node) {
|
|
if child.Topology == p.topology {
|
|
if _, ok := child.Latest.Lookup(report.DoesNotMakeConnections); !ok {
|
|
if found == 0 {
|
|
first = child
|
|
}
|
|
found++
|
|
}
|
|
}
|
|
})
|
|
if found == 1 {
|
|
n = n.WithMetrics(first.Metrics)
|
|
}
|
|
outputs[id] = n
|
|
}
|
|
return Nodes{Nodes: outputs, Filtered: nodes.Filtered}
|
|
}
|