Files
weave-scope/render/detailed/parents.go
2017-12-27 13:54:30 +00:00

69 lines
1.5 KiB
Go

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
}