From 58dd7605ce934d9754e7d112a01258d01cecff44 Mon Sep 17 00:00:00 2001 From: rozetko Date: Mon, 4 Mar 2019 21:11:14 +0300 Subject: [PATCH] Make it work --- .../controllers/analytic_controller.ts | 3 + src/panel/graph_panel/graph_ctrl.ts | 153 +++++++++--------- src/panel/graph_panel/models/info.ts | 4 +- .../graph_panel/partials/tab_analytics.html | 9 ++ .../graph_panel/services/analytic_service.ts | 42 ++++- 5 files changed, 127 insertions(+), 84 deletions(-) diff --git a/src/panel/graph_panel/controllers/analytic_controller.ts b/src/panel/graph_panel/controllers/analytic_controller.ts index 285f1f8..a32525f 100644 --- a/src/panel/graph_panel/controllers/analytic_controller.ts +++ b/src/panel/graph_panel/controllers/analytic_controller.ts @@ -430,6 +430,9 @@ export class AnalyticController { ); for await (const data of statusGenerator) { + if(data === undefined) { + break; + } let status = data.status; let error = data.errorMessage; if(analyticUnit.status !== status) { diff --git a/src/panel/graph_panel/graph_ctrl.ts b/src/panel/graph_panel/graph_ctrl.ts index 719487f..cfbe5c0 100644 --- a/src/panel/graph_panel/graph_ctrl.ts +++ b/src/panel/graph_panel/graph_ctrl.ts @@ -29,7 +29,6 @@ class GraphCtrl extends MetricsPanelCtrl { seriesList: any = []; dataList: any = []; - _backendUrl: string = undefined; // annotations: any = []; private _datasourceRequest: DatasourceRequest; @@ -51,10 +50,15 @@ class GraphCtrl extends MetricsPanelCtrl { _panelInfo: PanelInfo; private _analyticUnitTypes: any; + private _hasticDatasources: any[]; + + private $graphElem: any; + private $legendElem: any; panelDefaults = { // datasource name, null = default datasource datasource: null, + hasticDatasource: null, // sets client side (flot) or native graphite png renderer (png) renderer: 'flot', yaxes: [ @@ -180,20 +184,16 @@ class GraphCtrl extends MetricsPanelCtrl { this.rebindKeys(); } - async getBackendURL(): Promise { - if(this._backendUrl !== undefined) { - return this._backendUrl; - } - var data = await this.backendSrv.get('api/plugins/corpglory-hastic-app/settings'); - if(data.jsonData === undefined || data.jsonData === null) { - return undefined; - } - let val = data.jsonData.hasticServerUrl; - if(val === undefined || val === null) { - return undefined; + getBackendURL(): string { + const datasourceId = this.panel.hasticDatasource; + if(datasourceId !== undefined && datasourceId !== null) { + const datasource = _.find(this._hasticDatasources, { id: datasourceId }); + if(datasource.access === 'proxy') { + return `/api/datasources/proxy/${datasource.id}`; + } + return datasource.url; } - val = val.replace(/\/+$/, ""); - return val; + return undefined; } async updateAnalyticUnitTypes() { @@ -210,53 +210,34 @@ class GraphCtrl extends MetricsPanelCtrl { return _.keys(this._analyticUnitTypes); } - private _checkBackendUrlOk(backendURL: string): boolean { - if(backendURL === null || backendURL === undefined || backendURL === '') { - appEvents.emit( - 'alert-warning', - [ - `hasticServerUrl is missing`, - `Please set it in config. More info: https://github.com/hastic/hastic-grafana-app/wiki/Getting-started` - ] - ); - return false; - } - return true; - } - async runBackendConnectivityCheck() { - let backendURL = await this.getBackendURL(); - if(!this._checkBackendUrlOk(backendURL)) { - return; + const backendURL = this.getBackendURL(); + + try { + const connected = await this.analyticService.isBackendOk(); + if(connected) { + this.updateAnalyticUnitTypes(); + appEvents.emit( + 'alert-success', + [ + 'Connected to Hastic server', + `Hastic server: "${backendURL}"` + ] + ); + } } - let connected = await this.analyticService.isBackendOk(); - if(connected) { - this.updateAnalyticUnitTypes(); - appEvents.emit( - 'alert-success', - [ - 'Connected to Hastic server', - `Hastic server: "${backendURL}"` - ] - ); + catch(err) { + console.error(err); } } async link(scope, elem, attrs, ctrl) { + this._datasources = {}; - this.processor = new DataProcessor(this.panel); - - let backendURL = await this.getBackendURL(); - if(!this._checkBackendUrlOk(backendURL)) { - return; - } - - this.analyticService = new AnalyticService(backendURL, this.$http); - - this.runBackendConnectivityCheck(); - - this.analyticsController = new AnalyticController(this.panel, this.analyticService, this.events); + this.$graphElem = $(elem[0]).find('#graphPanel'); + this.$legendElem = $(elem[0]).find('#graphLegend'); + this.onHasticDatasourceChange(); this.events.on('render', this.onRender.bind(this)); this.events.on('data-received', this.onDataReceived.bind(this)); @@ -281,8 +262,6 @@ class GraphCtrl extends MetricsPanelCtrl { this.$scope.$digest(); }); - this._datasources = {}; - appEvents.on('ds-request-response', data => { let requestConfig = data.config; @@ -294,19 +273,6 @@ class GraphCtrl extends MetricsPanelCtrl { type: undefined }; }); - - this.analyticsController.fetchAnalyticUnitsStatuses(); - - - var $graphElem = $(elem[0]).find('#graphPanel'); - var $legendElem = $(elem[0]).find('#graphLegend'); - this._graphRenderer = new GraphRenderer( - $graphElem, this.timeSrv, this.contextSrv, this.$scope - ); - this._graphLegend = new GraphLegend($legendElem, this.popoverSrv, this.$scope); - - this._updatePanelInfo(); - this.analyticsController.updateServerInfo(); } onInitEditMode() { @@ -329,6 +295,27 @@ class GraphCtrl extends MetricsPanelCtrl { actions.push({ text: 'Toggle legend', click: 'ctrl.toggleLegend()' }); } + async onHasticDatasourceChange() { + this.processor = new DataProcessor(this.panel); + + await this._fetchHasticDatasources(); + const backendURL = this.getBackendURL(); + + this.analyticService = new AnalyticService(backendURL, this.$http); + this.runBackendConnectivityCheck(); + this.analyticsController = new AnalyticController(this.panel, this.analyticService, this.events); + + this.analyticsController.fetchAnalyticUnitsStatuses(); + + this._graphRenderer = new GraphRenderer( + this.$graphElem, this.timeSrv, this.contextSrv, this.$scope + ); + this._graphLegend = new GraphLegend(this.$legendElem, this.popoverSrv, this.$scope); + + this._updatePanelInfo(); + this.analyticsController.updateServerInfo(); + } + issueQueries(datasource) { // this.annotationsPromise = this.annotationsSrv.getAnnotations({ // dashboard: this.dashboard, @@ -385,15 +372,17 @@ class GraphCtrl extends MetricsPanelCtrl { } } - var loadTasks = [ - // this.annotationsPromise, - this.analyticsController.fetchAnalyticUnitsSegments(+this.range.from, +this.range.to) - ]; + if(this.analyticsController !== undefined) { + var loadTasks = [ + // this.annotationsPromise, + this.analyticsController.fetchAnalyticUnitsSegments(+this.range.from, +this.range.to) + ]; - var results = await Promise.all(loadTasks); - this.loading = false; - // this.annotations = results[0].annotations; - this.render(this.seriesList); + await Promise.all(loadTasks); + this.loading = false; + // this.annotations = results[0].annotations; + this.render(this.seriesList); + } } @@ -657,7 +646,7 @@ class GraphCtrl extends MetricsPanelCtrl { private async _updatePanelInfo() { const datasource = await this._getDatasourceByName(this.panel.datasource); - const backendUrl = await this.getBackendURL(); + const backendUrl = this.getBackendURL(); let grafanaVersion = 'unknown'; if(_.has(window, 'grafanaBootData.settings.buildInfo.version')) { @@ -691,6 +680,16 @@ class GraphCtrl extends MetricsPanelCtrl { } } + private async _fetchHasticDatasources() { + this._hasticDatasources = await this.backendSrv.get('/api/datasources'); + this._hasticDatasources = this._hasticDatasources.filter(ds => ds.type === 'corpglory-hastic-datasource'); + this.$scope.$digest(); + } + + get hasticDatasources() { + return this._hasticDatasources; + } + get panelInfo() { return this._panelInfo; } diff --git a/src/panel/graph_panel/models/info.ts b/src/panel/graph_panel/models/info.ts index 5aa9e05..474b94b 100644 --- a/src/panel/graph_panel/models/info.ts +++ b/src/panel/graph_panel/models/info.ts @@ -2,9 +2,9 @@ export type ServerInfo = { nodeVersion: string, packageVersion: string, npmUserAgent: string, - docker: boolean, + docker: string | boolean, zmqConectionString: string, - serverPort: number, + serverPort: string | number, gitBranch: string, gitCommitHash: string } diff --git a/src/panel/graph_panel/partials/tab_analytics.html b/src/panel/graph_panel/partials/tab_analytics.html index 81637a7..14df34c 100644 --- a/src/panel/graph_panel/partials/tab_analytics.html +++ b/src/panel/graph_panel/partials/tab_analytics.html @@ -1,3 +1,12 @@ +
+ +