Skip to content

Commit ab96aab

Browse files
committed
Move unhealthy warning
1 parent 0b28628 commit ab96aab

File tree

4 files changed

+58
-42
lines changed

4 files changed

+58
-42
lines changed

site/src/pages/WorkspacePage/Workspace.stories.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,24 @@ import { ProxyContext, getPreferredProxy } from "contexts/ProxyContext";
1010
import { DashboardProviderContext } from "components/Dashboard/DashboardProvider";
1111
import { WorkspaceBuildLogsSection } from "pages/WorkspacePage/WorkspaceBuildLogsSection";
1212
import { getWorkspaceResolveAutostartQueryKey } from "api/queries/workspaceQuota";
13+
import { WorkspacePermissions } from "./permissions";
1314

1415
const MockedAppearance = {
1516
config: Mocks.MockAppearanceConfig,
1617
isPreview: false,
1718
setPreview: () => {},
1819
};
1920

21+
const permissions: WorkspacePermissions = {
22+
readWorkspace: true,
23+
updateWorkspace: true,
24+
updateTemplate: true,
25+
viewDeploymentValues: true,
26+
};
27+
2028
const meta: Meta<typeof Workspace> = {
2129
title: "pages/WorkspacePage/Workspace",
30+
args: { permissions },
2231
component: Workspace,
2332
decorators: [
2433
(Story) => (
@@ -69,7 +78,6 @@ export const Running: Story = {
6978
workspace: Mocks.MockWorkspace,
7079
handleStart: action("start"),
7180
handleStop: action("stop"),
72-
canUpdateWorkspace: true,
7381
workspaceErrors: {},
7482
buildInfo: Mocks.MockBuildInfo,
7583
template: Mocks.MockTemplate,
@@ -79,7 +87,10 @@ export const Running: Story = {
7987
export const WithoutUpdateAccess: Story = {
8088
args: {
8189
...Running.args,
82-
canUpdateWorkspace: false,
90+
permissions: {
91+
...permissions,
92+
updateWorkspace: false,
93+
},
8394
},
8495
};
8596

site/src/pages/WorkspacePage/Workspace.tsx

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import HubOutlined from "@mui/icons-material/HubOutlined";
2727
import { ResourcesSidebar } from "./ResourcesSidebar";
2828
import { ResourceCard } from "components/Resources/ResourceCard";
2929
import { WorkspaceNotifications } from "./WorkspaceNotifications";
30+
import { WorkspacePermissions } from "./permissions";
3031

3132
export type WorkspaceError =
3233
| "getBuildsError"
@@ -48,7 +49,6 @@ export interface WorkspaceProps {
4849
isUpdating: boolean;
4950
isRestarting: boolean;
5051
workspace: TypesGen.Workspace;
51-
canUpdateWorkspace: boolean;
5252
canChangeVersions: boolean;
5353
hideSSHButton?: boolean;
5454
hideVSCodeDesktopButton?: boolean;
@@ -61,6 +61,7 @@ export interface WorkspaceProps {
6161
handleBuildRetryDebug: () => void;
6262
buildLogs?: React.ReactNode;
6363
latestVersion?: TypesGen.TemplateVersion;
64+
permissions: WorkspacePermissions;
6465
}
6566

6667
/**
@@ -79,7 +80,6 @@ export const Workspace: FC<WorkspaceProps> = ({
7980
workspace,
8081
isUpdating,
8182
isRestarting,
82-
canUpdateWorkspace,
8383
canChangeVersions,
8484
workspaceErrors,
8585
hideSSHButton,
@@ -92,6 +92,7 @@ export const Workspace: FC<WorkspaceProps> = ({
9292
handleBuildRetryDebug,
9393
buildLogs,
9494
latestVersion,
95+
permissions,
9596
}) => {
9697
const navigate = useNavigate();
9798
const { saveLocal, getLocal } = useLocalStorage();
@@ -190,7 +191,7 @@ export const Workspace: FC<WorkspaceProps> = ({
190191
canChangeVersions={canChangeVersions}
191192
isUpdating={isUpdating}
192193
isRestarting={isRestarting}
193-
canUpdateWorkspace={canUpdateWorkspace}
194+
canUpdateWorkspace={permissions.updateWorkspace}
194195
/>
195196

196197
<div
@@ -239,6 +240,8 @@ export const Workspace: FC<WorkspaceProps> = ({
239240
<WorkspaceNotifications
240241
workspace={workspace}
241242
latestVersion={latestVersion}
243+
permissions={permissions}
244+
onRestartWorkspace={handleRestart}
242245
/>
243246

244247
{Boolean(workspaceErrors.buildError) && (
@@ -252,40 +255,12 @@ export const Workspace: FC<WorkspaceProps> = ({
252255
/>
253256
)}
254257

255-
{workspace.latest_build.status === "running" &&
256-
!workspace.health.healthy && (
257-
<Alert
258-
severity="warning"
259-
actions={
260-
canUpdateWorkspace && (
261-
<Button
262-
variant="text"
263-
size="small"
264-
onClick={() => {
265-
handleRestart();
266-
}}
267-
>
268-
Restart
269-
</Button>
270-
)
271-
}
272-
>
273-
<AlertTitle>Workspace is unhealthy</AlertTitle>
274-
<AlertDetail>
275-
Your workspace is running but{" "}
276-
{workspace.health.failing_agents.length > 1
277-
? `${workspace.health.failing_agents.length} agents are unhealthy`
278-
: `1 agent is unhealthy`}
279-
.
280-
</AlertDetail>
281-
</Alert>
282-
)}
283-
284258
{workspace.latest_build.status === "deleted" && (
285259
<WorkspaceDeletedBanner
286260
handleClick={() => navigate(`/templates`)}
287261
/>
288262
)}
263+
289264
{/* <DormantWorkspaceBanner/> determines its own visibility */}
290265
<DormantWorkspaceBanner
291266
workspace={workspace}
@@ -360,8 +335,8 @@ export const Workspace: FC<WorkspaceProps> = ({
360335
agent={agent}
361336
workspace={workspace}
362337
sshPrefix={sshPrefix}
363-
showApps={canUpdateWorkspace}
364-
showBuiltinApps={canUpdateWorkspace}
338+
showApps={permissions.updateWorkspace}
339+
showBuiltinApps={permissions.updateWorkspace}
365340
hideSSHButton={hideSSHButton}
366341
hideVSCodeDesktopButton={hideVSCodeDesktopButton}
367342
serverVersion={buildInfo?.version || ""}

site/src/pages/WorkspacePage/WorkspaceNotifications.tsx

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
import AlertTitle from "@mui/material/AlertTitle";
2+
import Button from "@mui/material/Button";
23
import { workspaceResolveAutostart } from "api/queries/workspaceQuota";
34
import { TemplateVersion, Workspace } from "api/typesGenerated";
45
import { Alert, AlertDetail } from "components/Alert/Alert";
56
import { FC } from "react";
67
import { useQuery } from "react-query";
8+
import { WorkspacePermissions } from "./permissions";
79

810
type WorkspaceNotificationsProps = {
911
workspace: Workspace;
12+
permissions: WorkspacePermissions;
13+
onRestartWorkspace: () => void;
1014
latestVersion?: TemplateVersion;
1115
};
1216

1317
export const WorkspaceNotifications: FC<WorkspaceNotificationsProps> = (
1418
props,
1519
) => {
16-
const { workspace, latestVersion } = props;
20+
const { workspace, latestVersion, permissions, onRestartWorkspace } = props;
1721

1822
// Outdated
1923
const canAutostartResponse = useQuery(
@@ -47,6 +51,33 @@ export const WorkspaceNotifications: FC<WorkspaceNotificationsProps> = (
4751
<AlertDetail>{latestVersion.message}</AlertDetail>
4852
</Alert>
4953
))}
54+
55+
{workspace.latest_build.status === "running" &&
56+
!workspace.health.healthy && (
57+
<Alert
58+
severity="warning"
59+
actions={
60+
permissions.updateWorkspace && (
61+
<Button
62+
variant="text"
63+
size="small"
64+
onClick={onRestartWorkspace}
65+
>
66+
Restart
67+
</Button>
68+
)
69+
}
70+
>
71+
<AlertTitle>Workspace is unhealthy</AlertTitle>
72+
<AlertDetail>
73+
Your workspace is running but{" "}
74+
{workspace.health.failing_agents.length > 1
75+
? `${workspace.health.failing_agents.length} agents are unhealthy`
76+
: `1 agent is unhealthy`}
77+
.
78+
</AlertDetail>
79+
</Alert>
80+
)}
5081
</>
5182
);
5283
};

site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export const WorkspaceReadyPage = ({
5858
// Debug mode
5959
const { data: deploymentValues } = useQuery({
6060
...deploymentConfig(),
61-
enabled: permissions?.viewDeploymentValues,
61+
enabled: permissions.viewDeploymentValues,
6262
});
6363

6464
// Build logs
@@ -99,7 +99,7 @@ export const WorkspaceReadyPage = ({
9999
}, []);
100100

101101
// Change version
102-
const canChangeVersions = Boolean(permissions?.updateTemplate);
102+
const canChangeVersions = Boolean(permissions.updateTemplate);
103103
const [changeVersionDialogOpen, setChangeVersionDialogOpen] = useState(false);
104104
const changeVersionMutation = useMutation(
105105
changeVersion(workspace, queryClient),
@@ -116,15 +116,14 @@ export const WorkspaceReadyPage = ({
116116
});
117117

118118
// Update workspace
119-
const canUpdateWorkspace = Boolean(permissions?.updateWorkspace);
120119
const [isConfirmingUpdate, setIsConfirmingUpdate] = useState(false);
121120
const updateWorkspaceMutation = useMutation(
122121
updateWorkspace(workspace, queryClient),
123122
);
124123

125124
// If a user can update the template then they can force a delete
126125
// (via orphan).
127-
const canUpdateTemplate = Boolean(permissions?.updateTemplate);
126+
const canUpdateTemplate = Boolean(permissions.updateTemplate);
128127
const [isConfirmingDelete, setIsConfirmingDelete] = useState(false);
129128
const deleteWorkspaceMutation = useMutation(
130129
deleteWorkspace(workspace, queryClient),
@@ -181,6 +180,7 @@ export const WorkspaceReadyPage = ({
181180
</Helmet>
182181

183182
<Workspace
183+
permissions={permissions}
184184
isUpdating={updateWorkspaceMutation.isLoading}
185185
isRestarting={isRestarting}
186186
workspace={workspace}
@@ -217,7 +217,6 @@ export const WorkspaceReadyPage = ({
217217
displayError(message);
218218
}
219219
}}
220-
canUpdateWorkspace={canUpdateWorkspace}
221220
latestVersion={latestVersion}
222221
canChangeVersions={canChangeVersions}
223222
hideSSHButton={featureVisibility["browser_only"]}

0 commit comments

Comments
 (0)