diff --git a/render/detailed_node.go b/render/detailed_node.go index 4552a7823..93681c177 100644 --- a/render/detailed_node.go +++ b/render/detailed_node.go @@ -38,13 +38,13 @@ func MakeDetailedNode(r report.Report, n RenderableNode) DetailedNode { tables := []Table{} { rows := []Row{} - if val, ok := n.Metadata[report.KeyMaxConnCountTCP]; ok { + if val, ok := n.AggregateMetadata[report.KeyMaxConnCountTCP]; ok { rows = append(rows, Row{"TCP connections", strconv.FormatInt(int64(val), 10), ""}) } - if val, ok := n.Metadata[report.KeyBytesIngress]; ok { + if val, ok := n.AggregateMetadata[report.KeyBytesIngress]; ok { rows = append(rows, Row{"Bytes ingress", strconv.FormatInt(int64(val), 10), ""}) } - if val, ok := n.Metadata[report.KeyBytesEgress]; ok { + if val, ok := n.AggregateMetadata[report.KeyBytesEgress]; ok { rows = append(rows, Row{"Bytes egress", strconv.FormatInt(int64(val), 10), ""}) } if len(rows) > 0 { diff --git a/render/render.go b/render/render.go index d6b4b01ba..5459ef30f 100644 --- a/render/render.go +++ b/render/render.go @@ -206,7 +206,7 @@ func (m LeafMap) Render(rpt report.Report) RenderableNodes { srcRenderableNode.Origins = srcRenderableNode.Origins.Add(srcNodeID) edgeID := report.MakeEdgeID(srcNodeID, dstNodeID) if md, ok := t.EdgeMetadatas[edgeID]; ok { - srcRenderableNode.Metadata.Merge(md.Transform()) + srcRenderableNode.AggregateMetadata.Merge(md.Transform()) } } diff --git a/render/renderable_node.go b/render/renderable_node.go index efb801b72..d5ddb13dd 100644 --- a/render/renderable_node.go +++ b/render/renderable_node.go @@ -8,15 +8,16 @@ import ( // an element of a topology. It should contain information that's relevant // to rendering a node when there are many nodes visible at once. type RenderableNode struct { - ID string `json:"id"` // - LabelMajor string `json:"label_major"` // e.g. "process", human-readable - 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 - Metadata report.AggregateMetadata `json:"metadata"` // Numeric sums - NodeMetadata report.NodeMetadata `json:"-"` // merged NodeMetadata of the nodes used to build this + ID string `json:"id"` // + LabelMajor string `json:"label_major"` // e.g. "process", human-readable + 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.AggregateMetadata `json:"metadata"` // Numeric sums + report.NodeMetadata `json:"-"` // merged NodeMetadata of the nodes used to build this } // RenderableNodes is a set of RenderableNodes @@ -55,44 +56,44 @@ func (rn *RenderableNode) Merge(other RenderableNode) { rn.Adjacency = rn.Adjacency.Add(other.Adjacency...) rn.Origins = rn.Origins.Add(other.Origins...) - rn.Metadata.Merge(other.Metadata) + rn.AggregateMetadata.Merge(other.AggregateMetadata) rn.NodeMetadata.Merge(other.NodeMetadata) } // NewRenderableNode makes a new RenderableNode func NewRenderableNode(id, major, minor, rank string, nmd report.NodeMetadata) RenderableNode { return RenderableNode{ - ID: id, - LabelMajor: major, - LabelMinor: minor, - Rank: rank, - Pseudo: false, - Metadata: report.AggregateMetadata{}, - NodeMetadata: nmd, + ID: id, + LabelMajor: major, + LabelMinor: minor, + Rank: rank, + Pseudo: false, + AggregateMetadata: report.AggregateMetadata{}, + NodeMetadata: nmd, } } func newDerivedNode(id string, node RenderableNode) RenderableNode { return RenderableNode{ - ID: id, - LabelMajor: "", - LabelMinor: "", - Rank: "", - Pseudo: node.Pseudo, - Metadata: node.Metadata, - Origins: node.Origins, - NodeMetadata: node.NodeMetadata, + ID: id, + LabelMajor: "", + LabelMinor: "", + Rank: "", + Pseudo: node.Pseudo, + AggregateMetadata: node.AggregateMetadata, + Origins: node.Origins, + NodeMetadata: node.NodeMetadata, } } func newPseudoNode(id, major, minor string) RenderableNode { return RenderableNode{ - ID: id, - LabelMajor: major, - LabelMinor: minor, - Rank: "", - Pseudo: true, - Metadata: report.AggregateMetadata{}, - NodeMetadata: report.NodeMetadata{}, + ID: id, + LabelMajor: major, + LabelMinor: minor, + Rank: "", + Pseudo: true, + AggregateMetadata: report.AggregateMetadata{}, + NodeMetadata: report.NodeMetadata{}, } } diff --git a/render/topologies_test.go b/render/topologies_test.go index 10e498529..dfa939c0f 100644 --- a/render/topologies_test.go +++ b/render/topologies_test.go @@ -207,7 +207,7 @@ func TestProcessRenderer(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("pid:server-80-domain:215"), Origins: report.MakeIDList(report.MakeHostNodeID("client.hostname.com"), report.MakeEndpointNodeID("client.hostname.com", "10.10.10.20", "54001")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyBytesIngress: 100, report.KeyBytesEgress: 10, }, @@ -220,7 +220,7 @@ func TestProcessRenderer(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("pid:server-80-domain:215"), Origins: report.MakeIDList(report.MakeHostNodeID("client.hostname.com"), report.MakeEndpointNodeID("client.hostname.com", "10.10.10.20", "54002")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyBytesIngress: 200, report.KeyBytesEgress: 20, }, @@ -238,22 +238,22 @@ func TestProcessRenderer(t *testing.T) { "pseudo;10.10.10.11;192.168.1.1;80", ), Origins: report.MakeIDList(report.MakeHostNodeID("server.hostname.com"), report.MakeEndpointNodeID("server.hostname.com", "192.168.1.1", "80")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyBytesIngress: 150, report.KeyBytesEgress: 1500, }, }, "pseudo;10.10.10.10;192.168.1.1;80": { - ID: "pseudo;10.10.10.10;192.168.1.1;80", - LabelMajor: "10.10.10.10", - Pseudo: true, - Metadata: report.AggregateMetadata{}, + ID: "pseudo;10.10.10.10;192.168.1.1;80", + LabelMajor: "10.10.10.10", + Pseudo: true, + AggregateMetadata: report.AggregateMetadata{}, }, "pseudo;10.10.10.11;192.168.1.1;80": { - ID: "pseudo;10.10.10.11;192.168.1.1;80", - LabelMajor: "10.10.10.11", - Pseudo: true, - Metadata: report.AggregateMetadata{}, + ID: "pseudo;10.10.10.11;192.168.1.1;80", + LabelMajor: "10.10.10.11", + Pseudo: true, + AggregateMetadata: report.AggregateMetadata{}, }, } have := render.ProcessRenderer.Render(rpt) @@ -276,7 +276,7 @@ func TestProcessNameRenderer(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("apache"), Origins: report.MakeIDList(report.MakeHostNodeID("client.hostname.com"), report.MakeEndpointNodeID("client.hostname.com", "10.10.10.20", "54001"), report.MakeEndpointNodeID("client.hostname.com", "10.10.10.20", "54002")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyBytesIngress: 300, report.KeyBytesEgress: 30, }, @@ -293,22 +293,22 @@ func TestProcessNameRenderer(t *testing.T) { "pseudo;10.10.10.11;apache", ), Origins: report.MakeIDList(report.MakeHostNodeID("server.hostname.com"), report.MakeEndpointNodeID("server.hostname.com", "192.168.1.1", "80")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyBytesIngress: 150, report.KeyBytesEgress: 1500, }, }, "pseudo;10.10.10.10;apache": { - ID: "pseudo;10.10.10.10;apache", - LabelMajor: "10.10.10.10", - Pseudo: true, - Metadata: report.AggregateMetadata{}, + ID: "pseudo;10.10.10.10;apache", + LabelMajor: "10.10.10.10", + Pseudo: true, + AggregateMetadata: report.AggregateMetadata{}, }, "pseudo;10.10.10.11;apache": { - ID: "pseudo;10.10.10.11;apache", - LabelMajor: "10.10.10.11", - Pseudo: true, - Metadata: report.AggregateMetadata{}, + ID: "pseudo;10.10.10.11;apache", + LabelMajor: "10.10.10.11", + Pseudo: true, + AggregateMetadata: report.AggregateMetadata{}, }, } have := render.ProcessNameRenderer.Render(rpt) @@ -328,7 +328,7 @@ func TestRenderByNetworkHostname(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("host:server.hostname.com"), Origins: report.MakeIDList(report.MakeHostNodeID("client.hostname.com"), report.MakeAddressNodeID("client.hostname.com", "10.10.10.20")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyMaxConnCountTCP: 3, }, }, @@ -340,7 +340,7 @@ func TestRenderByNetworkHostname(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("host:server.hostname.com"), Origins: report.MakeIDList(report.MakeHostNodeID("random.hostname.com"), report.MakeAddressNodeID("random.hostname.com", "172.16.11.9")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyMaxConnCountTCP: 20, }, }, @@ -352,19 +352,19 @@ func TestRenderByNetworkHostname(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("host:client.hostname.com", "pseudo;10.10.10.10;192.168.1.1;"), Origins: report.MakeIDList(report.MakeHostNodeID("server.hostname.com"), report.MakeAddressNodeID("server.hostname.com", "192.168.1.1")), - Metadata: report.AggregateMetadata{ + AggregateMetadata: report.AggregateMetadata{ report.KeyMaxConnCountTCP: 10, }, }, "pseudo;10.10.10.10;192.168.1.1;": { - ID: "pseudo;10.10.10.10;192.168.1.1;", - LabelMajor: "10.10.10.10", - LabelMinor: "", // after first . - Rank: "", - Pseudo: true, - Adjacency: nil, - Origins: nil, - Metadata: report.AggregateMetadata{}, + ID: "pseudo;10.10.10.10;192.168.1.1;", + LabelMajor: "10.10.10.10", + LabelMinor: "", // after first . + Rank: "", + Pseudo: true, + Adjacency: nil, + Origins: nil, + AggregateMetadata: report.AggregateMetadata{}, }, } have := render.LeafMap{