diff --git a/api-contracts/openapi/components/schemas/event.yaml b/api-contracts/openapi/components/schemas/event.yaml index f24a4d9e2..39602fb49 100644 --- a/api-contracts/openapi/components/schemas/event.yaml +++ b/api-contracts/openapi/components/schemas/event.yaml @@ -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: diff --git a/api-contracts/openapi/components/schemas/workflow_run.yaml b/api-contracts/openapi/components/schemas/workflow_run.yaml index db08ccb13..4aee9e18d 100644 --- a/api-contracts/openapi/components/schemas/workflow_run.yaml +++ b/api-contracts/openapi/components/schemas/workflow_run.yaml @@ -302,6 +302,8 @@ WorkflowRunsMetricsCounts: type: integer QUEUED: type: integer + CANCELLED: + type: integer WorkflowRunsMetrics: type: object diff --git a/api/v1/server/handlers/workflows/metrics_runs.go b/api/v1/server/handlers/workflows/metrics_runs.go index ab384a6f9..874a6bb47 100644 --- a/api/v1/server/handlers/workflows/metrics_runs.go +++ b/api/v1/server/handlers/workflows/metrics_runs.go @@ -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 diff --git a/api/v1/server/oas/gen/openapi.gen.go b/api/v1/server/oas/gen/openapi.gen.go index 334c0c7a7..a4cf81d67 100644 --- a/api/v1/server/oas/gen/openapi.gen.go +++ b/api/v1/server/oas/gen/openapi.gen.go @@ -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 diff --git a/api/v1/server/oas/transformers/event.go b/api/v1/server/oas/transformers/event.go index ff7302ea7..04b899f31 100644 --- a/api/v1/server/oas/transformers/event.go +++ b/api/v1/server/oas/transformers/event.go @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml index c5787a3b5..cc0b35a8f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/frontend/app/src/components/ui/badge.tsx b/frontend/app/src/components/ui/badge.tsx index c4c766eb3..116c99b86 100644 --- a/frontend/app/src/components/ui/badge.tsx +++ b/frontend/app/src/components/ui/badge.tsx @@ -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: diff --git a/frontend/app/src/lib/api/generated/data-contracts.ts b/frontend/app/src/lib/api/generated/data-contracts.ts index 1e05548c4..8885663f9 100644 --- a/frontend/app/src/lib/api/generated/data-contracts.ts +++ b/frontend/app/src/lib/api/generated/data-contracts.ts @@ -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 { diff --git a/frontend/app/src/pages/main/events/components/event-columns.tsx b/frontend/app/src/pages/main/events/components/event-columns.tsx index 7a33d55d9..f9b1611f0 100644 --- a/frontend/app/src/pages/main/events/components/event-columns.tsx +++ b/frontend/app/src/pages/main/events/components/event-columns.tsx @@ -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 && ( { if (!open) { setPopoverOpen(undefined); @@ -347,6 +350,26 @@ function WorkflowRunSummary({ event }: { event: Event }) { )} + {numCancelled > 0 && ( + { + if (!open) { + setPopoverOpen(undefined); + } + }} + > + + setPopoverOpen('cancelled')} + > + {numCancelled} Cancelled + + + + )} ); } diff --git a/frontend/app/src/pages/main/events/index.tsx b/frontend/app/src/pages/main/events/index.tsx index a8ddb47d1..58e430853 100644 --- a/frontend/app/src/pages/main/events/index.tsx +++ b/frontend/app/src/pages/main/events/index.tsx @@ -336,6 +336,10 @@ function EventsTable() { value: WorkflowRunStatus.FAILED, label: 'Failed', }, + { + value: WorkflowRunStatus.CANCELLED, + label: 'Cancelled', + }, { value: WorkflowRunStatus.RUNNING, label: 'Running', diff --git a/frontend/app/src/pages/main/workflow-runs/components/run-statuses.tsx b/frontend/app/src/pages/main/workflow-runs/components/run-statuses.tsx index 039135c5c..2daf273ff 100644 --- a/frontend/app/src/pages/main/workflow-runs/components/run-statuses.tsx +++ b/frontend/app/src/pages/main/workflow-runs/components/run-statuses.tsx @@ -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 = { @@ -27,7 +32,7 @@ const RUN_STATUS_VARIANTS: Record = { }, 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({ diff --git a/frontend/app/src/pages/main/workflow-runs/components/workflow-runs-metrics.tsx b/frontend/app/src/pages/main/workflow-runs/components/workflow-runs-metrics.tsx index eb922477b..a37ca791a 100644 --- a/frontend/app/src/pages/main/workflow-runs/components/workflow-runs-metrics.tsx +++ b/frontend/app/src/pages/main/workflow-runs/components/workflow-runs-metrics.tsx @@ -31,7 +31,8 @@ export const WorkflowRunsMetricsView: React.FC = ({ (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 = ({ 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 (
= ({ > {counts?.FAILED?.toLocaleString('en-US')} Failed ({failedPercentage}%) + onClick(WorkflowRunStatus.CANCELLED)} + > + {counts?.CANCELLED?.toLocaleString('en-US')} Cancelled ( + {cancelledPercentage}%) + 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, diff --git a/pkg/repository/prisma/dbsqlc/workflow_runs.sql.go b/pkg/repository/prisma/dbsqlc/workflow_runs.sql.go index 5b7e72c38..9f43b006e 100644 --- a/pkg/repository/prisma/dbsqlc/workflow_runs.sql.go +++ b/pkg/repository/prisma/dbsqlc/workflow_runs.sql.go @@ -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 }