mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-28 01:31:17 +00:00
Remove LeafMap - have a generic function which converts a Topology to a RenderableNodes.
This commit is contained in:
@@ -13,67 +13,42 @@ type RenderableNode struct {
|
||||
LabelMinor string `json:"label_minor,omitempty"` // e.g. "hostname", human-readable, optional
|
||||
Rank string `json:"rank"` // to help the layout engine
|
||||
Pseudo bool `json:"pseudo,omitempty"` // sort-of a placeholder node, for rendering purposes
|
||||
Adjacency report.IDList `json:"adjacency,omitempty"` // Node IDs (in the same topology domain)
|
||||
Origins report.IDList `json:"origins,omitempty"` // Core node IDs that contributed information
|
||||
|
||||
report.EdgeMetadata `json:"metadata"` // Numeric sums
|
||||
report.NodeMetadata `json:"-"` // merged NodeMetadata of the nodes used to build this
|
||||
}
|
||||
|
||||
// RenderableNodes is a set of RenderableNodes
|
||||
type RenderableNodes map[string]RenderableNode
|
||||
|
||||
// Merge merges two sets of RenderableNodes
|
||||
func (rns RenderableNodes) Merge(other RenderableNodes) {
|
||||
for key, value := range other {
|
||||
if existing, ok := rns[key]; ok {
|
||||
existing.Merge(value)
|
||||
rns[key] = existing
|
||||
} else {
|
||||
rns[key] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Merge merges in another RenderableNode
|
||||
func (rn *RenderableNode) Merge(other RenderableNode) {
|
||||
if rn.LabelMajor == "" {
|
||||
rn.LabelMajor = other.LabelMajor
|
||||
}
|
||||
|
||||
if rn.LabelMinor == "" {
|
||||
rn.LabelMinor = other.LabelMinor
|
||||
}
|
||||
|
||||
if rn.Rank == "" {
|
||||
rn.Rank = other.Rank
|
||||
}
|
||||
|
||||
if rn.Pseudo != other.Pseudo {
|
||||
panic(rn.ID)
|
||||
}
|
||||
|
||||
rn.Adjacency = rn.Adjacency.Merge(other.Adjacency)
|
||||
rn.Origins = rn.Origins.Merge(other.Origins)
|
||||
|
||||
rn.EdgeMetadata = rn.EdgeMetadata.Merge(other.EdgeMetadata)
|
||||
rn.NodeMetadata = rn.NodeMetadata.Merge(other.NodeMetadata)
|
||||
report.NodeMetadata
|
||||
}
|
||||
|
||||
// NewRenderableNode makes a new RenderableNode
|
||||
func NewRenderableNode(id, major, minor, rank string, nmd report.NodeMetadata) RenderableNode {
|
||||
func NewRenderableNode(id string) RenderableNode {
|
||||
return RenderableNode{
|
||||
ID: id,
|
||||
LabelMajor: "",
|
||||
LabelMinor: "",
|
||||
Rank: "",
|
||||
Pseudo: false,
|
||||
Origins: report.MakeIDList(),
|
||||
EdgeMetadata: report.EdgeMetadata{},
|
||||
NodeMetadata: report.MakeNodeMetadata(),
|
||||
}
|
||||
}
|
||||
|
||||
// NewRenderableNodeWith makes a new RenderableNode with some fields filled in
|
||||
func NewRenderableNodeWith(id, major, minor, rank string, rn RenderableNode) RenderableNode {
|
||||
return RenderableNode{
|
||||
ID: id,
|
||||
LabelMajor: major,
|
||||
LabelMinor: minor,
|
||||
Rank: rank,
|
||||
Pseudo: false,
|
||||
EdgeMetadata: report.EdgeMetadata{},
|
||||
NodeMetadata: nmd.Copy(),
|
||||
Origins: rn.Origins.Copy(),
|
||||
EdgeMetadata: rn.EdgeMetadata.Copy(),
|
||||
NodeMetadata: rn.NodeMetadata.Copy(),
|
||||
}
|
||||
}
|
||||
|
||||
func newDerivedNode(id string, node RenderableNode) RenderableNode {
|
||||
// NewDerivedNode create a renderable node based on node, but with a new ID
|
||||
func NewDerivedNode(id string, node RenderableNode) RenderableNode {
|
||||
return RenderableNode{
|
||||
ID: id,
|
||||
LabelMajor: "",
|
||||
@@ -82,19 +57,7 @@ func newDerivedNode(id string, node RenderableNode) RenderableNode {
|
||||
Pseudo: node.Pseudo,
|
||||
Origins: node.Origins.Copy(),
|
||||
EdgeMetadata: node.EdgeMetadata.Copy(),
|
||||
NodeMetadata: report.MakeNodeMetadata(),
|
||||
}
|
||||
}
|
||||
|
||||
func newPseudoNode(id, major, minor string) RenderableNode {
|
||||
return RenderableNode{
|
||||
ID: id,
|
||||
LabelMajor: major,
|
||||
LabelMinor: minor,
|
||||
Rank: "",
|
||||
Pseudo: true,
|
||||
EdgeMetadata: report.EdgeMetadata{},
|
||||
NodeMetadata: report.MakeNodeMetadata(),
|
||||
NodeMetadata: node.NodeMetadata.Copy(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +70,73 @@ func newDerivedPseudoNode(id, major string, node RenderableNode) RenderableNode
|
||||
Pseudo: true,
|
||||
Origins: node.Origins.Copy(),
|
||||
EdgeMetadata: node.EdgeMetadata.Copy(),
|
||||
NodeMetadata: report.MakeNodeMetadata(),
|
||||
NodeMetadata: node.NodeMetadata.Copy(),
|
||||
}
|
||||
}
|
||||
|
||||
// WithNode creates a new RenderableNode bases on rn, with n
|
||||
func (rn RenderableNode) WithNode(n report.NodeMetadata) RenderableNode {
|
||||
result := rn.Copy()
|
||||
result.NodeMetadata = n
|
||||
return result
|
||||
}
|
||||
|
||||
// Merge merges rn with other and returns a new RenderableNode
|
||||
func (rn RenderableNode) Merge(other RenderableNode) RenderableNode {
|
||||
result := rn.Copy()
|
||||
|
||||
if result.LabelMajor == "" {
|
||||
result.LabelMajor = other.LabelMajor
|
||||
}
|
||||
|
||||
if result.LabelMinor == "" {
|
||||
result.LabelMinor = other.LabelMinor
|
||||
}
|
||||
|
||||
if result.Rank == "" {
|
||||
result.Rank = other.Rank
|
||||
}
|
||||
|
||||
if result.Pseudo != other.Pseudo {
|
||||
panic(result.ID)
|
||||
}
|
||||
|
||||
result.Origins = rn.Origins.Merge(other.Origins)
|
||||
result.EdgeMetadata = rn.EdgeMetadata.Merge(other.EdgeMetadata)
|
||||
result.NodeMetadata = rn.NodeMetadata.Merge(other.NodeMetadata)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// Copy makes a deep copy of rn
|
||||
func (rn RenderableNode) Copy() RenderableNode {
|
||||
return RenderableNode{
|
||||
ID: rn.ID,
|
||||
LabelMajor: rn.LabelMajor,
|
||||
LabelMinor: rn.LabelMinor,
|
||||
Rank: rn.Rank,
|
||||
Pseudo: rn.Pseudo,
|
||||
Origins: rn.Origins.Copy(),
|
||||
EdgeMetadata: rn.EdgeMetadata.Copy(),
|
||||
NodeMetadata: rn.NodeMetadata.Copy(),
|
||||
}
|
||||
}
|
||||
|
||||
// RenderableNodes is a set of RenderableNodes
|
||||
type RenderableNodes map[string]RenderableNode
|
||||
|
||||
// Merge merges two sets of RenderableNodes, returning a new set.
|
||||
func (rns RenderableNodes) Merge(other RenderableNodes) RenderableNodes {
|
||||
result := RenderableNodes{}
|
||||
for key, value := range rns {
|
||||
result[key] = value
|
||||
}
|
||||
for key, value := range other {
|
||||
existing, ok := result[key]
|
||||
if ok {
|
||||
value = value.Merge(existing)
|
||||
}
|
||||
result[key] = value
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user