Skip to content

Commit 82f110f

Browse files
committed
ui/jobs: jobs paused for a reason now show the reason
The UI was previously assuming extra information about why a job paused, if available, would be in the 'error' field, however pause reasons are a status, and thus in the running_status field, so the UI should render the extra detail for a paused job regardless of which field it is in. Additionally jobs paused for a reason now display their status with the 'warning' (yellow) style, as a job pausing for a reason is most commonly associated with some sort of condition or problem requiring operator intervention, such as disk capacity exhaustion or cluster unhealthiness. Release note (ui change): Jobs which are paused for a specific reason now show that reason, and are highlighted in the UI. Epic: none.
1 parent 8c0fdd4 commit 82f110f

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

pkg/ui/workspaces/cluster-ui/src/jobs/util/jobOptions.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ export function jobToVisual(job: Job): JobStatusVisual {
4545
return JobStatusVisual.BadgeWithMessage;
4646
case JOB_STATUS_CANCELED:
4747
case JOB_STATUS_CANCEL_REQUESTED:
48+
case JOB_STATUS_PAUSE_REQUESTED:
4849
case JOB_STATUS_PAUSED:
49-
return job.error === ""
50+
return !job.error && !job.running_status
5051
? JobStatusVisual.BadgeOnly
5152
: JobStatusVisual.BadgeWithErrorMessage;
52-
case JOB_STATUS_PAUSE_REQUESTED:
5353
case JOB_STATUS_REVERTING:
5454
default:
5555
return JobStatusVisual.BadgeOnly;
@@ -68,7 +68,7 @@ export const JOB_STATUS_FAILED = "failed";
6868
export const JOB_STATUS_CANCELED = "canceled";
6969
export const JOB_STATUS_CANCEL_REQUESTED = "cancel-requested";
7070
export const JOB_STATUS_PAUSED = "paused";
71-
export const JOB_STATUS_PAUSE_REQUESTED = "paused-requested";
71+
export const JOB_STATUS_PAUSE_REQUESTED = "pause-requested";
7272
export const JOB_STATUS_RUNNING = "running";
7373
export const JOB_STATUS_PENDING = "pending";
7474
export const JOB_STATUS_REVERTING = "reverting";
@@ -111,7 +111,10 @@ export function jobHasOneOfStatuses(job: Job, ...statuses: string[]): boolean {
111111
return statuses.indexOf(job.status) !== -1;
112112
}
113113

114-
export const jobStatusToBadgeStatus = (status: string): BadgeStatus => {
114+
export const jobStatusToBadgeStatus = (
115+
status: string,
116+
advisory?: string,
117+
): BadgeStatus => {
115118
switch (status) {
116119
case JOB_STATUS_SUCCEEDED:
117120
return "success";
@@ -123,10 +126,14 @@ export const jobStatusToBadgeStatus = (status: string): BadgeStatus => {
123126
return "info";
124127
case JOB_STATUS_PENDING:
125128
return "warning";
129+
case JOB_STATUS_PAUSE_REQUESTED:
130+
case JOB_STATUS_PAUSED:
131+
if (advisory) {
132+
return "warning";
133+
}
134+
return "default";
126135
case JOB_STATUS_CANCELED:
127136
case JOB_STATUS_CANCEL_REQUESTED:
128-
case JOB_STATUS_PAUSED:
129-
case JOB_STATUS_PAUSE_REQUESTED:
130137
case JOB_STATUS_REVERTING:
131138
default:
132139
return "default";

pkg/ui/workspaces/cluster-ui/src/jobs/util/jobStatus.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import React from "react";
1010
import styles from "../jobs.module.scss";
1111

1212
import { Duration } from "./duration";
13-
import { JobStatusVisual, jobToVisual } from "./jobOptions";
13+
import { JOB_STATUS_FAILED, JobStatusVisual, jobToVisual } from "./jobOptions";
1414
import {
1515
JobStatusBadge,
1616
ProgressBar,
@@ -35,10 +35,14 @@ export const JobStatus: React.FC<JobStatusProps> = ({
3535
hideDuration = false,
3636
}) => {
3737
const visualType = jobToVisual(job);
38-
3938
switch (visualType) {
4039
case JobStatusVisual.BadgeOnly:
41-
return <JobStatusBadge jobStatus={job.status} />;
40+
return (
41+
<JobStatusBadge
42+
jobStatus={job.status}
43+
advisory={job.error || job.running_status}
44+
/>
45+
);
4246
case JobStatusVisual.BadgeWithDuration:
4347
return (
4448
<div>
@@ -68,7 +72,10 @@ export const JobStatus: React.FC<JobStatusProps> = ({
6872
case JobStatusVisual.BadgeWithMessage:
6973
return (
7074
<div>
71-
<JobStatusBadge jobStatus={job.status} />
75+
<JobStatusBadge
76+
jobStatus={job.status}
77+
advisory={job.error || job.running_status}
78+
/>
7279
<span className={cx("jobs-table__running-status")}>
7380
{job.running_status}
7481
</span>
@@ -77,11 +84,14 @@ export const JobStatus: React.FC<JobStatusProps> = ({
7784
case JobStatusVisual.BadgeWithErrorMessage:
7885
return (
7986
<div>
80-
<JobStatusBadge jobStatus={job.status} />
87+
<JobStatusBadge
88+
jobStatus={job.status}
89+
advisory={job.error || job.running_status}
90+
/>
8191
{!compact && (
8292
<InlineAlert
83-
title={job.error}
84-
intent="danger"
93+
title={job.error || job.running_status}
94+
intent={job.status === JOB_STATUS_FAILED ? "danger" : "warning"}
8595
className={cx("inline-message")}
8696
/>
8797
)}

pkg/ui/workspaces/cluster-ui/src/jobs/util/progressBar.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ const cx = classNames.bind(styles);
1717

1818
type Job = cockroach.server.serverpb.IJobResponse;
1919

20-
export class JobStatusBadge extends React.PureComponent<{ jobStatus: string }> {
20+
export class JobStatusBadge extends React.PureComponent<{
21+
jobStatus: string;
22+
advisory?: string;
23+
}> {
2124
render(): React.ReactElement {
2225
const jobStatus = this.props.jobStatus;
23-
const badgeStatus = jobStatusToBadgeStatus(jobStatus);
26+
const badgeStatus = jobStatusToBadgeStatus(jobStatus, this.props.advisory);
2427
return <Badge status={badgeStatus} text={jobStatus} />;
2528
}
2629
}

0 commit comments

Comments
 (0)