diff --git a/app/api_topologies.go b/app/api_topologies.go index f7d4fb40c..e4c6eafaf 100644 --- a/app/api_topologies.go +++ b/app/api_topologies.go @@ -29,9 +29,7 @@ const ( containersByImageID = "containers-by-image" podsID = "pods" replicaSetsID = "replica-sets" - deploymentsID = "deployments" - daemonsetsID = "daemonsets" - kubeCombinedID = "kube-combined" + kubeControllersID = "kube-controllers" servicesID = "services" hostsID = "hosts" weaveID = "weave" @@ -121,7 +119,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 || t.id == kubeCombinedID { + if t.id == containersID || t.id == podsID || t.id == servicesID || t.id == replicaSetsID || t.id == kubeControllersID { topologies[i] = mergeTopologyFilters(t, []APITopologyOptionGroup{ namespaceFilters(ns, "All Namespaces"), }) @@ -197,7 +195,7 @@ func MakeRegistry() *Registry { }, } - k8sCombinedTypeFilter := APITopologyOptionGroup{ + k8sControllersTypeFilter := APITopologyOptionGroup{ ID: "grouptype", Default: "", SelectType: "union", @@ -205,8 +203,6 @@ func MakeRegistry() *Registry { Options: []APITopologyOption{ {Value: report.Deployment, Label: "Deployments", filter: render.IsTopology(report.Deployment), filterPseudo: false}, {Value: report.DaemonSet, Label: "Daemonsets", filter: render.IsTopology(report.DaemonSet), filterPseudo: false}, - {Value: report.ReplicaSet, Label: "Replica sets", filter: render.IsTopology(report.ReplicaSet), filterPseudo: false}, - {Value: report.Pod, Label: "Pods", filter: render.IsTopology(report.Pod), filterPseudo: false}, }, } @@ -267,27 +263,11 @@ func MakeRegistry() *Registry { HideIfEmpty: true, }, APITopologyDesc{ - id: deploymentsID, + id: kubeControllersID, parent: podsID, - renderer: render.DeploymentRenderer, - Name: "deployments", - Options: []APITopologyOptionGroup{unmanagedFilter}, - HideIfEmpty: true, - }, - APITopologyDesc{ - id: daemonsetsID, - parent: podsID, - renderer: render.DaemonSetRenderer, - Name: "daemonsets", - Options: []APITopologyOptionGroup{unmanagedFilter}, - HideIfEmpty: true, - }, - APITopologyDesc{ - id: kubeCombinedID, - parent: podsID, - renderer: render.KubeCombinedRenderer, - Name: "combined", - Options: []APITopologyOptionGroup{unmanagedFilter, k8sCombinedTypeFilter}, + renderer: render.KubeControllerRenderer, + Name: "controllers", + Options: []APITopologyOptionGroup{unmanagedFilter, k8sControllersTypeFilter}, HideIfEmpty: true, }, APITopologyDesc{ diff --git a/render/detailed/summary.go b/render/detailed/summary.go index 5ba4061e3..b3d058b15 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -90,8 +90,8 @@ var primaryAPITopology = map[string]string{ report.ContainerImage: "containers-by-image", report.Pod: "pods", report.ReplicaSet: "replica-sets", - report.Deployment: "deployments", - report.DaemonSet: "daemonsets", + report.Deployment: "kube-controllers", + report.DaemonSet: "kube-controllers", report.Service: "services", report.ECSTask: "ecs-tasks", report.ECSService: "ecs-services", @@ -260,7 +260,6 @@ func podNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) { var podGroupNodeTypeName = map[string]string{ report.Deployment: "Deployment", report.DaemonSet: "Daemon Set", - report.ReplicaSet: "Replica Set", } func podGroupNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) { diff --git a/render/pod.go b/render/pod.go index 3ebd143de..4652d40eb 100644 --- a/render/pod.go +++ b/render/pod.go @@ -78,21 +78,6 @@ var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies, ), ) -// DeploymentRenderer is a Renderer which produces a renderable kubernetes deployments -// graph by merging the pods graph and the deployments topology. -var DeploymentRenderer = ConditionalRenderer(renderKubernetesTopologies, - MakeMap( - PropagateSingleMetrics(report.ReplicaSet), - MakeReduce( - MakeMap( - Map2Parent([]string{report.Deployment}, NoParentsDrop, "", mapPodCounts), - ReplicaSetRenderer, - ), - SelectDeployment, - ), - ), -) - // ReplicaSetRenderer is a Renderer which produces a renderable kubernetes replica sets // graph by merging the pods graph and the replica sets topology. var ReplicaSetRenderer = ConditionalRenderer(renderKubernetesTopologies, @@ -108,41 +93,29 @@ var ReplicaSetRenderer = ConditionalRenderer(renderKubernetesTopologies, ), ) -// DaemonSetRenderer is a Renderer which produces a renderable kubernetes daemonsets -// graph by merging the pods graph and the daemonsets topology. -var DaemonSetRenderer = ConditionalRenderer(renderKubernetesTopologies, - MakeMap( - PropagateSingleMetrics(report.Pod), - MakeReduce( - MakeMap( - Map2Parent([]string{report.DaemonSet}, NoParentsDrop, "", nil), - PodRenderer, - ), - SelectDaemonSet, - ), - ), -) - -// KubeCombinedRenderer is a Renderer which combines the 'top abstraction' of all pods. -// We first map pods to all possible things they can map to, then we map again to -// deployments since some things (replica sets) can map to those (the rest are passed through -// unchanged). +// KubeControllerRenderer is a Renderer which combines all the 'controller' topologies. +// We first map pods to daemonsets and replica sets, then to deployments since replica sets +// can map to those (the rest are passed through unchanged). +// Pods with no controller are mapped to 'Unmanaged' // We can't simply combine the rendered graphs of the high level objects as they would never // have connections to each other. -var KubeCombinedRenderer = ConditionalRenderer(renderKubernetesTopologies, +var KubeControllerRenderer = ConditionalRenderer(renderKubernetesTopologies, MakeReduce( - MakeMap( - Map2Parent([]string{report.Deployment}, NoParentsKeep, "", mapPodCounts), - MakeReduce( - MakeMap( - Map2Parent([]string{ - report.ReplicaSet, - report.DaemonSet, - }, NoParentsKeep, "", nil), - PodRenderer, + MakeFilter( + Complement(IsTopology(report.ReplicaSet)), + MakeMap( + Map2Parent([]string{report.Deployment}, NoParentsKeep, "", mapPodCounts), + MakeReduce( + MakeMap( + Map2Parent([]string{ + report.ReplicaSet, + report.DaemonSet, + }, NoParentsPseudo, UnmanagedID, nil), + PodRenderer, + ), + SelectReplicaSet, + SelectDaemonSet, ), - SelectReplicaSet, - SelectDaemonSet, ), ), SelectDeployment,