Skip to content

Commit 3623668

Browse files
authored
Add model alerts stats to the view (#3481)
1 parent 3519139 commit 3623668

5 files changed

Lines changed: 74 additions & 1 deletion

File tree

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,11 @@ interface OpenModelPackMessage {
737737
path: string;
738738
}
739739

740+
interface OpenActionsLogsMessage {
741+
t: "openActionsLogs";
742+
variantAnalysisId: number;
743+
}
744+
740745
interface StopEvaluationRunMessage {
741746
t: "stopEvaluationRun";
742747
}
@@ -750,4 +755,5 @@ export type ToModelAlertsMessage =
750755
export type FromModelAlertsMessage =
751756
| CommonFromViewMessages
752757
| OpenModelPackMessage
758+
| OpenActionsLogsMessage
753759
| StopEvaluationRunMessage;

extensions/ql-vscode/src/model-editor/model-alerts/model-alerts-view.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ export class ModelAlertsView extends AbstractWebview<
9191
case "openModelPack":
9292
await this.app.commands.execute("revealInExplorer", Uri.file(msg.path));
9393
break;
94+
case "openActionsLogs":
95+
await this.app.commands.execute(
96+
"codeQL.openVariantAnalysisLogs",
97+
msg.variantAnalysisId,
98+
);
99+
break;
94100
case "stopEvaluationRun":
95101
await this.stopEvaluationRun();
96102
break;

extensions/ql-vscode/src/stories/model-alerts/ModelAlertsHeader.stories.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ export default {
1313
disable: true,
1414
},
1515
},
16+
onViewLogsClick: {
17+
action: "view-logs-clicked",
18+
table: {
19+
disable: true,
20+
},
21+
},
1622
stopRunClick: {
1723
action: "stop-run-clicked",
1824
table: {

extensions/ql-vscode/src/view/model-alerts/ModelAlerts.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useCallback, useEffect, useState } from "react";
2-
import { ModelAlertsHeader } from "./ModelAlertsHeader";
32
import type { ModelAlertsViewState } from "../../model-editor/shared/view-state";
43
import type { ToModelAlertsMessage } from "../../common/interface-types";
54
import type {
@@ -8,6 +7,7 @@ import type {
87
VariantAnalysisScannedRepositoryState,
98
} from "../../variant-analysis/shared/variant-analysis";
109
import { vscode } from "../vscode-api";
10+
import { ModelAlertsHeader } from "./ModelAlertsHeader";
1111

1212
type Props = {
1313
initialViewState?: ModelAlertsViewState;
@@ -102,12 +102,23 @@ export function ModelAlerts({
102102
return <></>;
103103
}
104104

105+
const openLogs = () => {
106+
vscode.postMessage({
107+
t: "openActionsLogs",
108+
variantAnalysisId: variantAnalysis.id,
109+
});
110+
};
111+
112+
const onViewLogsClick =
113+
variantAnalysis.actionsWorkflowRunId === undefined ? undefined : openLogs;
114+
105115
return (
106116
<>
107117
<ModelAlertsHeader
108118
viewState={viewState}
109119
variantAnalysis={variantAnalysis}
110120
openModelPackClick={onOpenModelPackClick}
121+
onViewLogsClick={onViewLogsClick}
111122
stopRunClick={onStopRunClick}
112123
></ModelAlertsHeader>
113124
<div>

extensions/ql-vscode/src/view/model-alerts/ModelAlertsHeader.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
1+
import { useMemo } from "react";
2+
import { parseDate } from "../../common/date";
13
import { styled } from "styled-components";
24
import type { ModelAlertsViewState } from "../../model-editor/shared/view-state";
5+
import {
6+
getSkippedRepoCount,
7+
getTotalResultCount,
8+
hasRepoScanCompleted,
9+
isRepoScanSuccessful,
10+
} from "../../variant-analysis/shared/variant-analysis";
311
import type { VariantAnalysis } from "../../variant-analysis/shared/variant-analysis";
412
import { ViewTitle } from "../common";
513
import { ModelAlertsActions } from "./ModelAlertsActions";
614
import { ModelPacks } from "./ModelPacks";
15+
import { VariantAnalysisStats } from "../variant-analysis/VariantAnalysisStats";
716

817
type Props = {
918
viewState: ModelAlertsViewState;
1019
variantAnalysis: VariantAnalysis;
1120
openModelPackClick: (path: string) => void;
21+
onViewLogsClick?: () => void;
1222
stopRunClick: () => void;
1323
};
1424

@@ -26,8 +36,31 @@ export const ModelAlertsHeader = ({
2636
viewState,
2737
variantAnalysis,
2838
openModelPackClick,
39+
onViewLogsClick,
2940
stopRunClick,
3041
}: Props) => {
42+
const totalScannedRepositoryCount = useMemo(() => {
43+
return variantAnalysis.scannedRepos?.length ?? 0;
44+
}, [variantAnalysis.scannedRepos]);
45+
const completedRepositoryCount = useMemo(() => {
46+
return (
47+
variantAnalysis.scannedRepos?.filter((repo) => hasRepoScanCompleted(repo))
48+
?.length ?? 0
49+
);
50+
}, [variantAnalysis.scannedRepos]);
51+
const successfulRepositoryCount = useMemo(() => {
52+
return (
53+
variantAnalysis.scannedRepos?.filter((repo) => isRepoScanSuccessful(repo))
54+
?.length ?? 0
55+
);
56+
}, [variantAnalysis.scannedRepos]);
57+
const resultCount = useMemo(() => {
58+
return getTotalResultCount(variantAnalysis.scannedRepos);
59+
}, [variantAnalysis.scannedRepos]);
60+
const skippedRepositoryCount = useMemo(() => {
61+
return getSkippedRepoCount(variantAnalysis.skippedRepos);
62+
}, [variantAnalysis.skippedRepos]);
63+
3164
return (
3265
<>
3366
<Container>
@@ -44,6 +77,17 @@ export const ModelAlertsHeader = ({
4477
onStopRunClick={stopRunClick}
4578
/>
4679
</Row>
80+
<VariantAnalysisStats
81+
variantAnalysisStatus={variantAnalysis.status}
82+
totalRepositoryCount={totalScannedRepositoryCount}
83+
completedRepositoryCount={completedRepositoryCount}
84+
successfulRepositoryCount={successfulRepositoryCount}
85+
skippedRepositoryCount={skippedRepositoryCount}
86+
resultCount={resultCount}
87+
createdAt={parseDate(variantAnalysis.createdAt)}
88+
completedAt={parseDate(variantAnalysis.completedAt)}
89+
onViewLogsClick={onViewLogsClick}
90+
/>
4791
</Container>
4892
</>
4993
);

0 commit comments

Comments
 (0)