Skip to content

Commit d32a3a0

Browse files
authored
Merge pull request #1601 from github/koesie10/completed-status
Add display of duration and completion status
2 parents e41dba7 + 2e26b85 commit d32a3a0

File tree

12 files changed

+74
-9
lines changed

12 files changed

+74
-9
lines changed

extensions/ql-vscode/src/pure/date.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,16 @@ export function formatDate(value: Date): string {
2424

2525
return dateFormatter.format(value);
2626
}
27+
28+
// These are overloads for the function that allow us to not add an extra
29+
// type check when the value is definitely not undefined.
30+
export function parseDate(value: string): Date;
31+
export function parseDate(value: string | undefined | null): Date | undefined;
32+
33+
export function parseDate(value: string | undefined | null): Date | undefined {
34+
if (value === undefined || value === null) {
35+
return undefined;
36+
}
37+
38+
return new Date(value);
39+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ export interface VariantAnalysis {
2424
actor_id: number,
2525
query_language: VariantAnalysisQueryLanguage,
2626
query_pack_url: string,
27+
created_at: string,
28+
updated_at: string,
2729
status: VariantAnalysisStatus,
30+
completed_at?: string,
2831
actions_workflow_run_id?: number,
2932
failure_reason?: VariantAnalysisFailureReason,
3033
scanned_repositories?: VariantAnalysisScannedRepository[],

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ export interface VariantAnalysis {
1515
repositoryLists?: string[],
1616
repositoryOwners?: string[],
1717
},
18+
createdAt: string,
19+
updatedAt: string,
1820
executionStartTime: number;
1921
status: VariantAnalysisStatus,
22+
completedAt?: string,
2023
actionsWorkflowRunId?: number,
2124
failureReason?: VariantAnalysisFailureReason,
2225
scannedRepos?: VariantAnalysisScannedRepository[],

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ export function processUpdatedVariantAnalysis(
5656
query: previousVariantAnalysis.query,
5757
databases: previousVariantAnalysis.databases,
5858
executionStartTime: previousVariantAnalysis.executionStartTime,
59+
createdAt: response.created_at,
60+
updatedAt: response.updated_at,
5961
status: processApiStatus(response.status),
62+
completedAt: response.completed_at,
6063
actionsWorkflowRunId: response.actions_workflow_run_id,
6164
scannedRepos: scannedRepos,
6265
skippedRepos: skippedRepos

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ import {
1010
import { QueryDetails } from './QueryDetails';
1111
import { VariantAnalysisActions } from './VariantAnalysisActions';
1212
import { VariantAnalysisStats } from './VariantAnalysisStats';
13+
import { parseDate } from '../../pure/date';
1314

1415
export type VariantAnalysisHeaderProps = {
1516
variantAnalysis: VariantAnalysis;
1617

17-
duration?: number | undefined;
18-
completedAt?: Date | undefined;
19-
2018
onOpenQueryFileClick: () => void;
2119
onViewQueryTextClick: () => void;
2220

@@ -41,8 +39,6 @@ const Row = styled.div`
4139

4240
export const VariantAnalysisHeader = ({
4341
variantAnalysis,
44-
duration,
45-
completedAt,
4642
onOpenQueryFileClick,
4743
onViewQueryTextClick,
4844
onStopQueryClick,
@@ -85,8 +81,8 @@ export const VariantAnalysisHeader = ({
8581
completedRepositoryCount={completedRepositoryCount}
8682
resultCount={resultCount}
8783
hasWarnings={hasSkippedRepos}
88-
duration={duration}
89-
completedAt={completedAt}
84+
createdAt={parseDate(variantAnalysis.createdAt)}
85+
completedAt={parseDate(variantAnalysis.completedAt)}
9086
onViewLogsClick={onViewLogsClick}
9187
/>
9288
</Container>

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export type VariantAnalysisStatsProps = {
1717
hasWarnings?: boolean;
1818

1919
resultCount?: number | undefined;
20-
duration?: number | undefined;
20+
createdAt: Date;
2121
completedAt?: Date | undefined;
2222

2323
onViewLogsClick: () => void;
@@ -35,7 +35,7 @@ export const VariantAnalysisStats = ({
3535
completedRepositoryCount = 0,
3636
hasWarnings,
3737
resultCount,
38-
duration,
38+
createdAt,
3939
completedAt,
4040
onViewLogsClick,
4141
}: VariantAnalysisStatsProps) => {
@@ -59,6 +59,14 @@ export const VariantAnalysisStats = ({
5959
return 'Succeeded';
6060
}, [variantAnalysisStatus, hasWarnings]);
6161

62+
const duration = useMemo(() => {
63+
if (!completedAt) {
64+
return undefined;
65+
}
66+
67+
return completedAt.getTime() - createdAt.getTime();
68+
}, [completedAt, createdAt]);
69+
6270
return (
6371
<Row>
6472
<StatItem title="Results">

extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisAnalyzedRepos.spec.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ describe(VariantAnalysisAnalyzedRepos.name, () => {
2121
},
2222
databases: {},
2323
executionStartTime: 1611234567890,
24+
createdAt: '2021-01-21T13:09:27.890Z',
25+
updatedAt: '2021-01-21T13:09:27.890Z',
2426
status: VariantAnalysisStatus.InProgress,
2527
scannedRepos: [
2628
{

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ describe(VariantAnalysisOutcomePanels.name, () => {
2020
},
2121
databases: {},
2222
executionStartTime: 1611234567890,
23+
createdAt: '2021-01-21T13:09:27.890Z',
24+
updatedAt: '2021-01-21T13:09:27.890Z',
2325
status: VariantAnalysisStatus.InProgress,
2426
scannedRepos: [
2527
{

extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisStats.spec.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ describe(VariantAnalysisStats.name, () => {
1717
variantAnalysisStatus={VariantAnalysisStatus.InProgress}
1818
totalRepositoryCount={10}
1919
onViewLogsClick={onViewLogsClick}
20+
createdAt={new Date()}
2021
{...props}
2122
/>
2223
);
@@ -31,6 +32,7 @@ describe(VariantAnalysisStats.name, () => {
3132
render({ resultCount: 123456 });
3233

3334
expect(screen.getByText('123,456')).toBeInTheDocument();
35+
expect(screen.queryAllByText('-').length).toBe(1);
3436
});
3537

3638
it('renders the number of repositories as a formatted number', () => {
@@ -100,4 +102,30 @@ describe(VariantAnalysisStats.name, () => {
100102
expect(screen.getByText('Succeeded')).toBeInTheDocument();
101103
expect(screen.queryByText('Succeeded warnings')).not.toBeInTheDocument();
102104
});
105+
106+
it('does not render the duration when the completedAt is not set', () => {
107+
render({ createdAt: new Date('2021-05-01T00:00:00Z') });
108+
109+
expect(screen.queryAllByText('-').length).toBe(2);
110+
expect(screen.queryByText('Less than a second')).not.toBeInTheDocument();
111+
});
112+
113+
it('renders the duration when it is less than a second', () => {
114+
render({ createdAt: new Date('2021-05-01T00:00:00Z'), completedAt: new Date('2021-05-01T00:00:00Z') });
115+
116+
expect(screen.getByText('Less than a second')).toBeInTheDocument();
117+
expect(screen.queryAllByText('-').length).toBe(1);
118+
});
119+
120+
it('renders the duration when it is less than a minute', () => {
121+
render({ createdAt: new Date('2021-05-01T00:00:00Z'), completedAt: new Date('2021-05-01T00:00:34Z') });
122+
123+
expect(screen.getByText('34 seconds')).toBeInTheDocument();
124+
});
125+
126+
it('renders the duration when it is more than a minute', () => {
127+
render({ createdAt: new Date('2021-05-01T00:00:00Z'), completedAt: new Date('2021-05-01T00:10:22Z') });
128+
129+
expect(screen.getByText('10 minutes')).toBeInTheDocument();
130+
});
103131
});

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-processor.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ describe('Variant Analysis processor', function() {
3737
'repositories': ['1', '2', '3'],
3838
},
3939
'executionStartTime': mockSubmission.startTime,
40+
'createdAt': mockApiResponse.created_at,
41+
'updatedAt': mockApiResponse.updated_at,
4042
'status': 'succeeded',
43+
'completedAt': mockApiResponse.completed_at,
4144
'actionsWorkflowRunId': mockApiResponse.actions_workflow_run_id,
4245
'scannedRepos': [
4346
transformScannedRepo(VariantAnalysisRepoStatus.Succeeded, scannedRepos[0]),

0 commit comments

Comments
 (0)