mirror of
https://github.com/weaveworks/scope.git
synced 2026-08-18 03:46:45 +00:00
Introduce renderers; allow them to recurse.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package render
|
||||
|
||||
import (
|
||||
"github.com/weaveworks/scope/report"
|
||||
)
|
||||
|
||||
// Renderer is something that can render a report to a set of RenderableNodes
|
||||
type Renderer interface {
|
||||
Render(report.Report) report.RenderableNodes
|
||||
AggregateMetadata(rpt report.Report, localID, remoteID string) report.AggregateMetadata
|
||||
}
|
||||
|
||||
// Reduce renderer is a Renderer which merges together the output of several
|
||||
// other renderers
|
||||
type Reduce []Renderer
|
||||
|
||||
// Render produces a set of RenderableNodes given a Report
|
||||
func (r Reduce) Render(rpt report.Report) report.RenderableNodes {
|
||||
result := report.RenderableNodes{}
|
||||
for _, renderer := range r {
|
||||
result.Merge(renderer.Render(rpt))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// AggregateMetadata produces an AggregateMetadata for a given edge
|
||||
func (r Reduce) AggregateMetadata(rpt report.Report, localID, remoteID string) report.AggregateMetadata {
|
||||
metadata := report.AggregateMetadata{}
|
||||
for _, renderer := range r {
|
||||
metadata.Merge(renderer.AggregateMetadata(rpt, localID, remoteID))
|
||||
}
|
||||
return metadata
|
||||
}
|
||||
|
||||
// Map is a Renderer which produces a set of RendererNodes by using a
|
||||
// Mapper functions and topology selector.
|
||||
type Map struct {
|
||||
Selector report.TopologySelector
|
||||
Mapper report.MapFunc
|
||||
Pseudo report.PseudoFunc
|
||||
}
|
||||
|
||||
// Render produces a set of RenderableNodes given a Report
|
||||
func (m Map) Render(rpt report.Report) report.RenderableNodes {
|
||||
return m.Selector(rpt).RenderBy(m.Mapper, m.Pseudo)
|
||||
}
|
||||
|
||||
// AggregateMetadata produces an AggregateMetadata for a given edge
|
||||
func (m Map) AggregateMetadata(rpt report.Report, localID, remoteID string) report.AggregateMetadata {
|
||||
return m.Selector(rpt).EdgeMetadata(m.Mapper, localID, remoteID).Transform()
|
||||
}
|
||||
Reference in New Issue
Block a user