Applications (expr) topology

This commit is contained in:
Peter Bourgon
2015-09-10 11:51:31 +02:00
parent a94731c59b
commit f259f9306d
6 changed files with 39 additions and 3 deletions

View File

@@ -341,7 +341,11 @@ func cp(dst render.RenderableNodes, src render.RenderableNodes, id string) {
}
func merge(dst render.RenderableNodes, dstID string, src render.RenderableNodes, srcID string) {
dst[dstID] = dst[dstID].Merge(src[srcID])
dstNode, ok := dst[dstID]
if !ok {
dstNode = render.NewRenderableNode(dstID)
}
dst[dstID] = dstNode.Merge(src[srcID])
// Every transform that calls merge must call shift at the end, to update
// adjacency lists and edge metadatas.

View File

@@ -95,7 +95,7 @@ func ParseExpressions(strs ...string) Expressions {
for _, str := range strs {
expr, err := ParseExpression(str)
if err != nil {
log.Printf("%s: %v", str, err)
log.Printf("%q: %v", str, err)
continue
}
exprs = append(exprs, expr)

View File

@@ -31,6 +31,11 @@ const (
// If the output is empty, the node shall be omitted from the rendered topology.
type MapFunc func(RenderableNode, report.Networks) RenderableNodes
// MapIdentity returns a perfect identity mapping of the input domain.
func MapIdentity(n RenderableNode, _ report.Networks) RenderableNodes {
return RenderableNodes{n.ID: n}
}
// MapEndpointIdentity maps an endpoint topology node to a single endpoint
// renderable node. As it is only ever run on endpoint topology nodes, we
// expect that certain keys are present.

View File

@@ -86,4 +86,15 @@ var (
SelectHost = TopologySelector(func(r report.Report) RenderableNodes {
return MakeRenderableNodes(r.Host)
})
// SelectAll merges all topologies.
SelectAll = TopologySelector(func(r report.Report) RenderableNodes {
rns := RenderableNodes{}
for _, t := range r.Topologies() {
for id, rn := range MakeRenderableNodes(t) {
rns[id] = rn
}
}
return rns
})
)