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.
This commit is contained in:
@@ -5,6 +5,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
|
|||||||
import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis';
|
import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis';
|
||||||
import {
|
import {
|
||||||
VariantAnalysis as VariantAnalysisDomainModel,
|
VariantAnalysis as VariantAnalysisDomainModel,
|
||||||
|
VariantAnalysisFailureReason,
|
||||||
VariantAnalysisRepoStatus,
|
VariantAnalysisRepoStatus,
|
||||||
VariantAnalysisScannedRepositoryDownloadStatus,
|
VariantAnalysisScannedRepositoryDownloadStatus,
|
||||||
VariantAnalysisScannedRepositoryResult,
|
VariantAnalysisScannedRepositoryResult,
|
||||||
@@ -256,3 +257,23 @@ FullExampleWithoutSkipped.args = {
|
|||||||
repoStates,
|
repoStates,
|
||||||
repoResults,
|
repoResults,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const Failed = Template.bind({});
|
||||||
|
Failed.args = {
|
||||||
|
variantAnalysis: {
|
||||||
|
...variantAnalysis,
|
||||||
|
status: VariantAnalysisStatus.Failed,
|
||||||
|
failureReason: VariantAnalysisFailureReason.NoReposQueried,
|
||||||
|
completedAt: new Date(new Date(variantAnalysis.createdAt).getTime() + 100_000).toISOString(),
|
||||||
|
scannedRepos: [],
|
||||||
|
skippedRepos: {
|
||||||
|
...variantAnalysis.skippedRepos,
|
||||||
|
overLimitRepos: {
|
||||||
|
repositoryCount: 0,
|
||||||
|
repositories: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
repoStates,
|
||||||
|
repoResults,
|
||||||
|
};
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { VSCodeButton } from '@vscode/webview-ui-toolkit/react';
|
||||||
|
import { Alert } from '../common';
|
||||||
|
import { vscode } from '../vscode-api';
|
||||||
|
import { VariantAnalysisFailureReason } from '../../remote-queries/shared/variant-analysis';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
failureReason: VariantAnalysisFailureReason;
|
||||||
|
showLogsButton: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getTitle = (failureReason: VariantAnalysisFailureReason): string => {
|
||||||
|
switch (failureReason) {
|
||||||
|
case VariantAnalysisFailureReason.NoReposQueried:
|
||||||
|
return 'No repositories queried';
|
||||||
|
case VariantAnalysisFailureReason.InternalError:
|
||||||
|
return 'Internal error';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getMessage = (failureReason: VariantAnalysisFailureReason): string => {
|
||||||
|
switch (failureReason) {
|
||||||
|
case VariantAnalysisFailureReason.NoReposQueried:
|
||||||
|
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.';
|
||||||
|
case VariantAnalysisFailureReason.InternalError:
|
||||||
|
return 'An internal error occurred while running this variant analysis. Please try again later.';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const openLogs = () => {
|
||||||
|
vscode.postMessage({
|
||||||
|
t: 'openLogs',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const FailureReasonAlert = ({
|
||||||
|
failureReason,
|
||||||
|
showLogsButton,
|
||||||
|
}: Props) => {
|
||||||
|
return (
|
||||||
|
<Alert
|
||||||
|
type="error"
|
||||||
|
title={getTitle(failureReason)}
|
||||||
|
message={getMessage(failureReason)}
|
||||||
|
actions={showLogsButton && <VSCodeButton appearance="secondary" onClick={openLogs}>View logs</VSCodeButton>}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -6,13 +6,15 @@ import { formatDecimal } from '../../pure/number';
|
|||||||
import {
|
import {
|
||||||
VariantAnalysis,
|
VariantAnalysis,
|
||||||
VariantAnalysisScannedRepositoryResult,
|
VariantAnalysisScannedRepositoryResult,
|
||||||
VariantAnalysisScannedRepositoryState
|
VariantAnalysisScannedRepositoryState,
|
||||||
|
VariantAnalysisStatus
|
||||||
} from '../../remote-queries/shared/variant-analysis';
|
} from '../../remote-queries/shared/variant-analysis';
|
||||||
import { VariantAnalysisAnalyzedRepos } from './VariantAnalysisAnalyzedRepos';
|
import { VariantAnalysisAnalyzedRepos } from './VariantAnalysisAnalyzedRepos';
|
||||||
import { Alert } from '../common';
|
import { Alert } from '../common';
|
||||||
import { VariantAnalysisSkippedRepositoriesTab } from './VariantAnalysisSkippedRepositoriesTab';
|
import { VariantAnalysisSkippedRepositoriesTab } from './VariantAnalysisSkippedRepositoriesTab';
|
||||||
import { defaultFilterSortState, RepositoriesFilterSortState } from './filterSort';
|
import { defaultFilterSortState, RepositoriesFilterSortState } from './filterSort';
|
||||||
import { RepositoriesSearchSortRow } from './RepositoriesSearchSortRow';
|
import { RepositoriesSearchSortRow } from './RepositoriesSearchSortRow';
|
||||||
|
import { FailureReasonAlert } from './FailureReasonAlert';
|
||||||
|
|
||||||
export type VariantAnalysisOutcomePanelProps = {
|
export type VariantAnalysisOutcomePanelProps = {
|
||||||
variantAnalysis: VariantAnalysis;
|
variantAnalysis: VariantAnalysis;
|
||||||
@@ -54,6 +56,9 @@ export const VariantAnalysisOutcomePanels = ({
|
|||||||
|
|
||||||
const warnings = (
|
const warnings = (
|
||||||
<WarningsContainer>
|
<WarningsContainer>
|
||||||
|
{variantAnalysis.status === VariantAnalysisStatus.Failed && variantAnalysis.failureReason && (
|
||||||
|
<FailureReasonAlert failureReason={variantAnalysis.failureReason} showLogsButton={!!variantAnalysis.actionsWorkflowRunId} />
|
||||||
|
)}
|
||||||
{overLimitRepositoryCount > 0 && (
|
{overLimitRepositoryCount > 0 && (
|
||||||
<Alert
|
<Alert
|
||||||
type="warning"
|
type="warning"
|
||||||
|
|||||||
Reference in New Issue
Block a user