From f5aafb7a059f3a63961aa8a883b1679f929a8306 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Mon, 30 Nov 2015 09:33:41 +0000 Subject: [PATCH] Don't apply filters to node endpoints & update details panel logic such that node which dissappear from the topology (eg when they are stopped) don't dissapear from the details panel. --- app/api_topologies.go | 15 ++++++++++++++- app/router.go | 2 +- client/app/scripts/components/node-details.js | 11 ++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/api_topologies.go b/app/api_topologies.go index 3d9d68343..7e6b026cd 100644 --- a/app/api_topologies.go +++ b/app/api_topologies.go @@ -245,7 +245,9 @@ func renderedForRequest(r *http.Request, topology APITopologyDesc) render.Render return renderer } -func (r *registry) captureRenderer(rep Reporter, f func(Reporter, render.Renderer, http.ResponseWriter, *http.Request)) http.HandlerFunc { +type reportRenderHandler func(Reporter, render.Renderer, http.ResponseWriter, *http.Request) + +func (r *registry) captureRenderer(rep Reporter, f reportRenderHandler) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { topology, ok := r.get(mux.Vars(req)["topology"]) if !ok { @@ -256,3 +258,14 @@ func (r *registry) captureRenderer(rep Reporter, f func(Reporter, render.Rendere f(rep, renderer, w, req) } } + +func (r *registry) captureRendererWithoutFilters(rep Reporter, f reportRenderHandler) http.HandlerFunc { + return func(w http.ResponseWriter, req *http.Request) { + topology, ok := r.get(mux.Vars(req)["topology"]) + if !ok { + http.NotFound(w, req) + return + } + f(rep, topology.renderer, w, req) + } +} diff --git a/app/router.go b/app/router.go index 21348feb6..be8a8d37d 100644 --- a/app/router.go +++ b/app/router.go @@ -63,7 +63,7 @@ func registerTopologyRoutes(c collector, router *mux.Router) { get.HandleFunc("/api/topology/{topology}/ws", topologyRegistry.captureRenderer(c, handleWs)) // NB not gzip! get.MatcherFunc(URLMatcher("/api/topology/{topology}/{id}")).HandlerFunc( - gzipHandler(topologyRegistry.captureRenderer(c, handleNode))) + gzipHandler(topologyRegistry.captureRendererWithoutFilters(c, handleNode))) get.MatcherFunc(URLMatcher("/api/topology/{topology}/{local}/{remote}")).HandlerFunc( gzipHandler(topologyRegistry.captureRenderer(c, handleEdge))) get.HandleFunc("/api/report", gzipHandler(makeRawReportHandler(c))) diff --git a/client/app/scripts/components/node-details.js b/client/app/scripts/components/node-details.js index 26b98e19c..aef686035 100644 --- a/client/app/scripts/components/node-details.js +++ b/client/app/scripts/components/node-details.js @@ -77,14 +77,19 @@ const NodeDetails = React.createClass({ const details = this.props.details; const nodeExists = this.props.nodes && this.props.nodes.has(this.props.nodeId); + if (details) { + return this.renderDetails(); + } + if (!nodeExists) { return this.renderNotAvailable(); } - if (!details) { - return this.renderLoading(); - } + return this.renderLoading(); + }, + renderDetails: function() { + const details = this.props.details; const nodeColor = this.getNodeColorDark(details.rank, details.label_major); const styles = { controls: {