From 60ccae48f1214a8b8ff019743a08bfaade200ac0 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Thu, 19 Apr 2018 11:10:44 -0700 Subject: [PATCH] add auto refresh interval to insights (#1173) --- .../insights/insightsWidget.component.ts | 17 +++++++++++++++++ .../widgets/insights/insightsWidgetSchemas.ts | 4 ++++ .../dashboard/widgets/insights/interfaces.ts | 1 + 3 files changed, 22 insertions(+) diff --git a/src/sql/parts/dashboard/widgets/insights/insightsWidget.component.ts b/src/sql/parts/dashboard/widgets/insights/insightsWidget.component.ts index 046d08ddc7..139b90e3be 100644 --- a/src/sql/parts/dashboard/widgets/insights/insightsWidget.component.ts +++ b/src/sql/parts/dashboard/widgets/insights/insightsWidget.component.ts @@ -27,6 +27,7 @@ import * as pfs from 'vs/base/node/pfs'; import * as nls from 'vs/nls'; import { Registry } from 'vs/platform/registry/common/platform'; import { WorkbenchState } from 'vs/platform/workspace/common/workspace'; +import { IntervalTimer } from 'vs/base/common/async'; const insightRegistry = Registry.as(Extensions.InsightContribution); @@ -52,6 +53,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, private _typeKey: string; private _init: boolean = false; + private _intervalTimer: IntervalTimer; public error: string; public lastUpdated: string; @@ -76,6 +78,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, result => { if (this._init) { this._updateChild(result); + this.setupInterval(); } else { this.queryObv = Observable.fromPromise(Promise.resolve(result)); } @@ -100,6 +103,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, this._register(toDisposableSubscription(this.queryObv.subscribe( result => { this._updateChild(result); + this.setupInterval(); }, error => { this.showError(error); @@ -108,6 +112,14 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, } } + private setupInterval(): void { + if (this.insightConfig.autoRefreshInterval) { + this._intervalTimer = new IntervalTimer(); + this._register(this._intervalTimer); + this._intervalTimer.cancelAndSet(() => this.refresh(), this.insightConfig.autoRefreshInterval * 60 * 1000); + } + } + private showError(error: string): void { this.error = error; this._cd.detectChanges(); @@ -152,6 +164,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, this.lastUpdated = nls.localize('insights.lastUpdated', "Last Updated: {0} {1}", date.toLocaleTimeString(), date.toLocaleDateString()); if (this._init) { this._updateChild(storedResult.results); + this.setupInterval(); this._cd.detectChanges(); } else { this.queryObv = Observable.fromPromise(Promise.resolve(JSON.parse(storage))); @@ -231,6 +244,10 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget, throw new Error('No query was specified for this insight'); } + if (this.insightConfig.autoRefreshInterval && !types.isNumber(this.insightConfig.autoRefreshInterval)) { + throw new Error('Auto Refresh Interval must be a number if specified'); + } + if (!types.isStringArray(this.insightConfig.query) && !types.isString(this.insightConfig.query) && !types.isString(this.insightConfig.queryFile)) { diff --git a/src/sql/parts/dashboard/widgets/insights/insightsWidgetSchemas.ts b/src/sql/parts/dashboard/widgets/insights/insightsWidgetSchemas.ts index 0960955ad6..b35d31c8b8 100644 --- a/src/sql/parts/dashboard/widgets/insights/insightsWidgetSchemas.ts +++ b/src/sql/parts/dashboard/widgets/insights/insightsWidgetSchemas.ts @@ -32,6 +32,10 @@ export const insightsSchema: IJSONSchema = { type: 'string', description: nls.localize('insightQueryFileDescription', '[Optional] path to a file that contains a query. Use if "query" is not set') }, + autoRefreshInterval: { + type: 'number', + description: nls.localize('insightAutoRefreshIntervalDescription', '[Optional] Auto refresh interval in minutes, if not set, there will be no auto refresh') + }, details: { type: 'object', properties: { diff --git a/src/sql/parts/dashboard/widgets/insights/interfaces.ts b/src/sql/parts/dashboard/widgets/insights/interfaces.ts index 6ca459c339..2988100a10 100644 --- a/src/sql/parts/dashboard/widgets/insights/interfaces.ts +++ b/src/sql/parts/dashboard/widgets/insights/interfaces.ts @@ -56,4 +56,5 @@ export interface IInsightsConfig { query?: string | Array; queryFile?: string; details?: IInsightsConfigDetails; + autoRefreshInterval?: number; } \ No newline at end of file