diff --git a/app/api_topologies.go b/app/api_topologies.go index 4f94d8823..b1ed68022 100644 --- a/app/api_topologies.go +++ b/app/api_topologies.go @@ -30,6 +30,7 @@ const ( replicaSetsID = "replica-sets" deploymentsID = "deployments" daemonsetsID = "daemonsets" + kubeCombinedID = "kube-combined" servicesID = "services" hostsID = "hosts" weaveID = "weave" @@ -119,7 +120,7 @@ func updateKubeFilters(rpt report.Report, topologies []APITopologyDesc) []APITop sort.Strings(ns) topologies = append([]APITopologyDesc{}, topologies...) // Make a copy so we can make changes safely for i, t := range topologies { - if t.id == containersID || t.id == podsID || t.id == servicesID || t.id == deploymentsID || t.id == replicaSetsID || t.id == daemonsetsID { + if t.id == containersID || t.id == podsID || t.id == servicesID || t.id == deploymentsID || t.id == replicaSetsID || t.id == daemonsetsID || t.id == kubeCombinedID { topologies[i] = mergeTopologyFilters(t, []APITopologyOptionGroup{ namespaceFilters(ns, "All Namespaces"), }) @@ -267,6 +268,14 @@ func MakeRegistry() *Registry { Options: []APITopologyOptionGroup{unmanagedFilter}, HideIfEmpty: true, }, + APITopologyDesc{ + id: kubeCombinedID, + parent: podsID, + renderer: render.KubeCombinedRenderer, + Name: "combined", + Options: []APITopologyOptionGroup{unmanagedFilter}, + HideIfEmpty: true, + }, APITopologyDesc{ id: servicesID, parent: podsID, diff --git a/render/pod.go b/render/pod.go index 8cbf73723..dc1446edf 100644 --- a/render/pod.go +++ b/render/pod.go @@ -111,6 +111,13 @@ var DaemonSetRenderer = ConditionalRenderer(renderKubernetesTopologies, ), ) +// KubeCombinedRenderer is a Renderer which combines the daemonset and deployment views +// in (for now) a very naive way. +var KubeCombinedRenderer = MakeReduce( + DeploymentRenderer, + DaemonSetRenderer, +) + func mapPodCounts(parent, original report.Node) report.Node { // When mapping ReplicaSets to Deployments, we want to propagate the Pods counter if count, ok := original.Counters.Lookup(report.Pod); ok {