diff --git a/app/api_topology.go b/app/api_topology.go index e05b385b2..57796d90f 100644 --- a/app/api_topology.go +++ b/app/api_topology.go @@ -35,7 +35,7 @@ func handleTopology(ctx context.Context, rep Reporter, renderer render.Renderer, return } respondWith(w, http.StatusOK, APITopology{ - Nodes: detailed.Summaries(renderer.Render(report)), + Nodes: detailed.Summaries(report, renderer.Render(report)), }) } @@ -119,7 +119,7 @@ func handleWebsocket( log.Errorf("Error generating report: %v", err) return } - newTopo := detailed.Summaries(renderer.Render(report)) + newTopo := detailed.Summaries(report, renderer.Render(report)) diff := detailed.TopoDiff(previousTopo, newTopo) previousTopo = newTopo diff --git a/app/router.go b/app/router.go index 0f9f19780..260a08a55 100644 --- a/app/router.go +++ b/app/router.go @@ -84,7 +84,7 @@ func gzipHandler(h http.HandlerFunc) http.HandlerFunc { func RegisterTopologyRoutes(router *mux.Router, r Reporter) { get := router.Methods("GET").Subrouter() get.HandleFunc("/api", - gzipHandler(requestContextDecorator(apiHandler))) + gzipHandler(requestContextDecorator(apiHandler(r)))) get.HandleFunc("/api/topology", gzipHandler(requestContextDecorator(topologyRegistry.makeTopologyList(r)))) get.HandleFunc("/api/topology/{topology}", @@ -130,10 +130,17 @@ func RegisterReportPostHandler(a Adder, router *mux.Router) { })) } -func apiHandler(_ context.Context, w http.ResponseWriter, r *http.Request) { - respondWith(w, http.StatusOK, xfer.Details{ - ID: UniqueID, - Version: Version, - Hostname: hostname.Get(), - }) +func apiHandler(rep Reporter) CtxHandlerFunc { + return func(ctx context.Context, w http.ResponseWriter, r *http.Request) { + report, err := rep.Report(ctx) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + respondWith(w, http.StatusOK, xfer.Details{ + ID: UniqueID, + Version: Version, + Hostname: hostname.Get(), + Plugins: report.Plugins, + }) + } } diff --git a/client/app/scripts/actions/app-actions.js b/client/app/scripts/actions/app-actions.js index 61327d4bb..2094e257b 100644 --- a/client/app/scripts/actions/app-actions.js +++ b/client/app/scripts/actions/app-actions.js @@ -317,7 +317,8 @@ export function receiveApiDetails(apiDetails) { AppDispatcher.dispatch({ type: ActionTypes.RECEIVE_API_DETAILS, hostname: apiDetails.hostname, - version: apiDetails.version + version: apiDetails.version, + plugins: apiDetails.plugins }); } diff --git a/client/app/scripts/components/app.js b/client/app/scripts/components/app.js index ab9babe27..198d76441 100644 --- a/client/app/scripts/components/app.js +++ b/client/app/scripts/components/app.js @@ -11,6 +11,7 @@ import HelpPanel from './help-panel'; import Status from './status.js'; import Topologies from './topologies.js'; import TopologyOptions from './topology-options.js'; +import Plugins from './plugins.js'; import { getApiDetails, getTopologies } from '../utils/web-api-utils'; import { pinNextMetric, hitEsc, unpinMetric, selectMetric, toggleHelp } from '../actions/app-actions'; @@ -53,6 +54,7 @@ function getStateFromStores() { updatePaused: AppStore.isUpdatePaused(), updatePausedAt: AppStore.getUpdatePausedAt(), version: AppStore.getVersion(), + plugins: AppStore.getPlugins(), websocketClosed: AppStore.isWebsocketClosed() }; } @@ -178,6 +180,7 @@ export default class App extends React.Component { +