Slim down VariantAnalysisMonitorResult

This commit is contained in:
Robert
2022-10-31 17:52:34 +00:00
parent 594d879640
commit cc955c70f9
5 changed files with 20 additions and 36 deletions

View File

@@ -1,16 +1,11 @@
import { VariantAnalysis } from './variant-analysis';
export type VariantAnalysisMonitorStatus =
| 'InProgress'
| 'CompletedSuccessfully'
| 'CompletedUnsuccessfully'
| 'Failed'
| 'Cancelled'
| 'TimedOut';
| 'Completed'
| 'Canceled';
export interface VariantAnalysisMonitorResult {
status: VariantAnalysisMonitorStatus;
error?: string;
scannedReposDownloaded?: number[],
variantAnalysis?: VariantAnalysis
}

View File

@@ -43,7 +43,7 @@ export class VariantAnalysisMonitor extends DisposableObject {
await this.sleep(VariantAnalysisMonitor.sleepTime);
if (cancellationToken && cancellationToken.isCancellationRequested) {
return { status: 'Cancelled', error: 'Variant Analysis was canceled.' };
return { status: 'Canceled' };
}
const variantAnalysisSummary = await ghApiClient.getVariantAnalysis(
@@ -59,22 +59,14 @@ export class VariantAnalysisMonitor extends DisposableObject {
const downloadedRepos = this.downloadVariantAnalysisResults(variantAnalysisSummary, scannedReposDownloaded);
scannedReposDownloaded.push(...downloadedRepos);
if (variantAnalysis.failureReason) {
return {
status: 'Failed',
error: `Variant Analysis has failed: ${variantAnalysis.failureReason}`,
variantAnalysis: variantAnalysis
};
}
if (isFinalVariantAnalysisStatus(variantAnalysis.status)) {
if (isFinalVariantAnalysisStatus(variantAnalysis.status) || variantAnalysis.failureReason) {
break;
}
attemptCount++;
}
return { status: 'CompletedSuccessfully', scannedReposDownloaded: scannedReposDownloaded };
return { status: 'Completed', scannedReposDownloaded, variantAnalysis };
}
private scheduleForDownload(

View File

@@ -62,7 +62,7 @@ export function processUpdatedVariantAnalysis(
executionStartTime: previousVariantAnalysis.executionStartTime,
createdAt: response.created_at,
updatedAt: response.updated_at,
status: processApiStatus(response.status),
status: processApiStatus(response.status, response.failure_reason),
completedAt: response.completed_at,
actionsWorkflowRunId: response.actions_workflow_run_id,
scannedRepos: scannedRepos,
@@ -158,11 +158,12 @@ function processApiRepoStatus(analysisStatus: ApiVariantAnalysisRepoStatus): Var
}
}
function processApiStatus(status: ApiVariantAnalysisStatus): VariantAnalysisStatus {
switch (status) {
case 'in_progress':
function processApiStatus(status: ApiVariantAnalysisStatus, failureReason: string | undefined): VariantAnalysisStatus {
if (status === 'in_progress') {
return VariantAnalysisStatus.InProgress;
case 'completed':
} else if (failureReason !== undefined) {
return VariantAnalysisStatus.Failed;
} else {
return VariantAnalysisStatus.Succeeded;
}
}

View File

@@ -83,14 +83,14 @@ describe('Variant Analysis Monitor', async function() {
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
expect(result).to.eql({ status: 'Cancelled', error: 'Variant Analysis was canceled.' });
expect(result).to.eql({ status: 'Canceled' });
});
describe('when the variant analysis fails', async () => {
let mockFailedApiResponse: VariantAnalysisApiResponse;
beforeEach(async function() {
mockFailedApiResponse = createFailedMockApiResponse('in_progress');
mockFailedApiResponse = createFailedMockApiResponse();
mockGetVariantAnalysis = sandbox.stub(ghApiClient, 'getVariantAnalysis').resolves(mockFailedApiResponse);
});
@@ -98,8 +98,7 @@ describe('Variant Analysis Monitor', async function() {
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
expect(mockGetVariantAnalysis.calledOnce).to.be.true;
expect(result.status).to.eql('Failed');
expect(result.error).to.eql(`Variant Analysis has failed: ${mockFailedApiResponse.failure_reason}`);
expect(result.status).to.eql('Completed');
expect(result.variantAnalysis?.status).to.equal(VariantAnalysisStatus.Failed);
expect(result.variantAnalysis?.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason));
});
@@ -130,7 +129,7 @@ describe('Variant Analysis Monitor', async function() {
it('should succeed and return a list of scanned repo ids', async () => {
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
expect(result.status).to.equal('CompletedSuccessfully');
expect(result.status).to.equal('Completed');
expect(result.scannedReposDownloaded).to.eql(succeededRepos.map(r => r.repository.id));
});
@@ -173,7 +172,7 @@ describe('Variant Analysis Monitor', async function() {
it('should succeed and return an empty list of scanned repo ids', async () => {
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
expect(result.status).to.equal('CompletedSuccessfully');
expect(result.status).to.equal('Completed');
expect(result.scannedReposDownloaded).to.eql([]);
});
@@ -194,7 +193,7 @@ describe('Variant Analysis Monitor', async function() {
it('should succeed and return an empty list of scanned repo ids', async () => {
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
expect(result.status).to.equal('CompletedSuccessfully');
expect(result.status).to.equal('Completed');
expect(result.scannedReposDownloaded).to.eql([]);
});

View File

@@ -39,13 +39,10 @@ export function createMockApiResponse(
}
export function createFailedMockApiResponse(
status: VariantAnalysisStatus = 'in_progress',
scannedRepos: VariantAnalysisScannedRepository[] = createMockScannedRepos(),
skippedRepos: VariantAnalysisSkippedRepositories = createMockSkippedRepos(),
): VariantAnalysisApiResponse {
const variantAnalysis = createMockApiResponse(status, scannedRepos, skippedRepos);
variantAnalysis.status = status;
const variantAnalysis = createMockApiResponse('completed', scannedRepos, skippedRepos);
variantAnalysis.failure_reason = 'internal_error';
return variantAnalysis;
}