Skip to content

Commit 339fc9a

Browse files
committed
Post setRepoStates message when downloading
1 parent 4138ca1 commit 339fc9a

4 files changed

Lines changed: 67 additions & 10 deletions

File tree

extensions/ql-vscode/src/pure/interface-types.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import * as sarif from 'sarif';
22
import { AnalysisResults } from '../remote-queries/shared/analysis-result';
33
import { AnalysisSummary, RemoteQueryResult } from '../remote-queries/shared/remote-query-result';
44
import { RawResultSet, ResultRow, ResultSetSchema, Column, ResolvableLocationValue } from './bqrs-cli-types';
5-
import { VariantAnalysis, VariantAnalysisScannedRepositoryResult } from '../remote-queries/shared/variant-analysis';
5+
import {
6+
VariantAnalysis,
7+
VariantAnalysisScannedRepositoryResult,
8+
VariantAnalysisScannedRepositoryState,
9+
} from '../remote-queries/shared/variant-analysis';
610

711
/**
812
* This module contains types and code that are shared between
@@ -441,9 +445,15 @@ export interface SetRepoResultsMessage {
441445
repoResults: VariantAnalysisScannedRepositoryResult[];
442446
}
443447

448+
export interface SetRepoStatesMessage {
449+
t: 'setRepoStates';
450+
repoStates: VariantAnalysisScannedRepositoryState[];
451+
}
452+
444453
export type ToVariantAnalysisMessage =
445454
| SetVariantAnalysisMessage
446-
| SetRepoResultsMessage;
455+
| SetRepoResultsMessage
456+
| SetRepoStatesMessage;
447457

448458
export type FromVariantAnalysisMessage =
449459
| ViewLoadedMsg;

extensions/ql-vscode/src/remote-queries/shared/variant-analysis.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ export interface VariantAnalysisSkippedRepository {
8282
private?: boolean,
8383
}
8484

85+
export enum VariantAnalysisScannedRepositoryDownloadStatus {
86+
Pending = 'pending',
87+
InProgress = 'inProgress',
88+
Succeeded = 'succeeded',
89+
Failed = 'failed',
90+
}
91+
92+
export interface VariantAnalysisScannedRepositoryState {
93+
repositoryId: number;
94+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus;
95+
}
96+
8597
export interface VariantAnalysisScannedRepositoryResult {
8698
repositoryId: number;
8799
interpretedResults?: AnalysisAlert[];

extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import {
1111
VariantAnalysisRepoTask,
1212
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository
1313
} from './gh-api/variant-analysis';
14-
import { VariantAnalysis } from './shared/variant-analysis';
14+
import {
15+
VariantAnalysis,
16+
VariantAnalysisScannedRepositoryDownloadStatus,
17+
VariantAnalysisScannedRepositoryState
18+
} from './shared/variant-analysis';
1519
import { getErrorMessage } from '../pure/helpers-pure';
1620
import { VariantAnalysisView } from './variant-analysis-view';
1721
import { VariantAnalysisViewManager } from './variant-analysis-view-manager';
@@ -52,17 +56,20 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
5256
this.views.delete(view.variantAnalysisId);
5357
}
5458

59+
public getView(variantAnalysisId: number): VariantAnalysisView | undefined {
60+
return this.views.get(variantAnalysisId);
61+
}
62+
5563
private async onVariantAnalysisUpdated(variantAnalysis: VariantAnalysis | undefined): Promise<void> {
5664
if (!variantAnalysis) {
5765
return;
5866
}
5967

60-
const view = this.views.get(variantAnalysis.id);
61-
if (!view) {
62-
return;
63-
}
68+
await this.getView(variantAnalysis.id)?.updateView(variantAnalysis);
69+
}
6470

65-
await view.updateView(variantAnalysis);
71+
private async onRepoStateUpdated(variantAnalysisId: number, repoState: VariantAnalysisScannedRepositoryState): Promise<void> {
72+
await this.getView(variantAnalysisId)?.updateRepoState(repoState);
6673
}
6774

6875
public async monitorVariantAnalysis(
@@ -77,11 +84,19 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
7784
variantAnalysisSummary: VariantAnalysisApiResponse,
7885
cancellationToken: CancellationToken
7986
): Promise<void> {
87+
const repoState = {
88+
repositoryId: scannedRepo.repository.id,
89+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Pending,
90+
};
91+
92+
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
8093

8194
const credentials = await Credentials.initialize(this.ctx);
8295
if (!credentials) { throw Error('Error authenticating with GitHub'); }
8396

8497
if (cancellationToken && cancellationToken.isCancellationRequested) {
98+
repoState.downloadStatus = VariantAnalysisScannedRepositoryDownloadStatus.Failed;
99+
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
85100
return;
86101
}
87102

@@ -93,10 +108,16 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
93108
variantAnalysisSummary.id,
94109
scannedRepo.repository.id
95110
);
111+
} catch (e) {
112+
repoState.downloadStatus = VariantAnalysisScannedRepositoryDownloadStatus.Failed;
113+
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
114+
throw new Error(`Could not download the results for variant analysis with id: ${variantAnalysisSummary.id}. Error: ${getErrorMessage(e)}`);
96115
}
97-
catch (e) { throw new Error(`Could not download the results for variant analysis with id: ${variantAnalysisSummary.id}. Error: ${getErrorMessage(e)}`); }
98116

99117
if (repoTask.artifact_url) {
118+
repoState.downloadStatus = VariantAnalysisScannedRepositoryDownloadStatus.InProgress;
119+
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
120+
100121
const resultDirectory = path.join(
101122
this.ctx.globalStorageUri.fsPath,
102123
'variant-analyses',
@@ -117,5 +138,8 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
117138
fs.mkdirSync(resultDirectory, { recursive: true });
118139
await fs.writeFile(storagePath, JSON.stringify(result, null, 2), 'utf8');
119140
}
141+
142+
repoState.downloadStatus = VariantAnalysisScannedRepositoryDownloadStatus.Succeeded;
143+
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
120144
}
121145
}

extensions/ql-vscode/src/remote-queries/variant-analysis-view.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { AbstractWebview, WebviewPanelConfig } from '../abstract-webview';
33
import { WebviewMessage } from '../interface-utils';
44
import { logger } from '../logging';
55
import { VariantAnalysisViewInterface, VariantAnalysisViewManager } from './variant-analysis-view-manager';
6-
import { VariantAnalysis } from './shared/variant-analysis';
6+
import { VariantAnalysis, VariantAnalysisScannedRepositoryState } from './shared/variant-analysis';
77
import { FromVariantAnalysisMessage, ToVariantAnalysisMessage } from '../pure/interface-types';
88

99
export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessage, FromVariantAnalysisMessage> implements VariantAnalysisViewInterface {
@@ -32,6 +32,17 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
3232
});
3333
}
3434

35+
public async updateRepoState(repoState: VariantAnalysisScannedRepositoryState): Promise<void> {
36+
if (!this.isShowingPanel) {
37+
return;
38+
}
39+
40+
await this.postMessage({
41+
t: 'setRepoStates',
42+
repoStates: [repoState],
43+
});
44+
}
45+
3546
protected getPanelConfig(): WebviewPanelConfig {
3647
return {
3748
viewId: 'variantAnalysisView',

0 commit comments

Comments
 (0)