mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-28 17:51:21 +00:00
Merge pull request #1422 from weaveworks/1364-kuber-kuber-kuber-kuber-kuber-kuber-kuber-kuber-netes
Add a condition to rendering any kubernetes nodes at all
This commit is contained in:
@@ -14,10 +14,14 @@ const (
|
||||
UnmanagedMajor = "Unmanaged"
|
||||
)
|
||||
|
||||
func renderKubernetesTopologies(rpt report.Report) bool {
|
||||
return len(rpt.Pod.Nodes)+len(rpt.Service.Nodes) > 1
|
||||
}
|
||||
|
||||
// PodRenderer is a Renderer which produces a renderable kubernetes
|
||||
// graph by merging the container graph and the pods topology.
|
||||
var PodRenderer = ApplyDecorators(
|
||||
MakeFilter(
|
||||
var PodRenderer = ConditionalRenderer(renderKubernetesTopologies,
|
||||
ApplyDecorators(MakeFilter(
|
||||
func(n report.Node) bool {
|
||||
state, ok := n.Latest.Lookup(kubernetes.PodState)
|
||||
return (!ok || state != kubernetes.StateDeleted)
|
||||
@@ -36,13 +40,13 @@ var PodRenderer = ApplyDecorators(
|
||||
),
|
||||
SelectPod,
|
||||
),
|
||||
),
|
||||
)),
|
||||
)
|
||||
|
||||
// PodServiceRenderer is a Renderer which produces a renderable kubernetes services
|
||||
// graph by merging the pods graph and the services topology.
|
||||
var PodServiceRenderer = ApplyDecorators(
|
||||
FilterEmpty(report.Pod,
|
||||
var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies,
|
||||
ApplyDecorators(FilterEmpty(report.Pod,
|
||||
MakeReduce(
|
||||
MakeMap(
|
||||
MapPod2Service,
|
||||
@@ -50,7 +54,7 @@ var PodServiceRenderer = ApplyDecorators(
|
||||
),
|
||||
SelectService,
|
||||
),
|
||||
),
|
||||
)),
|
||||
)
|
||||
|
||||
// MapContainer2Pod maps container Nodes to pod
|
||||
|
||||
@@ -158,3 +158,30 @@ func propagateLatest(key string, from, to report.Node) report.Node {
|
||||
}
|
||||
return to
|
||||
}
|
||||
|
||||
// Condition is a predecate over the entire report that can evaluate to true or false.
|
||||
type Condition func(report.Report) bool
|
||||
|
||||
type conditionalRenderer struct {
|
||||
Condition
|
||||
Renderer
|
||||
}
|
||||
|
||||
// ConditionalRenderer renders nothing if the condition is false, otherwise it defers
|
||||
// to the wrapped Renderer.
|
||||
func ConditionalRenderer(c Condition, r Renderer) Renderer {
|
||||
return Memoise(conditionalRenderer{c, r})
|
||||
}
|
||||
|
||||
func (cr conditionalRenderer) Render(rpt report.Report, dct Decorator) report.Nodes {
|
||||
if cr.Condition(rpt) {
|
||||
return cr.Renderer.Render(rpt, dct)
|
||||
}
|
||||
return report.Nodes{}
|
||||
}
|
||||
func (cr conditionalRenderer) Stats(rpt report.Report, dct Decorator) Stats {
|
||||
if cr.Condition(rpt) {
|
||||
return cr.Renderer.Stats(rpt, dct)
|
||||
}
|
||||
return Stats{}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user