Files
weave-scope/render/selectors.go
Paul Bellamy 0379fc4cf3 generate an ID for each memoiser so they can share cache
Makes cache clearing easier, and then we don't need to add
`ResetCache()` to the Renderer interface.
2016-02-17 17:10:14 +00:00

83 lines
2.4 KiB
Go

package render
import (
"github.com/weaveworks/scope/report"
)
// TopologySelector selects a single topology from a report.
// NB it is also a Renderer!
type TopologySelector func(r report.Report) RenderableNodes
// Render implements Renderer
func (t TopologySelector) Render(r report.Report) RenderableNodes {
return t(r)
}
// Stats implements Renderer
func (t TopologySelector) Stats(r report.Report) Stats {
return Stats{}
}
// MakeRenderableNodes converts a topology to a set of RenderableNodes
func MakeRenderableNodes(t report.Topology) RenderableNodes {
result := RenderableNodes{}
for id, nmd := range t.Nodes {
result[id] = NewRenderableNode(id).WithNode(nmd)
}
// Push EdgeMetadata to both ends of the edges
for srcID, srcNode := range result {
srcNode.Edges.ForEach(func(dstID string, emd report.EdgeMetadata) {
srcNode.EdgeMetadata = srcNode.EdgeMetadata.Flatten(emd)
dstNode := result[dstID]
dstNode.EdgeMetadata = dstNode.EdgeMetadata.Flatten(emd.Reversed())
result[dstID] = dstNode
})
result[srcID] = srcNode
}
return result
}
var (
// SelectEndpoint selects the endpoint topology.
SelectEndpoint = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Endpoint)
})
// SelectProcess selects the process topology.
SelectProcess = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Process)
})
// SelectContainer selects the container topology.
SelectContainer = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Container)
})
// SelectContainerImage selects the container image topology.
SelectContainerImage = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.ContainerImage)
})
// SelectAddress selects the address topology.
SelectAddress = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Address)
})
// SelectHost selects the address topology.
SelectHost = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Host)
})
// SelectPod selects the pod topology.
SelectPod = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Pod)
})
// SelectService selects the service topology.
SelectService = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Service)
})
)