mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-28 17:51:21 +00:00
Merge pull request #1200 from weaveworks/1181-hide-in-ui
Stop hiding kubernetes topologies in the backend.
This commit is contained in:
@@ -18,28 +18,6 @@ var (
|
||||
topologyRegistry = ®istry{
|
||||
items: map[string]APITopologyDesc{},
|
||||
}
|
||||
kubernetesTopologies = []APITopologyDesc{
|
||||
{
|
||||
id: "pods",
|
||||
renderer: render.PodRenderer,
|
||||
Name: "Pods",
|
||||
Rank: 3,
|
||||
Options: map[string][]APITopologyOption{"system": {
|
||||
{"show", "System pods shown", false, render.FilterNoop},
|
||||
{"hide", "System pods hidden", true, render.FilterSystem},
|
||||
}},
|
||||
},
|
||||
{
|
||||
id: "pods-by-service",
|
||||
parent: "pods",
|
||||
renderer: render.PodServiceRenderer,
|
||||
Name: "by service",
|
||||
Options: map[string][]APITopologyOption{"system": {
|
||||
{"show", "System services shown", false, render.FilterNoop},
|
||||
{"hide", "System services hidden", true, render.FilterSystem},
|
||||
}},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -106,6 +84,28 @@ func init() {
|
||||
Rank: 4,
|
||||
Options: map[string][]APITopologyOption{},
|
||||
},
|
||||
APITopologyDesc{
|
||||
id: "pods",
|
||||
renderer: render.PodRenderer,
|
||||
Name: "Pods",
|
||||
Rank: 3,
|
||||
HideIfEmpty: true,
|
||||
Options: map[string][]APITopologyOption{"system": {
|
||||
{"show", "System pods shown", false, render.FilterNoop},
|
||||
{"hide", "System pods hidden", true, render.FilterSystem},
|
||||
}},
|
||||
},
|
||||
APITopologyDesc{
|
||||
id: "pods-by-service",
|
||||
parent: "pods",
|
||||
renderer: render.PodServiceRenderer,
|
||||
Name: "by service",
|
||||
HideIfEmpty: true,
|
||||
Options: map[string][]APITopologyOption{"system": {
|
||||
{"show", "System services shown", false, render.FilterNoop},
|
||||
{"hide", "System services hidden", true, render.FilterSystem},
|
||||
}},
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -121,9 +121,10 @@ type APITopologyDesc struct {
|
||||
parent string
|
||||
renderer render.Renderer
|
||||
|
||||
Name string `json:"name"`
|
||||
Rank int `json:"rank"`
|
||||
Options map[string][]APITopologyOption `json:"options"`
|
||||
Name string `json:"name"`
|
||||
Rank int `json:"rank"`
|
||||
HideIfEmpty bool `json:"hide_if_empty"`
|
||||
Options map[string][]APITopologyOption `json:"options"`
|
||||
|
||||
URL string `json:"url"`
|
||||
SubTopologies []APITopologyDesc `json:"sub_topologies,omitempty"`
|
||||
@@ -241,10 +242,6 @@ func decorateWithStats(rpt report.Report, renderer render.Renderer) topologyStat
|
||||
}
|
||||
}
|
||||
|
||||
func (r *registry) enableKubernetesTopologies() {
|
||||
r.add(kubernetesTopologies...)
|
||||
}
|
||||
|
||||
func renderedForRequest(r *http.Request, topology APITopologyDesc) render.Renderer {
|
||||
renderer := topology.renderer
|
||||
for param, opts := range topology.Options {
|
||||
|
||||
@@ -27,7 +27,7 @@ func TestAPITopology(t *testing.T) {
|
||||
if err := decoder.Decode(&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)
|
||||
@@ -65,7 +65,7 @@ func TestAPITopologyAddsKubernetes(t *testing.T) {
|
||||
if err := decoder.Decode(&topologies); err != nil {
|
||||
t.Fatalf("JSON parse error: %s", err)
|
||||
}
|
||||
equals(t, 3, len(topologies))
|
||||
equals(t, 4, len(topologies))
|
||||
|
||||
// Enable the kubernetes topologies
|
||||
rpt := report.MakeReport()
|
||||
|
||||
@@ -157,9 +157,6 @@ func RegisterReportPostHandler(a Adder, router *mux.Router) {
|
||||
return
|
||||
}
|
||||
a.Add(ctx, rpt)
|
||||
if len(rpt.Pod.Nodes) > 0 {
|
||||
topologyRegistry.enableKubernetesTopologies()
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@ import { Store } from 'flux/utils';
|
||||
import AppDispatcher from '../dispatcher/app-dispatcher';
|
||||
import ActionTypes from '../constants/action-types';
|
||||
import { EDGE_ID_SEPARATOR } from '../constants/naming';
|
||||
import { findTopologyById, setTopologyUrlsById, updateTopologyIds } from '../utils/topology-utils';
|
||||
import { findTopologyById, setTopologyUrlsById, updateTopologyIds,
|
||||
filterHiddenTopologies } from '../utils/topology-utils';
|
||||
|
||||
const makeList = List;
|
||||
const makeMap = Map;
|
||||
@@ -62,8 +63,11 @@ const topologySorter = topology => topology.get('rank');
|
||||
// adds ID field to topology (based on last part of URL path) and save urls in
|
||||
// map for easy lookup
|
||||
function processTopologies(nextTopologies) {
|
||||
// filter out hidden topos
|
||||
const visibleTopologies = filterHiddenTopologies(nextTopologies);
|
||||
|
||||
// add IDs to topology objects in-place
|
||||
const topologiesWithId = updateTopologyIds(nextTopologies);
|
||||
const topologiesWithId = updateTopologyIds(visibleTopologies);
|
||||
|
||||
// cache URLs by ID
|
||||
topologyUrlsById = setTopologyUrlsById(topologyUrlsById, topologiesWithId);
|
||||
|
||||
@@ -106,4 +106,18 @@ describe('TopologyUtils', () => {
|
||||
expect(nodes.n2.degree).toEqual(0);
|
||||
expect(nodes.n3.degree).toEqual(0);
|
||||
});
|
||||
|
||||
describe('filterHiddenTopologies', () => {
|
||||
it('should filter out empty topos that set hidden_if_empty=true', () => {
|
||||
const topos = [
|
||||
{id: 'a', hidden_if_empty: true, stats: {node_count: 0, filtered_nodes:0}},
|
||||
{id: 'b', hidden_if_empty: true, stats: {node_count: 1, filtered_nodes:0}},
|
||||
{id: 'c', hidden_if_empty: true, stats: {node_count: 0, filtered_nodes:1}},
|
||||
{id: 'd', hidden_if_empty: false, stats: {node_count: 0, filtered_nodes:0}}
|
||||
];
|
||||
|
||||
const res = TopologyUtils.filterHiddenTopologies(topos);
|
||||
expect(res.map(t => t.id)).toEqual(['b', 'c', 'd']);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
@@ -50,3 +50,8 @@ export function setTopologyUrlsById(topologyUrlsById, topologies) {
|
||||
});
|
||||
return urlMap;
|
||||
}
|
||||
|
||||
export function filterHiddenTopologies(topologies) {
|
||||
return topologies.filter(t => (!t.hidden_if_empty || t.stats.node_count > 0 ||
|
||||
t.stats.filtered_nodes > 0));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user