1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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}
- }
|