mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-15 19:41:02 +00:00
Rewrite MapX2Host as a RenderFunc using joinResults
It's more efficient as many input Nodes map onto a few hosts.
This commit is contained in:
committed by
Matthias Radestock
parent
db41cab0af
commit
fa03a0be08
@@ -10,26 +10,14 @@ import (
|
||||
// not memoised
|
||||
var HostRenderer = MakeReduce(
|
||||
endpoints2Hosts{},
|
||||
MakeMap(
|
||||
MapX2Host,
|
||||
ColorConnectedProcessRenderer,
|
||||
),
|
||||
MakeMap(
|
||||
MapX2Host,
|
||||
ContainerRenderer,
|
||||
),
|
||||
MakeMap(
|
||||
MapX2Host,
|
||||
ContainerImageRenderer,
|
||||
),
|
||||
MakeMap(
|
||||
MapX2Host,
|
||||
PodRenderer,
|
||||
),
|
||||
CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ColorConnectedProcessRenderer},
|
||||
CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerRenderer},
|
||||
CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerImageRenderer},
|
||||
CustomRenderer{RenderFunc: nodes2Hosts, Renderer: PodRenderer},
|
||||
SelectHost,
|
||||
)
|
||||
|
||||
// MapX2Host maps any Nodes to host Nodes.
|
||||
// nodes2Hosts maps any Nodes to host Nodes.
|
||||
//
|
||||
// If this function is given a node without a hostname
|
||||
// (including other pseudo nodes), it will drop the node.
|
||||
@@ -38,27 +26,23 @@ var HostRenderer = MakeReduce(
|
||||
// format for a host, but without any Major or Minor labels. It does
|
||||
// not have enough info to do that, and the resulting graph must be
|
||||
// merged with a host graph to get that info.
|
||||
func MapX2Host(n report.Node, _ report.Networks) report.Nodes {
|
||||
// Don't propagate pseudo nodes - we do this in MapEndpoint2Host
|
||||
if n.Topology == Pseudo {
|
||||
return report.Nodes{}
|
||||
}
|
||||
func nodes2Hosts(nodes Nodes) Nodes {
|
||||
ret := newJoinResults()
|
||||
|
||||
hostIDs, ok := n.Parents.Lookup(report.Host)
|
||||
if !ok {
|
||||
return report.Nodes{}
|
||||
for _, n := range nodes.Nodes {
|
||||
if n.Topology == Pseudo {
|
||||
continue // Don't propagate pseudo nodes - we do this in MapEndpoint2Host
|
||||
} else {
|
||||
hostIDs, _ := n.Parents.Lookup(report.Host)
|
||||
for _, id := range hostIDs {
|
||||
ret.addToResults(n, id, false, func(id string) report.Node {
|
||||
return report.MakeNode(id).WithTopology(report.Host)
|
||||
}, n.Topology)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result := report.Nodes{}
|
||||
children := report.MakeNodeSet(n)
|
||||
for _, id := range hostIDs {
|
||||
node := NewDerivedNode(id, n).WithTopology(report.Host)
|
||||
node.Counters = node.Counters.Add(n.Topology, 1)
|
||||
node.Children = children
|
||||
result[id] = node
|
||||
}
|
||||
|
||||
return result
|
||||
ret.fixupAdjacencies(nodes)
|
||||
return ret.result()
|
||||
}
|
||||
|
||||
// endpoints2Hosts takes nodes from the endpoint topology and produces
|
||||
|
||||
Reference in New Issue
Block a user