From 9eaac25d692cbda0120671ae2eac2c6c8e04df5c Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Thu, 28 Apr 2016 16:26:59 +0100 Subject: [PATCH] Don't merge nodes in the rendering pipeline --- render/container.go | 4 +++- render/host.go | 2 +- render/id.go | 5 +++-- render/process.go | 4 ++-- render/render.go | 7 +++++++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/render/container.go b/render/container.go index f68b9d814..9c11945c4 100644 --- a/render/container.go +++ b/render/container.go @@ -39,7 +39,7 @@ var ContainerRenderer = MakeFilter( }, MakeMap( MapProcess2Container, - ColorConnected(ProcessRenderer), + ProcessRenderer, ), ), @@ -273,6 +273,8 @@ func MapProcess2Container(n report.Node, _ report.Networks) report.Nodes { } else { id = MakePseudoNodeID(UncontainedID, report.ExtractHostID(n)) node = NewDerivedPseudoNode(id, n) + node = propagateLatest(report.HostNodeID, n, node) + node = propagateLatest(IsConnected, n, node) } return report.Nodes{id: node} } diff --git a/render/host.go b/render/host.go index cf5e5d07c..6c7103d74 100644 --- a/render/host.go +++ b/render/host.go @@ -13,7 +13,7 @@ var HostRenderer = MakeReduce( ), MakeMap( MapX2Host, - ColorConnected(ProcessRenderer), + ProcessRenderer, ), MakeMap( MapX2Host, diff --git a/render/id.go b/render/id.go index fe69a66a6..c2c200829 100644 --- a/render/id.go +++ b/render/id.go @@ -18,10 +18,11 @@ func MakeGroupNodeTopology(originalTopology, key string) string { // NewDerivedNode makes a node based on node, but with a new ID func NewDerivedNode(id string, node report.Node) report.Node { - return node.WithID(id).WithChildren(report.MakeNodeSet(node)).PruneParents() + return report.MakeNode(id).WithChildren(node.Children.Add(node)) } // NewDerivedPseudoNode makes a new pseudo node with the node as a child func NewDerivedPseudoNode(id string, node report.Node) report.Node { - return NewDerivedNode(id, node).WithTopology(Pseudo) + output := NewDerivedNode(id, node).WithTopology(Pseudo) + return output } diff --git a/render/process.go b/render/process.go index 92d55c3e2..0a5e83db1 100644 --- a/render/process.go +++ b/render/process.go @@ -28,13 +28,13 @@ var EndpointRenderer = FilterNonProcspied(SelectEndpoint) // ProcessRenderer is a Renderer which produces a renderable process // graph by merging the endpoint graph and the process topology. -var ProcessRenderer = MakeReduce( +var ProcessRenderer = ColorConnected(MakeReduce( MakeMap( MapEndpoint2Process, EndpointRenderer, ), SelectProcess, -) +)) // processWithContainerNameRenderer is a Renderer which produces a process // graph enriched with container names where appropriate diff --git a/render/render.go b/render/render.go index 4741f4ec5..9ef5ffadb 100644 --- a/render/render.go +++ b/render/render.go @@ -151,3 +151,10 @@ func (ad applyDecorator) Stats(rpt report.Report, dct Decorator) Stats { func ApplyDecorators(renderer Renderer) Renderer { return applyDecorator{renderer} } + +func propagateLatest(key string, from, to report.Node) report.Node { + if value, timestamp, ok := from.Latest.LookupEntry(key); ok { + to.Latest = to.Latest.Set(key, timestamp, value) + } + return to +}