mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Applications (expr) topology
This commit is contained in:
@@ -16,7 +16,7 @@ func TestAPITopology(t *testing.T) {
|
||||
if err := json.Unmarshal(body, &topologies); err != nil {
|
||||
t.Fatalf("JSON parse error: %s", err)
|
||||
}
|
||||
equals(t, 3, len(topologies))
|
||||
equals(t, 4, len(topologies))
|
||||
|
||||
for _, topology := range topologies {
|
||||
is200(t, ts, topology.URL)
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"github.com/weaveworks/scope/render"
|
||||
"github.com/weaveworks/scope/render/dsl"
|
||||
"github.com/weaveworks/scope/report"
|
||||
"github.com/weaveworks/scope/xfer"
|
||||
)
|
||||
@@ -137,6 +138,21 @@ var topologyRegistry = map[string]topologyView{
|
||||
parent: "",
|
||||
renderer: render.FilterUnconnected(render.ProcessWithContainerNameRenderer{}),
|
||||
},
|
||||
"applications-expr": {
|
||||
human: "Applications (expr)",
|
||||
parent: "",
|
||||
renderer: render.CustomRenderer{
|
||||
Renderer: render.Map{
|
||||
Renderer: render.SelectAll,
|
||||
MapFunc: render.MapIdentity,
|
||||
},
|
||||
RenderFunc: dsl.ParseExpressions(
|
||||
"ALL GROUPBY {{pid}}",
|
||||
"NOT WITH {{pid}} REMOVE",
|
||||
"NOT CONNECTED REMOVE",
|
||||
).Eval,
|
||||
},
|
||||
},
|
||||
"applications-by-name": {
|
||||
human: "by name",
|
||||
parent: "applications",
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
})
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user