Skip to content

Commit

Permalink
Show progress when reconnecting to hastic datasource #412 (#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
rozetko authored Mar 6, 2020
2 parents 6298d3d + 2afb909 commit 6287488
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 15 deletions.
6 changes: 5 additions & 1 deletion src/panel/graph_panel/graph_ctrl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { MetricExpanded } from './models/metric';
import { DatasourceRequest } from './models/datasource';
import { AnalyticUnitId, AnalyticUnit, LabelingMode } from './models/analytic_units/analytic_unit';
import { BOUND_TYPES } from './models/analytic_units/anomaly_analytic_unit';
import { AnalyticService } from './services/analytic_service';
import { AnalyticService, HasticDatasourceConnectionStatus } from './services/analytic_service';
import { AnalyticController } from './controllers/analytic_controller';
import { HasticPanelInfo } from './models/hastic_panel_info';
import { PanelTemplate, TemplateVariables } from './models/panel';
Expand Down Expand Up @@ -363,6 +363,10 @@ class GraphCtrl extends MetricsPanelCtrl {
this.refresh();
}

get connectionStatus(): HasticDatasourceConnectionStatus {
return this.analyticService.connectionStatus;
}

issueQueries(datasource) {
// this.annotationsPromise = this.annotationsSrv.getAnnotations({
// dashboard: this.dashboard,
Expand Down
23 changes: 18 additions & 5 deletions src/panel/graph_panel/partials/reconnect_to_datasource.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
<div class="gf-form-button-row" ng-if="ctrl.hasticDatasource !== undefined && ctrl.analyticsController.serverStatus === false">
<h5>Hastic server at "{{ctrl.hasticDatasource.url}}" is not available</h5>
<button class="btn btn-inverse" ng-click="ctrl.onHasticDatasourceChange()">
<i class="fa fa-plug"></i>
Reconnect to Hastic server
</button>
<div class="gf-form-group">
<div class="alert-{{ctrl.connectionStatus.status}} alert"">
<div class="alert-icon">
<i class="fa fa-spiner fa-spin" ng-show="ctrl.connectionStatus.status === 'info'"></i>
<i class="fa fa-exclamation-triangle" ng-show="ctrl.connectionStatus.status === 'error'"></i>
<i class="fa fa-check" ng-show="ctrl.connectionStatus.status !== 'error'"></i>
</div>
<div class="alert-body">
<div class="alert-title" ng-bind-html="ctrl.connectionStatus.message" />
</div>
</div>
<div ng-hide="ctrl.connectionStatus.status === 'info'">
<button class="btn btn-secondary" ng-click="ctrl.onHasticDatasourceChange()">
<i class="fa fa-plug"></i>
&nbsp; Connect to Hastic Datasource
</button>
</div>
</div>
</div>
2 changes: 0 additions & 2 deletions src/panel/graph_panel/partials/tab_webhooks.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
<ng-include src="ctrl.partialsPath + '/reconnect_to_datasource.html'" />

<div ng-if="ctrl.analyticsController.serverStatus === true">
<div ng-if="!ctrl.analyticsController.analyticUnits.length">
<h5> Please create at least 1 analytic unit to enable webhooks </h5>
Expand Down
26 changes: 19 additions & 7 deletions src/panel/graph_panel/services/analytic_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,22 @@ export type TableTimeSeries = {
};

export enum HasticDatasourceStatus {
AVAILABLE,
NOT_AVAILABLE
AVAILABLE = 'success',
NOT_AVAILABLE = 'error',
CONNECTING = 'info'
};

const STATUS_TO_ALERT_TYPE_MAPPING = new Map<HasticDatasourceStatus, string>([
[HasticDatasourceStatus.AVAILABLE, 'alert-success'],
[HasticDatasourceStatus.NOT_AVAILABLE, 'alert-error']
]);
export type HasticDatasourceConnectionStatus = {
status: HasticDatasourceStatus,
message: string
}

export class AnalyticService {
public connectionStatus: HasticDatasourceConnectionStatus = {
status: HasticDatasourceStatus.CONNECTING,
message: 'Connecting...'
};

private _isUp: boolean = false;

constructor(
Expand Down Expand Up @@ -268,6 +274,9 @@ export class AnalyticService {
}

async checkDatasourceAvailability(): Promise<boolean> {
this.connectionStatus.status = HasticDatasourceStatus.CONNECTING;
this.connectionStatus.message = 'Connecting...';

this._isUp = await this._isDatasourceAvailable();
return this._isUp;
}
Expand Down Expand Up @@ -393,14 +402,17 @@ export class AnalyticService {
}

private _displayConnectionAlert(status: HasticDatasourceStatus, message: string[]): void {
this.connectionStatus.status = status;
this.connectionStatus.message = message.join('<br />');

const statusChanged = this._updateHasticUrlStatus(status);

if(!statusChanged) {
return;
}

appEvents.emit(
STATUS_TO_ALERT_TYPE_MAPPING.get(status),
`alert-${status}`,
message
);
}
Expand Down

0 comments on commit 6287488

Please sign in to comment.