Skip to content

Commit 8e6cfa8

Browse files
committed
Handle failed status in variant analysis view
This will show a message for the failure reason in the variant analysis view when the variant analysis has failed. There don't seem to be designs for these alerts, but we will need to do a full design review of the view at some point anyway, so I don't think the exact text is important.
1 parent bbdad0a commit 8e6cfa8

3 files changed

Lines changed: 75 additions & 1 deletion

File tree

extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
55
import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis';
66
import {
77
VariantAnalysis as VariantAnalysisDomainModel,
8+
VariantAnalysisFailureReason,
89
VariantAnalysisRepoStatus,
910
VariantAnalysisScannedRepositoryDownloadStatus,
1011
VariantAnalysisScannedRepositoryResult,
@@ -256,3 +257,23 @@ FullExampleWithoutSkipped.args = {
256257
repoStates,
257258
repoResults,
258259
};
260+
261+
export const Failed = Template.bind({});
262+
Failed.args = {
263+
variantAnalysis: {
264+
...variantAnalysis,
265+
status: VariantAnalysisStatus.Failed,
266+
failureReason: VariantAnalysisFailureReason.NoReposQueried,
267+
completedAt: new Date(new Date(variantAnalysis.createdAt).getTime() + 100_000).toISOString(),
268+
scannedRepos: [],
269+
skippedRepos: {
270+
...variantAnalysis.skippedRepos,
271+
overLimitRepos: {
272+
repositoryCount: 0,
273+
repositories: [],
274+
},
275+
}
276+
},
277+
repoStates,
278+
repoResults,
279+
};
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import * as React from 'react';
2+
import { VSCodeButton } from '@vscode/webview-ui-toolkit/react';
3+
import { Alert } from '../common';
4+
import { vscode } from '../vscode-api';
5+
import { VariantAnalysisFailureReason } from '../../remote-queries/shared/variant-analysis';
6+
7+
type Props = {
8+
failureReason: VariantAnalysisFailureReason;
9+
showLogsButton: boolean;
10+
};
11+
12+
const getTitle = (failureReason: VariantAnalysisFailureReason): string => {
13+
switch (failureReason) {
14+
case VariantAnalysisFailureReason.NoReposQueried:
15+
return 'No repositories queried';
16+
case VariantAnalysisFailureReason.InternalError:
17+
return 'Internal error';
18+
}
19+
};
20+
21+
const getMessage = (failureReason: VariantAnalysisFailureReason): string => {
22+
switch (failureReason) {
23+
case VariantAnalysisFailureReason.NoReposQueried:
24+
return 'No repositories were queried for this variant analysis. This may be because you do not have access to any of the requested repositories, or none of the requested repositories have CodeQL databases.';
25+
case VariantAnalysisFailureReason.InternalError:
26+
return 'An internal error occurred while running this variant analysis. Please try again later.';
27+
}
28+
};
29+
30+
const openLogs = () => {
31+
vscode.postMessage({
32+
t: 'openLogs',
33+
});
34+
};
35+
36+
export const FailureReasonAlert = ({
37+
failureReason,
38+
showLogsButton,
39+
}: Props) => {
40+
return (
41+
<Alert
42+
type="error"
43+
title={getTitle(failureReason)}
44+
message={getMessage(failureReason)}
45+
actions={showLogsButton && <VSCodeButton appearance="secondary" onClick={openLogs}>View logs</VSCodeButton>}
46+
/>
47+
);
48+
};

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import { formatDecimal } from '../../pure/number';
66
import {
77
VariantAnalysis,
88
VariantAnalysisScannedRepositoryResult,
9-
VariantAnalysisScannedRepositoryState
9+
VariantAnalysisScannedRepositoryState,
10+
VariantAnalysisStatus
1011
} from '../../remote-queries/shared/variant-analysis';
1112
import { VariantAnalysisAnalyzedRepos } from './VariantAnalysisAnalyzedRepos';
1213
import { Alert } from '../common';
1314
import { VariantAnalysisSkippedRepositoriesTab } from './VariantAnalysisSkippedRepositoriesTab';
1415
import { defaultFilterSortState, RepositoriesFilterSortState } from './filterSort';
1516
import { RepositoriesSearchSortRow } from './RepositoriesSearchSortRow';
17+
import { FailureReasonAlert } from './FailureReasonAlert';
1618

1719
export type VariantAnalysisOutcomePanelProps = {
1820
variantAnalysis: VariantAnalysis;
@@ -54,6 +56,9 @@ export const VariantAnalysisOutcomePanels = ({
5456

5557
const warnings = (
5658
<WarningsContainer>
59+
{variantAnalysis.status === VariantAnalysisStatus.Failed && variantAnalysis.failureReason && (
60+
<FailureReasonAlert failureReason={variantAnalysis.failureReason} showLogsButton={!!variantAnalysis.actionsWorkflowRunId} />
61+
)}
5762
{overLimitRepositoryCount > 0 && (
5863
<Alert
5964
type="warning"

0 commit comments

Comments
 (0)