diff --git a/app/api_topology.go b/app/api_topology.go index c418afd14..e0a3ded16 100644 --- a/app/api_topology.go +++ b/app/api_topology.go @@ -44,13 +44,9 @@ func handleNode(ctx context.Context, renderer render.Renderer, filter render.Fil ) // We must not lose the node during filtering. We achieve that by // (1) rendering the report with the base renderer, without - // filtering, which gives us the node (if it exists at all), then - // (2) performing a normal filtered render of the report. If the + // filtering, which gives us the node (if it exists at all), and + // then (2) applying the filter separately to that result. If the // node is lost in the second step, we simply put it back. - // - // To avoid repeating the work from step (1) in step (2), we - // replace the renderer in the latter with a constant renderer of - // the result obtained in step (1). nodes := renderer.Render(rc.Report) node, ok := nodes.Nodes[nodeID] if !ok { @@ -58,7 +54,7 @@ func handleNode(ctx context.Context, renderer render.Renderer, filter render.Fil return } if filter != nil { - nodes = render.Render(rc.Report, render.ConstantRenderer{Nodes: nodes}, filter) + nodes = filter.Apply(nodes) if filteredNode, ok := nodes.Nodes[nodeID]; ok { node = filteredNode } else { // we've lost the node during filtering; put it back diff --git a/render/render.go b/render/render.go index 502f68715..1d7983229 100644 --- a/render/render.go +++ b/render/render.go @@ -31,10 +31,11 @@ func (r Nodes) Merge(o Nodes) Nodes { // Render renders the report and then applies the filter func Render(rpt report.Report, renderer Renderer, filter FilterFunc) Nodes { + nodes := renderer.Render(rpt) if filter != nil { - renderer = MakeFilterPseudo(filter, renderer) + nodes = filter.Apply(nodes) } - return renderer.Render(rpt) + return nodes } // Reduce renderer is a Renderer which merges together the output of several @@ -147,16 +148,6 @@ func (cr conditionalRenderer) Render(rpt report.Report) Nodes { return Nodes{} } -// ConstantRenderer renders a fixed set of nodes -type ConstantRenderer struct { - Nodes -} - -// Render implements Renderer -func (c ConstantRenderer) Render(_ report.Report) Nodes { - return c.Nodes -} - // joinResults is used by Renderers that join sets of nodes type joinResults struct { nodes report.Nodes