From 7fd5999ead59017a00a0de6f9accf09fa3a20014 Mon Sep 17 00:00:00 2001 From: Elena Tanasoiu Date: Wed, 19 Oct 2022 09:06:10 +0100 Subject: [PATCH] QueryHistory: Consume event when variant analysis status is updated Update the state of a query history item when the status of the variant analysis has changed. --- extensions/ql-vscode/src/query-history.ts | 23 ++++++++++++++++++- extensions/ql-vscode/src/query-status.ts | 18 +++++++++++++++ .../variant-analysis-manager.ts | 3 +++ .../no-workspace/query-history.test.ts | 3 ++- .../remote-query-history.test.ts | 3 ++- 5 files changed, 47 insertions(+), 3 deletions(-) diff --git a/extensions/ql-vscode/src/query-history.ts b/extensions/ql-vscode/src/query-history.ts index e13391ab4..c35e3dd87 100644 --- a/extensions/ql-vscode/src/query-history.ts +++ b/extensions/ql-vscode/src/query-history.ts @@ -34,7 +34,7 @@ import { CompletedLocalQueryInfo, LocalQueryInfo } from './query-results'; import { getQueryHistoryItemId, QueryHistoryInfo } from './query-history-info'; import { DatabaseManager } from './databases'; import { registerQueryHistoryScrubber } from './query-history-scrubber'; -import { QueryStatus } from './query-status'; +import { QueryStatus, variantAnalysisStatusToQueryStatus } from './query-status'; import { slurpQueryHistory, splatQueryHistory } from './query-serialization'; import * as fs from 'fs-extra'; import { CliVersionConstraint } from './cli'; @@ -52,6 +52,8 @@ import { QueryWithResults } from './run-queries-shared'; import { QueryRunner } from './queryRunner'; import { VariantAnalysisManager } from './remote-queries/variant-analysis-manager'; import { nanoid } from 'nanoid'; +import { VariantAnalysisHistoryItem } from './remote-queries/variant-analysis-history-item'; +import { getTotalResultCount } from './remote-queries/shared/variant-analysis'; /** * query-history.ts @@ -611,7 +613,26 @@ export class QueryHistoryManager extends DisposableObject { await this.refreshTreeView(); }); + const variantAnalysisStatusUpdateSubscription = this.variantAnalysisManager.onVariantAnalysisStatusUpdated(async (variantAnalysis) => { + const item = this.treeDataProvider.allHistory.find(i => i.t === 'variant-analysis' && i.historyItemId === variantAnalysis.id.toString()); + const status = variantAnalysisStatusToQueryStatus(variantAnalysis.status); + + if (item) { + const variantAnalysisHistoryItem = item as VariantAnalysisHistoryItem; + variantAnalysisHistoryItem.status = status; + variantAnalysisHistoryItem.failureReason = variantAnalysis.failureReason; + variantAnalysisHistoryItem.resultCount = getTotalResultCount(variantAnalysis.scannedRepos); + if (status === QueryStatus.Completed) { + variantAnalysisHistoryItem.completed = true; + } + await this.refreshTreeView(); + } else { + void logger.log('Variant analysis status update event received for unknown variant analysis'); + } + }); + this.push(variantAnalysisAddedSubscription); + this.push(variantAnalysisStatusUpdateSubscription); } private registerToRemoteQueriesEvents() { diff --git a/extensions/ql-vscode/src/query-status.ts b/extensions/ql-vscode/src/query-status.ts index 040454ce6..af6ded591 100644 --- a/extensions/ql-vscode/src/query-status.ts +++ b/extensions/ql-vscode/src/query-status.ts @@ -1,5 +1,23 @@ +import { assertNever } from './pure/helpers-pure'; +import { VariantAnalysisStatus } from './remote-queries/shared/variant-analysis'; + export enum QueryStatus { InProgress = 'InProgress', Completed = 'Completed', Failed = 'Failed', } + +export function variantAnalysisStatusToQueryStatus(status: VariantAnalysisStatus): QueryStatus { + switch (status) { + case VariantAnalysisStatus.Succeeded: + return QueryStatus.Completed; + case VariantAnalysisStatus.Failed: + return QueryStatus.Failed; + case VariantAnalysisStatus.InProgress: + return QueryStatus.InProgress; + case VariantAnalysisStatus.Canceled: + return QueryStatus.Completed; + default: + assertNever(status); + } +} diff --git a/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts b/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts index 5f09d2ce9..1d25452b0 100644 --- a/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts +++ b/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts @@ -27,6 +27,8 @@ import PQueue from 'p-queue'; export class VariantAnalysisManager extends DisposableObject implements VariantAnalysisViewManager { private readonly _onVariantAnalysisAdded = this.push(new EventEmitter()); public readonly onVariantAnalysisAdded = this._onVariantAnalysisAdded.event; + private readonly _onVariantAnalysisStatusUpdated = this.push(new EventEmitter()); + public readonly onVariantAnalysisStatusUpdated = this._onVariantAnalysisStatusUpdated.event; private readonly variantAnalysisMonitor: VariantAnalysisMonitor; private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager; @@ -97,6 +99,7 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA this.variantAnalyses.set(variantAnalysis.id, variantAnalysis); await this.getView(variantAnalysis.id)?.updateView(variantAnalysis); + this._onVariantAnalysisStatusUpdated.fire(variantAnalysis); } public onVariantAnalysisSubmitted(variantAnalysis: VariantAnalysis): void { diff --git a/extensions/ql-vscode/src/vscode-tests/no-workspace/query-history.test.ts b/extensions/ql-vscode/src/vscode-tests/no-workspace/query-history.test.ts index 5305f703e..e209048bc 100644 --- a/extensions/ql-vscode/src/vscode-tests/no-workspace/query-history.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/no-workspace/query-history.test.ts @@ -67,7 +67,8 @@ describe('query-history', () => { } as any as RemoteQueriesManager; variantAnalysisManagerStub = { - onVariantAnalysisAdded: sandbox.stub() + onVariantAnalysisAdded: sandbox.stub(), + onVariantAnalysisStatusUpdated: sandbox.stub() } as any as VariantAnalysisManager; }); diff --git a/extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/remote-query-history.test.ts b/extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/remote-query-history.test.ts index af370a916..ac577a95b 100644 --- a/extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/remote-query-history.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/remote-query-history.test.ts @@ -77,7 +77,8 @@ describe('Remote queries and query history manager', function() { } as any as RemoteQueriesManager; variantAnalysisManagerStub = { - onVariantAnalysisAdded: sandbox.stub() + onVariantAnalysisAdded: sandbox.stub(), + onVariantAnalysisStatusUpdated: sandbox.stub() } as any as VariantAnalysisManager; });