func renderTo(rpt report.Report, topology string) (detailed.NodeSummaries, error) { renderer, ok := map[string]render.Renderer{ "processes": render.FilterUnconnected(render.ProcessWithContainerNameRenderer), "processes-by-name": render.FilterUnconnected(render.ProcessNameRenderer), "containers": render.ContainerWithImageNameRenderer, "containers-by-image": render.ContainerImageRenderer, "hosts": render.HostRenderer, }[topology] if !ok { return detailed.NodeSummaries{}, fmt.Errorf("unknown topology %v", topology) } return detailed.Summaries(rpt, renderer.Render(rpt, render.FilterNoop)), nil }
func init() { containerFilters := []APITopologyOptionGroup{ { ID: "system", Default: "application", Options: []APITopologyOption{ {"system", "System containers", render.IsSystem}, {"application", "Application containers", render.IsApplication}, {"both", "Both", nil}, }, }, { ID: "stopped", Default: "running", Options: []APITopologyOption{ {"stopped", "Stopped containers", render.IsStopped}, {"running", "Running containers", render.IsRunning}, {"both", "Both", nil}, }, }, } unconnectedFilter := []APITopologyOptionGroup{ { ID: "unconnected", Default: "hide", Options: []APITopologyOption{ // Show the user why there are filtered nodes in this view. // Don't give them the option to show those nodes. {"hide", "Unconnected nodes hidden", nil}, }, }, } // Topology option labels should tell the current state. The first item must // be the verb to get to that state topologyRegistry.add( APITopologyDesc{ id: "processes", renderer: render.FilterUnconnected(render.ProcessWithContainerNameRenderer), Name: "Processes", Rank: 1, Options: unconnectedFilter, }, APITopologyDesc{ id: "processes-by-name", parent: "processes", renderer: render.FilterUnconnected(render.ProcessNameRenderer), Name: "by name", Options: unconnectedFilter, }, APITopologyDesc{ id: "containers", renderer: render.ContainerWithImageNameRenderer, Name: "Containers", Rank: 2, Options: containerFilters, }, APITopologyDesc{ id: "containers-by-hostname", parent: "containers", renderer: render.ContainerHostnameRenderer, Name: "by DNS name", Options: containerFilters, }, APITopologyDesc{ id: "containers-by-image", parent: "containers", renderer: render.ContainerImageRenderer, Name: "by image", Options: containerFilters, }, APITopologyDesc{ id: "pods", renderer: render.PodRenderer, Name: "Pods", Rank: 3, HideIfEmpty: true, }, APITopologyDesc{ id: "replica-sets", parent: "pods", renderer: render.ReplicaSetRenderer, Name: "replica sets", HideIfEmpty: true, }, APITopologyDesc{ id: "deployments", parent: "pods", renderer: render.DeploymentRenderer, Name: "deployments", HideIfEmpty: true, }, APITopologyDesc{ id: "services", parent: "pods", renderer: render.PodServiceRenderer, Name: "services", HideIfEmpty: true, }, APITopologyDesc{ id: "hosts", renderer: render.HostRenderer, Name: "Hosts", Rank: 4, }, ) }