Merge pull request #1728 from github/koesie10/failed-view

Handle failed status in variant analysis view
This commit is contained in:
Koen Vlaswinkel
2022-11-10 11:22:24 +01:00
committed by GitHub
3 changed files with 74 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis';
import {
VariantAnalysis as VariantAnalysisDomainModel,
VariantAnalysisFailureReason,
VariantAnalysisRepoStatus,
VariantAnalysisScannedRepositoryDownloadStatus,
VariantAnalysisScannedRepositoryResult,
@@ -362,3 +363,23 @@ Canceled.args = {
repoStates,
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,
};

View File

@@ -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 to analyze';
case VariantAnalysisFailureReason.InternalError:
return 'Something unexpected happened';
}
};
const getMessage = (failureReason: VariantAnalysisFailureReason): string => {
switch (failureReason) {
case VariantAnalysisFailureReason.NoReposQueried:
return 'No repositories available after processing. No repositories were analyzed.';
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>}
/>
);
};

View File

@@ -7,13 +7,14 @@ import {
VariantAnalysis,
VariantAnalysisScannedRepositoryResult,
VariantAnalysisScannedRepositoryState,
VariantAnalysisStatus,
VariantAnalysisStatus
} from '../../remote-queries/shared/variant-analysis';
import { VariantAnalysisAnalyzedRepos } from './VariantAnalysisAnalyzedRepos';
import { Alert } from '../common';
import { VariantAnalysisSkippedRepositoriesTab } from './VariantAnalysisSkippedRepositoriesTab';
import { defaultFilterSortState, RepositoriesFilterSortState } from './filterSort';
import { RepositoriesSearchSortRow } from './RepositoriesSearchSortRow';
import { FailureReasonAlert } from './FailureReasonAlert';
export type VariantAnalysisOutcomePanelProps = {
variantAnalysis: VariantAnalysis;
@@ -63,6 +64,9 @@ export const VariantAnalysisOutcomePanels = ({
message="Variant analysis canceled before all queries were complete. Some repositories were not analyzed."
/>
)}
{variantAnalysis.status === VariantAnalysisStatus.Failed && variantAnalysis.failureReason && (
<FailureReasonAlert failureReason={variantAnalysis.failureReason} showLogsButton={!!variantAnalysis.actionsWorkflowRunId} />
)}
{overLimitRepositoryCount > 0 && (
<Alert
type="warning"