Feat canceled state (#1228)

* feat: add cancel state to event list

* ops: db conns

* feat: add cancelled status to wfr

* feat: mark cancelled workflow runs
This commit is contained in:
Gabe Ruttner
2025-01-28 10:31:04 -08:00
committed by GitHub
parent 769fed7d97
commit 13024c09bd
17 changed files with 272 additions and 188 deletions

View File

@@ -115,6 +115,10 @@ EventWorkflowRunSummary:
type: integer
format: int64
description: The number of failed runs.
cancelled:
type: integer
format: int64
description: The number of cancelled runs.
EventKeyList:
properties:

View File

@@ -302,6 +302,8 @@ WorkflowRunsMetricsCounts:
type: integer
QUEUED:
type: integer
CANCELLED:
type: integer
WorkflowRunsMetrics:
type: object

View File

@@ -78,6 +78,7 @@ func (t *WorkflowService) WorkflowRunGetMetrics(ctx echo.Context, request gen.Wo
queued := int(workflowRunsMetricsCount.QUEUED)
running := int(workflowRunsMetricsCount.RUNNING)
succeeded := int(workflowRunsMetricsCount.SUCCEEDED)
cancelled := int(workflowRunsMetricsCount.CANCELLED)
return gen.WorkflowRunGetMetrics200JSONResponse(
gen.WorkflowRunsMetrics{
@@ -87,6 +88,7 @@ func (t *WorkflowService) WorkflowRunGetMetrics(ctx echo.Context, request gen.Wo
QUEUED: &queued,
RUNNING: &running,
SUCCEEDED: &succeeded,
CANCELLED: &cancelled,
},
},
), nil

View File

@@ -470,6 +470,9 @@ type EventSearch = string
// EventWorkflowRunSummary defines model for EventWorkflowRunSummary.
type EventWorkflowRunSummary struct {
// Cancelled The number of cancelled runs.
Cancelled *int64 `json:"cancelled,omitempty"`
// Failed The number of failed runs.
Failed *int64 `json:"failed,omitempty"`
@@ -1389,6 +1392,7 @@ type WorkflowRunsMetrics struct {
// WorkflowRunsMetricsCounts defines model for WorkflowRunsMetricsCounts.
type WorkflowRunsMetricsCounts struct {
CANCELLED *int `json:"CANCELLED,omitempty"`
FAILED *int `json:"FAILED,omitempty"`
PENDING *int `json:"PENDING,omitempty"`
QUEUED *int `json:"QUEUED,omitempty"`
@@ -10837,173 +10841,173 @@ var swaggerSpec = []string{
"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",
"//8g0bHh1QICAA==",
"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",
"4B657svty/8LAAD//1LInh9SAwIA",
}
// GetSwagger returns the content of the embedded swagger specification file

View File

@@ -65,6 +65,7 @@ func ToEventFromSQLC(eventRow *dbsqlc.ListEventsRow) (*gen.Event, error) {
Succeeded: &eventRow.Succeededruns,
Pending: &eventRow.Pendingruns,
Queued: &eventRow.Queuedruns,
Cancelled: &eventRow.Cancelledruns,
}
return res, nil

View File

@@ -2,7 +2,7 @@ version: "3.8"
services:
postgres:
image: postgres:15.6
command: postgres -c 'max_connections=200'
command: postgres -c 'max_connections=500'
restart: always
environment:
- POSTGRES_USER=hatchet

View File

@@ -14,6 +14,8 @@ const badgeVariants = cva(
destructive:
'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',
outline: 'text-foreground',
outlineDestructive:
'border border-destructive rounded-sm px-1 font-normal text-red-800 dark:text-red-300 bg-transparent',
successful:
'border-transparent rounded-sm px-1 font-normal text-green-800 dark:text-green-300 bg-green-500/20 ring-green-500/30',
failed:

View File

@@ -534,6 +534,11 @@ export interface EventWorkflowRunSummary {
* @format int64
*/
failed?: number;
/**
* The number of cancelled runs.
* @format int64
*/
cancelled?: number;
}
export interface Event {
@@ -1143,6 +1148,7 @@ export interface WorkflowRunsMetricsCounts {
SUCCEEDED?: number;
FAILED?: number;
QUEUED?: number;
CANCELLED?: number;
}
export interface WorkflowRunsMetrics {

View File

@@ -151,7 +151,7 @@ function WorkflowRunSummary({ event }: { event: Event }) {
invariant(tenant);
const [hoverCardOpen, setPopoverOpen] = useState<
'failed' | 'succeeded' | 'running' | 'queued' | 'pending'
'failed' | 'succeeded' | 'running' | 'queued' | 'pending' | 'cancelled'
>();
const numFailed = event.workflowRunSummary?.failed || 0;
@@ -159,6 +159,7 @@ function WorkflowRunSummary({ event }: { event: Event }) {
const numRunning = event.workflowRunSummary?.running || 0;
const numPending = event.workflowRunSummary?.pending || 0;
const numQueued = event.workflowRunSummary?.queued || 0;
const numCancelled = event.workflowRunSummary?.cancelled || 0;
const listWorkflowRunsQuery = useQuery({
...queries.workflowRuns.list(tenant.metadata.id, {
@@ -188,6 +189,9 @@ function WorkflowRunSummary({ event }: { event: Event }) {
if (hoverCardOpen == 'queued') {
return run.status == 'QUEUED';
}
if (hoverCardOpen == 'cancelled') {
return run.status == 'CANCELLED';
}
}
return false;
@@ -219,7 +223,6 @@ function WorkflowRunSummary({ event }: { event: Event }) {
{numFailed > 0 && (
<Popover
open={hoverCardOpen == 'failed'}
// open={true}
onOpenChange={(open) => {
if (!open) {
setPopoverOpen(undefined);
@@ -347,6 +350,26 @@ function WorkflowRunSummary({ event }: { event: Event }) {
</PopoverContent>
</Popover>
)}
{numCancelled > 0 && (
<Popover
open={hoverCardOpen == 'cancelled'}
onOpenChange={(open) => {
if (!open) {
setPopoverOpen(undefined);
}
}}
>
<PopoverTrigger>
<Badge
variant="outlineDestructive"
className="cursor-pointer"
onClick={() => setPopoverOpen('cancelled')}
>
{numCancelled} Cancelled
</Badge>
</PopoverTrigger>
</Popover>
)}
</div>
);
}

View File

@@ -336,6 +336,10 @@ function EventsTable() {
value: WorkflowRunStatus.FAILED,
label: 'Failed',
},
{
value: WorkflowRunStatus.CANCELLED,
label: 'Cancelled',
},
{
value: WorkflowRunStatus.RUNNING,
label: 'Running',

View File

@@ -13,7 +13,12 @@ type RunStatusType =
type RunStatusVariant = {
text: string;
variant: 'inProgress' | 'successful' | 'failed' | 'outline';
variant:
| 'inProgress'
| 'successful'
| 'failed'
| 'outline'
| 'outlineDestructive';
};
const RUN_STATUS_VARIANTS: Record<RunStatusType, RunStatusVariant> = {
@@ -27,7 +32,7 @@ const RUN_STATUS_VARIANTS: Record<RunStatusType, RunStatusVariant> = {
},
CANCELLED: {
text: 'Cancelled',
variant: 'failed',
variant: 'outlineDestructive',
},
CANCELLING: {
text: 'Cancelling',
@@ -121,6 +126,7 @@ const indicatorVariants = {
failed: 'border-transparent rounded-full bg-red-500',
inProgress: 'border-transparent rounded-full bg-yellow-500',
outline: 'border-transparent rounded-full bg-muted',
outlineDestructive: 'border-transparent rounded-full bg-red-500',
};
export function RunIndicator({

View File

@@ -31,7 +31,8 @@ export const WorkflowRunsMetricsView: React.FC<WorkflowRunsMetricsProps> = ({
(counts?.RUNNING ?? 0) +
(counts?.SUCCEEDED ?? 0) +
(counts?.QUEUED ?? 0) +
(counts?.FAILED ?? 0);
(counts?.FAILED ?? 0) +
(counts?.CANCELLED ?? 0);
const succeededPercentage = calculatePercentage(
counts?.SUCCEEDED ?? 0,
@@ -41,7 +42,10 @@ export const WorkflowRunsMetricsView: React.FC<WorkflowRunsMetricsProps> = ({
const failedPercentage = calculatePercentage(counts?.FAILED ?? 0, total);
const pendingPercentage = calculatePercentage(counts?.PENDING ?? 0, total);
const queuedPercentage = calculatePercentage(counts?.QUEUED ?? 0, total);
const cancelledPercentage = calculatePercentage(
counts?.CANCELLED ?? 0,
total,
);
return (
<dl className="flex flex-row justify-start gap-6">
<Badge
@@ -67,6 +71,14 @@ export const WorkflowRunsMetricsView: React.FC<WorkflowRunsMetricsProps> = ({
>
{counts?.FAILED?.toLocaleString('en-US')} Failed ({failedPercentage}%)
</Badge>
<Badge
variant="outlineDestructive"
className="cursor-pointer text-sm px-2 py-1 w-fit"
onClick={() => onClick(WorkflowRunStatus.CANCELLED)}
>
{counts?.CANCELLED?.toLocaleString('en-US')} Cancelled (
{cancelledPercentage}%)
</Badge>
<Badge
variant="outline"
className="cursor-pointer rounded-sm font-normal text-sm px-2 py-1 w-fit"

View File

@@ -467,6 +467,9 @@ type EventSearch = string
// EventWorkflowRunSummary defines model for EventWorkflowRunSummary.
type EventWorkflowRunSummary struct {
// Cancelled The number of cancelled runs.
Cancelled *int64 `json:"cancelled,omitempty"`
// Failed The number of failed runs.
Failed *int64 `json:"failed,omitempty"`
@@ -1386,6 +1389,7 @@ type WorkflowRunsMetrics struct {
// WorkflowRunsMetricsCounts defines model for WorkflowRunsMetricsCounts.
type WorkflowRunsMetricsCounts struct {
CANCELLED *int `json:"CANCELLED,omitempty"`
FAILED *int `json:"FAILED,omitempty"`
PENDING *int `json:"PENDING,omitempty"`
QUEUED *int `json:"QUEUED,omitempty"`

View File

@@ -185,7 +185,8 @@ event_run_counts AS (
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS queuedRuns,
COUNT(CASE WHEN runs."status" = 'RUNNING' THEN 1 END) AS runningRuns,
COUNT(CASE WHEN runs."status" = 'SUCCEEDED' THEN 1 END) AS succeededRuns,
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS failedRuns
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS failedRuns,
COUNT(CASE WHEN runs."status" = 'CANCELLED' THEN 1 END) AS cancelledRuns
FROM
filtered_events
JOIN
@@ -203,7 +204,8 @@ SELECT
COALESCE(erc.queuedRuns, 0) AS queuedRuns,
COALESCE(erc.runningRuns, 0) AS runningRuns,
COALESCE(erc.succeededRuns, 0) AS succeededRuns,
COALESCE(erc.failedRuns, 0) AS failedRuns
COALESCE(erc.failedRuns, 0) AS failedRuns,
COALESCE(erc.cancelledRuns, 0) AS cancelledRuns
FROM
filtered_events fe
JOIN

View File

@@ -426,7 +426,8 @@ event_run_counts AS (
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS queuedRuns,
COUNT(CASE WHEN runs."status" = 'RUNNING' THEN 1 END) AS runningRuns,
COUNT(CASE WHEN runs."status" = 'SUCCEEDED' THEN 1 END) AS succeededRuns,
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS failedRuns
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS failedRuns,
COUNT(CASE WHEN runs."status" = 'CANCELLED' THEN 1 END) AS cancelledRuns
FROM
filtered_events
JOIN
@@ -444,7 +445,8 @@ SELECT
COALESCE(erc.queuedRuns, 0) AS queuedRuns,
COALESCE(erc.runningRuns, 0) AS runningRuns,
COALESCE(erc.succeededRuns, 0) AS succeededRuns,
COALESCE(erc.failedRuns, 0) AS failedRuns
COALESCE(erc.failedRuns, 0) AS failedRuns,
COALESCE(erc.cancelledRuns, 0) AS cancelledRuns
FROM
filtered_events fe
JOIN
@@ -476,6 +478,7 @@ type ListEventsRow struct {
Runningruns int64 `json:"runningruns"`
Succeededruns int64 `json:"succeededruns"`
Failedruns int64 `json:"failedruns"`
Cancelledruns int64 `json:"cancelledruns"`
}
func (q *Queries) ListEvents(ctx context.Context, db DBTX, arg ListEventsParams) ([]*ListEventsRow, error) {
@@ -514,6 +517,7 @@ func (q *Queries) ListEvents(ctx context.Context, db DBTX, arg ListEventsParams)
&i.Runningruns,
&i.Succeededruns,
&i.Failedruns,
&i.Cancelledruns,
); err != nil {
return nil, err
}

View File

@@ -99,7 +99,8 @@ SELECT
COUNT(CASE WHEN runs."status" = 'RUNNING' OR runs."status" = 'CANCELLING' THEN 1 END) AS "RUNNING",
COUNT(CASE WHEN runs."status" = 'SUCCEEDED' THEN 1 END) AS "SUCCEEDED",
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS "FAILED",
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS "QUEUED"
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS "QUEUED",
COUNT(CASE WHEN runs."status" = 'CANCELLED' THEN 1 END) AS "CANCELLED"
FROM
"WorkflowRun" as runs
LEFT JOIN
@@ -436,11 +437,13 @@ WITH jobRuns AS (
SET "status" = CASE
-- Final states are final, cannot be updated
WHEN "status" IN ('SUCCEEDED', 'FAILED') THEN "status"
-- We check for running first, because if a job run is running, then the workflow is running
-- We check for cancelled first, because if a job run is cancelled, then the workflow is cancelled
WHEN j.cancelledRuns > 0 THEN 'CANCELLED'
-- Then we check for running, because if a job run is running, then the workflow is running
WHEN j.runningRuns > 0 THEN 'RUNNING'
-- When at least one job run has failed or been cancelled, then the workflow is failed
WHEN j.failedRuns > 0 OR j.cancelledRuns > 0 THEN 'FAILED'
-- When all job runs have succeeded, then the workflow is succeeded
-- Then we check for failed, because if a job run has failed, then the workflow is failed
WHEN j.failedRuns > 0 THEN 'FAILED'
-- Then we check for succeeded, because if all job runs have succeeded, then the workflow is succeeded
WHEN j.succeededRuns > 0 AND j.pendingRuns = 0 AND j.runningRuns = 0 AND j.failedRuns = 0 AND j.cancelledRuns = 0 THEN 'SUCCEEDED'
ELSE "status"
END,

View File

@@ -3009,11 +3009,13 @@ WITH jobRuns AS (
SET "status" = CASE
-- Final states are final, cannot be updated
WHEN "status" IN ('SUCCEEDED', 'FAILED') THEN "status"
-- We check for running first, because if a job run is running, then the workflow is running
-- We check for cancelled first, because if a job run is cancelled, then the workflow is cancelled
WHEN j.cancelledRuns > 0 THEN 'CANCELLED'
-- Then we check for running, because if a job run is running, then the workflow is running
WHEN j.runningRuns > 0 THEN 'RUNNING'
-- When at least one job run has failed or been cancelled, then the workflow is failed
WHEN j.failedRuns > 0 OR j.cancelledRuns > 0 THEN 'FAILED'
-- When all job runs have succeeded, then the workflow is succeeded
-- Then we check for failed, because if a job run has failed, then the workflow is failed
WHEN j.failedRuns > 0 THEN 'FAILED'
-- Then we check for succeeded, because if all job runs have succeeded, then the workflow is succeeded
WHEN j.succeededRuns > 0 AND j.pendingRuns = 0 AND j.runningRuns = 0 AND j.failedRuns = 0 AND j.cancelledRuns = 0 THEN 'SUCCEEDED'
ELSE "status"
END,
@@ -3469,7 +3471,8 @@ SELECT
COUNT(CASE WHEN runs."status" = 'RUNNING' OR runs."status" = 'CANCELLING' THEN 1 END) AS "RUNNING",
COUNT(CASE WHEN runs."status" = 'SUCCEEDED' THEN 1 END) AS "SUCCEEDED",
COUNT(CASE WHEN runs."status" = 'FAILED' THEN 1 END) AS "FAILED",
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS "QUEUED"
COUNT(CASE WHEN runs."status" = 'QUEUED' THEN 1 END) AS "QUEUED",
COUNT(CASE WHEN runs."status" = 'CANCELLED' THEN 1 END) AS "CANCELLED"
FROM
"WorkflowRun" as runs
LEFT JOIN
@@ -3532,6 +3535,7 @@ type WorkflowRunsMetricsCountRow struct {
SUCCEEDED int64 `json:"SUCCEEDED"`
FAILED int64 `json:"FAILED"`
QUEUED int64 `json:"QUEUED"`
CANCELLED int64 `json:"CANCELLED"`
}
func (q *Queries) WorkflowRunsMetricsCount(ctx context.Context, db DBTX, arg WorkflowRunsMetricsCountParams) (*WorkflowRunsMetricsCountRow, error) {
@@ -3552,6 +3556,7 @@ func (q *Queries) WorkflowRunsMetricsCount(ctx context.Context, db DBTX, arg Wor
&i.SUCCEEDED,
&i.FAILED,
&i.QUEUED,
&i.CANCELLED,
)
return &i, err
}