Skip to content

Commit 6803ace

Browse files
committed
enhance workspace build data and audit log with build reason display
1 parent c87cb53 commit 6803ace

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

site/src/api/api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,6 +1255,7 @@ class ApiMethods {
12551255
template_version_id: templateVersionId,
12561256
log_level: logLevel,
12571257
rich_parameter_values: buildParameters,
1258+
reason: "dashboard",
12581259
});
12591260
};
12601261

site/src/modules/workspaces/WorkspaceBuildData/WorkspaceBuildData.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import { type Interpolation, type Theme, useTheme } from "@emotion/react";
2+
import Tooltip from "@mui/material/Tooltip";
23
import Skeleton from "@mui/material/Skeleton";
34
import type { WorkspaceBuild } from "api/typesGenerated";
45
import { BuildIcon } from "components/BuildIcon/BuildIcon";
56
import { createDayString } from "utils/createDayString";
67
import {
8+
getDisplayInitiatorBuildReason,
79
getDisplayWorkspaceBuildInitiatedBy,
810
getDisplayWorkspaceBuildStatus,
911
} from "utils/workspace";
12+
import { InfoIcon } from "lucide-react";
1013

1114
export const WorkspaceBuildData = ({ build }: { build: WorkspaceBuild }) => {
1215
const theme = useTheme();
@@ -29,13 +32,26 @@ export const WorkspaceBuildData = ({ build }: { build: WorkspaceBuild }) => {
2932
textOverflow: "ellipsis",
3033
overflow: "hidden",
3134
whiteSpace: "nowrap",
35+
display: "flex",
36+
alignItems: "center",
37+
gap: 4,
3238
}}
3339
>
3440
<span css={{ textTransform: "capitalize" }}>{build.transition}</span>{" "}
3541
by{" "}
3642
<span css={{ fontWeight: 500 }}>
3743
{getDisplayWorkspaceBuildInitiatedBy(build)}
3844
</span>
45+
{getDisplayInitiatorBuildReason(build.reason) && build.transition === 'start' && (
46+
<Tooltip title={getDisplayInitiatorBuildReason(build.reason)}>
47+
<InfoIcon
48+
css={(theme) => ({
49+
color: theme.palette.info.light,
50+
})}
51+
className="size-icon-xs -mt-px"
52+
/>
53+
</Tooltip>
54+
)}
3955
</div>
4056
<div
4157
css={{

site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/BuildAuditDescription.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ export const BuildAuditDescription: FC<BuildAuditDescriptionProps> = ({
1212
}) => {
1313
const workspaceName = auditLog.additional_fields?.workspace_name?.trim();
1414
// workspaces can be started/stopped/deleted by a user, or kicked off automatically by Coder
15+
const systemReasons = ["autostart", "autostop", "dormancy"];
1516
const user =
1617
auditLog.additional_fields?.build_reason &&
17-
auditLog.additional_fields?.build_reason !== "initiator"
18+
systemReasons.includes(auditLog.additional_fields?.build_reason)
1819
? "Coder automatically"
1920
: auditLog.user
2021
? auditLog.user.username.trim()

site/src/pages/AuditPage/AuditLogRow/AuditLogRow.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
determineGroupDiff,
2222
determineIdPSyncMappingDiff,
2323
} from "./AuditLogDiff/auditUtils";
24+
import { getDisplayInitiatorBuildReason } from "utils/workspace";
2425

2526
const httpStatusColor = (httpStatus: number): ThemeRole => {
2627
// Treat server errors (500) as errors
@@ -182,10 +183,10 @@ export const AuditLogRow: FC<AuditLogRowProps> = ({
182183
</Link>
183184
</div>
184185
)}
185-
{auditLog.additional_fields?.reason && (
186+
{getDisplayInitiatorBuildReason(auditLog.additional_fields?.build_reason) && auditLog.action === 'start' && (
186187
<div>
187188
<h4 css={styles.auditLogInfoHeader}>Reason:</h4>
188-
<div>{auditLog.additional_fields?.reason}</div>
189+
<div>{getDisplayInitiatorBuildReason(auditLog.additional_fields?.build_reason)}</div>
189190
</div>
190191
)}
191192
</div>
@@ -219,6 +220,12 @@ export const AuditLogRow: FC<AuditLogRowProps> = ({
219220
</strong>
220221
</span>
221222
)}
223+
{getDisplayInitiatorBuildReason(auditLog.additional_fields?.build_reason) && auditLog.action === 'start' && (
224+
<span css={styles.auditLogInfo}>
225+
<span>Reason: </span>
226+
<strong>{getDisplayInitiatorBuildReason(auditLog.additional_fields?.build_reason)}</strong>
227+
</span>
228+
)}
222229
</Stack>
223230
)}
224231
</Stack>

site/src/utils/workspace.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,24 @@ export const getDisplayWorkspaceBuildInitiatedBy = (
7878
): string | undefined => {
7979
switch (build.reason) {
8080
case "initiator":
81+
case "dashboard":
82+
case "cli":
83+
case "ssh_connection":
84+
case "vscode_connection":
85+
case "jetbrains_connection":
8186
return build.initiator_name;
8287
case "autostart":
8388
case "autostop":
8489
case "dormancy":
8590
return "Coder";
91+
}
92+
return undefined;
93+
};
94+
95+
export const getDisplayInitiatorBuildReason = (buildReason: string): string | undefined => {
96+
switch (buildReason) {
97+
case "initiator":
98+
return "API";
8699
case "dashboard":
87100
return "Dashboard";
88101
case "cli":

0 commit comments

Comments
 (0)