mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-28 09:41:57 +00:00
remove filtering of unconnected pseudo nodes from ordinary filters
It's now done via a special filter, once, after all other filters have been applied. Some tests need updating since they were relying on ordinary filters doing that filtering.
This commit is contained in:
@@ -16,8 +16,14 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
filterApplication = render.AnyFilterFunc(render.IsPseudoTopology, render.IsApplication)
|
||||
filterSystem = render.AnyFilterFunc(render.IsPseudoTopology, render.IsSystem)
|
||||
filterApplication = render.Transformers([]render.Transformer{
|
||||
render.AnyFilterFunc(render.IsPseudoTopology, render.IsApplication),
|
||||
render.FilterUnconnectedPseudo,
|
||||
})
|
||||
filterSystem = render.Transformers([]render.Transformer{
|
||||
render.AnyFilterFunc(render.IsPseudoTopology, render.IsSystem),
|
||||
render.FilterUnconnectedPseudo,
|
||||
})
|
||||
)
|
||||
|
||||
func TestMapProcess2Container(t *testing.T) {
|
||||
|
||||
@@ -63,12 +63,10 @@ func Complement(f FilterFunc) FilterFunc {
|
||||
// Transform applies the filter to all nodes
|
||||
func (f FilterFunc) Transform(nodes Nodes) Nodes {
|
||||
output := report.Nodes{}
|
||||
inDegrees := map[string]int{}
|
||||
filtered := nodes.Filtered
|
||||
for id, node := range nodes.Nodes {
|
||||
if f(node) {
|
||||
output[id] = node
|
||||
inDegrees[id] = 0
|
||||
} else {
|
||||
filtered++
|
||||
}
|
||||
@@ -80,25 +78,12 @@ func (f FilterFunc) Transform(nodes Nodes) Nodes {
|
||||
for _, dstID := range node.Adjacency {
|
||||
if _, ok := output[dstID]; ok {
|
||||
newAdjacency = newAdjacency.Add(dstID)
|
||||
inDegrees[dstID]++
|
||||
}
|
||||
}
|
||||
node.Adjacency = newAdjacency
|
||||
output[id] = node
|
||||
}
|
||||
|
||||
// Remove unconnected pseudo nodes, see #483.
|
||||
for id, inDegree := range inDegrees {
|
||||
if inDegree > 0 {
|
||||
continue
|
||||
}
|
||||
node := output[id]
|
||||
if node.Topology != Pseudo || len(node.Adjacency) > 0 {
|
||||
continue
|
||||
}
|
||||
delete(output, id)
|
||||
filtered++
|
||||
}
|
||||
return Nodes{Nodes: output, Filtered: filtered}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,12 @@ import (
|
||||
"github.com/weaveworks/scope/test/reflect"
|
||||
)
|
||||
|
||||
func isNotBar(node report.Node) bool {
|
||||
return node.ID != "bar"
|
||||
}
|
||||
var filterBar = render.Transformers([]render.Transformer{
|
||||
render.FilterFunc(func(node report.Node) bool {
|
||||
return node.ID != "bar"
|
||||
}),
|
||||
render.FilterUnconnectedPseudo,
|
||||
})
|
||||
|
||||
func TestFilterRender(t *testing.T) {
|
||||
renderer := mockRenderer{Nodes: report.Nodes{
|
||||
@@ -36,7 +39,7 @@ func TestFilterRender2(t *testing.T) {
|
||||
"bar": report.MakeNode("bar").WithAdjacent("foo"),
|
||||
"baz": report.MakeNode("baz"),
|
||||
}}
|
||||
have := render.Render(report.MakeReport(), renderer, render.FilterFunc(isNotBar)).Nodes
|
||||
have := render.Render(report.MakeReport(), renderer, filterBar).Nodes
|
||||
if have["foo"].Adjacency.Contains("bar") {
|
||||
t.Error("adjacencies for removed nodes should have been removed")
|
||||
}
|
||||
@@ -64,7 +67,7 @@ func TestFilterUnconnectedPseudoNodes(t *testing.T) {
|
||||
"bar": report.MakeNode("bar").WithAdjacent("baz"),
|
||||
"baz": report.MakeNode("baz").WithTopology(render.Pseudo),
|
||||
}}
|
||||
have := render.Render(report.MakeReport(), renderer, render.FilterFunc(isNotBar)).Nodes
|
||||
have := render.Render(report.MakeReport(), renderer, filterBar).Nodes
|
||||
if _, ok := have["baz"]; ok {
|
||||
t.Error("expected the unconnected pseudonode baz to have been removed")
|
||||
}
|
||||
@@ -75,7 +78,7 @@ func TestFilterUnconnectedPseudoNodes(t *testing.T) {
|
||||
"bar": report.MakeNode("bar").WithAdjacent("foo"),
|
||||
"baz": report.MakeNode("baz").WithTopology(render.Pseudo).WithAdjacent("bar"),
|
||||
}}
|
||||
have := render.Render(report.MakeReport(), renderer, render.FilterFunc(isNotBar)).Nodes
|
||||
have := render.Render(report.MakeReport(), renderer, filterBar).Nodes
|
||||
if _, ok := have["baz"]; ok {
|
||||
t.Error("expected the unconnected pseudonode baz to have been removed")
|
||||
}
|
||||
|
||||
@@ -20,7 +20,10 @@ func TestPodRenderer(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
var filterNonKubeSystem = render.Complement(render.IsNamespace("kube-system"))
|
||||
var filterNonKubeSystem = render.Transformers([]render.Transformer{
|
||||
render.Complement(render.IsNamespace("kube-system")),
|
||||
render.FilterUnconnectedPseudo,
|
||||
})
|
||||
|
||||
func TestPodFilterRenderer(t *testing.T) {
|
||||
// tag on containers or pod namespace in the topology and ensure
|
||||
|
||||
Reference in New Issue
Block a user