1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package detailed
- import (
- "github.com/weaveworks/scope/report"
- )
- // Parent is the information needed to build a link to the parent of a Node.
- type Parent struct {
- ID string `json:"id"`
- Label string `json:"label"`
- TopologyID string `json:"topologyId"`
- }
- // parent topologies, in the order we want to show them
- var parentTopologies = []string{
- report.Container,
- report.ContainerImage,
- report.Pod,
- report.Deployment,
- report.DaemonSet,
- report.StatefulSet,
- report.CronJob,
- report.Service,
- report.ECSTask,
- report.ECSService,
- report.SwarmService,
- report.Host,
- }
- // Parents renders the parents of this report.Node, which have been aggregated
- // from the probe reports.
- func Parents(r report.Report, n report.Node) []Parent {
- if n.Parents.Size() == 0 {
- return nil
- }
- result := make([]Parent, 0, n.Parents.Size())
- for _, topologyID := range parentTopologies {
- topology, ok := r.Topology(topologyID)
- if !ok {
- continue
- }
- apiTopologyID, ok := primaryAPITopology[topologyID]
- if !ok {
- continue
- }
- parents, _ := n.Parents.Lookup(topologyID)
- for _, id := range parents {
- if topologyID == n.Topology && id == n.ID {
- continue
- }
- parentNode, ok := topology.Nodes[id]
- if !ok {
- parentNode = report.MakeNode(id).WithTopology(topologyID)
- }
- if summary, ok := MakeBasicNodeSummary(r, parentNode); ok {
- result = append(result, Parent{
- ID: summary.ID,
- Label: summary.Label,
- TopologyID: apiTopologyID,
- })
- }
- }
- }
- if len(result) == 0 {
- return nil
- }
- return result
- }
|