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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",
- "IXpGECTeTHsamei9gssJQNoHC6aXpVQlpKzKWzlJGhbNkebX8RiGPoWlYWDRrM3If6UwbYaYt2ozbpKG",
- "oQXEolmbkXHqeRD6zUBnDe1Hz+gQ19kKNVcQ9m1XvWMtwAVLnClmwasYIP8TjTWits7xgklcxfVCnDN/",
- "RuPdNZnMK2NiAmN7+TIiMNYhtlZZJWgOo5Toly8+Ni39YVlF9UFRUOXNhi1dp3n+JxoPU82TiMdMzIF8",
- "B7J76Mg6ZR5A5iZDCLDhzjNBIcKzdlP/ySmybkcp0fKWht1bgugSiNOAaO2ImICEtFsMJoCk2GI99ATh",
- "bQV9D9OwHYnTzW9P5d49TOpZoM1yFbWxCWTl6Cz1XP5ixweRBJLtgplrRtk2SeXgsn9+Ojj/6vbc4fX5",
- "Of9rdH1y0u+f9k/dnvvleHDG/uBPGfRvnRZB1Su9W4OtM1S5q2aLxSTMfI/N9vuNKnXZE61Wr6MQF226",
- "+JXhLULT+OKlwCYm0hEXW2YAvPsbOJ5F0f2rL1KBZVVLjKZnKIStfDToEco+U/WByhN5kAbR1AlQCNs8",
- "yHNHTu0cdDjRoFE1MfXmLTS2ghK2VOeF3Ls0m+E2R9UZfIBB0aDy+ZqKl8H5lwu3594cD8/dntsfDi+G",
- "epmijJNdaqz2vwCBTpCI769/J5RkpZce/OMS98LiCC1vhqJzzd1QgwD1yf6nyx/IyV3MaPew54bwSf7r",
- "Q88N0zn7B3aPDvbpVa/IWYXOOs8e0cKJORVmEx9aXaYUWLRucPCpOvIHu5HzdWkdkiICAvXqSpsyi0uA",
- "MOHPBbkb+b7N3U0jsf5L760/IEmQp5HHYTq/tLtYMzqW1+td03r/a3WX5mMh7p/ELtbGAYd2l2g+orhK",
- "7+pRU3g4yUAtzNJTEaKT/0NAIHPzqKLSypaaUPEf0AG0IjoAmAzhBAWGdz7mpyYc2dTBmBNbwjpC5qqx",
- "Bm8/NtFvIEgNx88cPKF5OlctG/zlDjvMQVqYYsWuP6LQjx71274KW28Doh/M65DSRLOOOfCh7SL4N/0U",
- "/BtbBt1LFCpuNzmauSvvJEo86Ns6Eii3A2W/5HozqAqUdqvS9RYchjmPaY/D7PMSB2J5jMqRyLEpsaag",
- "Ujsa9GBIRsottvR+w8Az0TP/6uhcrFSzQ5t76SJ2iCVsCGszFAiU5paCyrW57OZXzyPZRvTUG7WApTy6",
- "VvxD+tf7cSIdwjgAz38rf02+JMUcg40rK9DD665Paf5pf79hvSW4Tas2GU6U7vZCu2TfsoVPQpdQLmfM",
- "XsNWLdwS6aglG4dmwCnE5Dox6FrXwzOHRA6Goc885cQ1FzskWs9juOmASEP0F9UGfBgSNEEwybRJoQCJ",
- "oAbu0KfGAo1hEIVTCXGDrOyt05/QzqBZ6yM48mbQTwOoUNqynrImkuq5hLvi2h9pbZxj88FvlXX5qzLM",
- "Cmdy+sfo5Fv/9Npkrc1mXq+L2JY6e1VXn3t81b8itKWN1fmCDdPwRDU0tn6m4ABs+vRSALBZ4shKObyp",
- "dHhNp7mcKGr95apEtwUXLo0csPKcM3JQK/e56iimS5mK43qb5QjOQTyLEjgKIrLiG1nhtqN/LOcmCBxE",
- "3DAjetib+Re8HYl3VNOy6GcnSeXCmtUB9UG0eaEoCKSngP1KK6JJYywRTexBLzF4jpaeegMsv57KV1NK",
- "PurDUfWpZwbCEAYmeMVnB/l6yxSmgzuPfHT9nZ+PcG70b5dTMD/3BSdZSl0Fc9Pq6bcllk67m9fNBl9m",
- "0VuhaNupwhIRGbqLdNFTyFB70BAYm+Se3r9lhgI/gcXH+oZ79pp8UmKQVGJSGyFJIPDBOICmzZXfs+h0",
- "LhAbyWQpVynDDGYKUFZRIAfp2iE2kL9a1Wz9Glyjjkk/jgovgIq1e0UOVIwIb0z2h0YaKHTHJ1EaEj24",
- "0AjlIqbTvE8Nhsp3zYIHmIUDkfB3y9qvnu2ilJhAXJAj2dPe8YTAxB6ZK3dI411qdmYJbcvWF5O2NYkT",
- "C1nTZsVZl5oVU9XH4AdndThlFJitrNbpTKDuOPFm6AG+SbnU/tK9VSImojcqfacark8gSZ5rpOja+FG5",
- "xmyGJWpuDAoSJB71t08TvW/DBb/IgNpnVdHGEILmmanAbF319R0UJzYNyUketFiPeJdiPSjdwAeYIPLc",
- "pvdI9rGiuy8owWQEuZJsT3tnoG2vlu7B/JZRALA0c4ZZBU2q5x7f3xpi3pboqQKZNhJyLtKlDWnY58bx",
- "u/OLu5uL4ff+0O3lPw6Pr/p3Z4Mfg6vceD44/3p3NfjRP727uGZ2rNFo8PWcm9evjodX7K/jk+/nFzdn",
- "/dOv3Co/OB+MvhUN9MP+1fB3bsBXbfV06Ivrq7th/8uwL/oM+8ok6tyjswva8qx/PMrGHPRP7z7/fnc9",
- "Ykuha/pydnFzN7w+v+NZZL73f79TnwwMTQSgWnOajmMUpCqunGKBw8HV4OT4rG60urcO8dcdR8OP/nkJ",
- "8S3eQsTftLUOmDxBZTl1JkxECoO+IdHEjUzBFzmstbQSzFkvvKvNtwdCEDwT5OGLmFykpGbU3OwwA9iJ",
- "YgJ9R1wts0H0c6w9bZcpvcHS+RGak3wZUx1ok4dsNmvImqLXzMlDtGveAiGt3wtdkpVptMNJzh2yZ4eX",
- "4qpQOB1BQv+DN8eiPPFB/ylGdJdZWAcDpn583otPg51Hln2PRag4IIEOiOMkAt4MhVOeho8huG5+mfyE",
- "EwlzVlsQCr5kme+wCg/zbqvFhWKR+QJQkCbQAhTmOKECohryMYsA1s8ZAMyXan5kyf1gQSh2lj20iCB1",
- "S4838CSJ7AuzVYTes9G11ZnIJg4g0l1TUNVq7etmSaAF2CwXBpkf2nryCL1kKRdrH4hkwk2RbHmTSSgX",
- "S1bU9EwgGMr0yCE/m7HGW9Q9c7ARCpnwFjgxC1mW8r1SU1A00M7WHCWClNudIHxPq/C/GkHZZzuhrNfU",
- "+hrDhPe4TMcB8upIgY1Xk29LhXlrNl3s3yKbPhT7JG8WFzfn7HZ0fPpjcO723B/9H5/7w5oLQX3UDLNr",
- "Y7NLk87qUXUxiwgImjBRgEMxDNTN3Wa8si9lhgBJ+SoWs/ty/zd+I1NvkuzWd3GuOJ3VoLeg1ug0O5DM",
- "a0JN2HeHeefrZTAPiiGR8wgSlrKhou/w3vrQjXZROPoAnNXE1PCxzUvUw79cOoBs25s5NCMSu4iapg1r",
- "H0gzhwQmMpxGHpV8LOcfaBfuOgeOD557zoHzCOE9/e88Csnsnwu+ymfo0YbXmCWrRNRlFCBPkzSHq+B1",
- "t9IsXTlvqtELWkjWIvs1uWsL4MyrEwadtctMJp24D9gGnICNfuXXLFn7e0xWqq68IQhmJXlCjfqKCoh5",
- "/9+wCa+zQbyuDWKNtoG15E23ttC+GLnphjkFmMNv8CVIsS62WyV37lngIOzErLUDQt/xQBhGxAGsAgMr",
- "7SSzkZURr4UO6y5xjUYM4PsJxFg1ZhT0Mnk7rto06IdvAM900noG8Ewd8v/g0nRCfnPVhldGGvEiQ87J",
- "DBDjhL/BBE1QE3qZSYbKkgfRXFTnKsCgp+gZwOYaYNo5QFb0y8GQbPCpwUc4DsBzgaDl/rW2fhSxe2sg",
- "sGKRNHPKafhoRiLjQfiYY03qaHrYFzi2syJsL8wnqw6QDIha/C0HQyWDTlYiTsWTCeVn0RSFiyc7X4y/",
- "l8p9vnUYl2uMm3A9hFOESY1030Z02510BsGwhbslyxTZbpqqHuMZivFbtcxVLJUbPM3XccrwyXTbJmJG",
- "uCq1UsuzHTOI2AehhmnZIjXFO8u+aRIs8jBPx21ECQ9eXLKig8UiMfQSaHg75N+yrDyCh+lNyBlMWI3O",
- "OIkekA/9ngOcBIR+NJedWJDTGDpTGMIEiJguNfrxcG0Yb49mfzsJcLG92TQpZ3A2IptK5S3JQlkUP1Yx",
- "nIUuRsYU/q53gBhT0kN21ctzU/Gh1CKUrZ58LQK4daDnIdzcH/1EW7qbgvzt6urS4Y1YzW5JwYlAvkUS",
- "MQUrGcyFiW8tEV5PQjL9lOmJgNsPJc3L1tYmYS0FLEw71Qjgr/0rt+deXrC6dpfXV8yGajoheXwTrovL",
- "xfzFQFgaPBA6MUwoXe228tQCDwAFYBxAGWbUkKO9Oi18gl5KoOPJCoAkeNY/YVBVg5XxSQYNJVPZ8wia",
- "htB38k6rKJ66ZAR/AMYwwPXPO6wNY6n8OMiOAeskMjA5o+PotiwAmHyDICFjCCzCksVWsdc6TAEEzkz2",
- "XleOPMCZmaoHfUzAOGBRG1sI6Rw8mQlfk8pvOQZYv95h1jeSSnY2XXAobZNFyOfPay0JuJQJThcUl4Z0",
- "SwbhJLLjhqHSgfnXRqaTAMukBzwgnzPiggspJVDQLCSPmtNlGmDHamVv5JFwfHI1+K3PcgBnf14eX48M",
- "7uf8BxtkXdGWLz1XHIbGlALirBT16otANuZFEL2vm7TP6+GZZvi2yihrr1UkFGHZLhmpTD9Nu646N0CN",
- "GwB//m+YvL58Ug0eXt82YlS7MyCHReYv+QCAcJqKuChrsTA6/Y75wcM7i3Q1+iBAvWIkJFL/iSRAX37E",
- "vzcPW1kcg0hV/y7OjnlMx+9X35h/0NXvl/3RyXBweaXldoWTlWFG/bMv3y5GPNrmx/H5MQ+0uel//nZx",
- "8d04kPSVWr7gi3w51DKM/eMYe3zMnsf0jyp/RmODYKVfdABZ0acoI7KykIU2Z7MRc9KUqlGPwHTxtWYl",
- "lYFW+ReVZtqnNxSMkGVCqfObKctyk/Ci4ypVxKvkOoVE+Z4FtpTeJkOZt4g/QE8hwQx3Xt7VmdK+2aGk",
- "PKnvGr3T1HrmtZUXTXXQ2yubuT5ZfK8v16/6cNh8R5dTl1fT02K1bosGp7oH4QzAwakWh7L3dxQWbsVf",
- "rs9PrgZMHp5eD48/n1Ed6PT4a60ko4PIg64V2bLZNXwgv+tPz6VSuGz44GWC3s5qIVobPdUYk3yHeeS7",
- "RjaVUvdXeewePmP9XUgOT8myZorS3YvyLHBwDD00QV4+ifOPGGAMfecBAWeCAgKTf1pWBrgpVi9aed5H",
- "8cBizPiXubWoGQkP9pX0tmvL2LJYSkqe9sKeLvOULSs8c3kqltfJ48jnHqlx8psGYW25xrXpJG3ygEL/",
- "83OLwa+UXtWElS31kLWnvMxyo6uLva0XJltyFavLRl0Hfl1ZgePRCT2m+6OT2nM6H6Wm1o5KywUppkjG",
- "hklGMxDDTnZ3sruT3a8puxuyOv+NRPtq85M3STc22UL3nSIhGC49pQ3VPHpH4aXCsZqsYFEosxdrG4jC",
- "E+vJj3mzYAnRhi3GJywf2iJFMdZZw6Nc06JhEcbLHUt01IaO5FAnvGOT9lBqXplf8IM23Enykvaj4Bnt",
- "N8l62o85N+oTnxlXcwWmOvwF/Cxf3mi6tPVQ7yHFIawjEMH1JwnVMCd6xq9Jg3mHDOzWNKFISTUx1NC5",
- "E482q54W61fYXpsu4U0jWvMC8YsMnOFntVoXPwf16MuPxjthE26PZh4+s4LAmea3gTowFDWjzLIF27LN",
- "hqjmaKrtwwlIA3KZoEim/tKxP2vkxKKVjoEbrbf548crPWlkmTItQMXi7L/KM0JrFFjk3T+bnsnpNwcL",
- "m7Tde4nC0y1YCyuvHobXWf7RCgg1C4GtYbZWWTYrsRLmPPemMtBtMzuwfV2lZbsNgbwrhPN329ykXcT4",
- "JIHMl6QmnewcPDW0aJkW05TUkjshp1RIUfV9ziEcQ5DA5DglLPCPYZTJXvZzvikzQlgqMy+K7hGUzRHd",
- "Vf6TfO47cmfMfU+J+QMx+g6FRwASTgAaz1TezTm+HLA0noRd0Yu/ZpTlHuzu7+4zwoxhCGLkHrkfdg92",
- "91mECZmxpe2BGO0FIvfyVOd8/VW+FtJWIcTYya6HdBeBLJfinonvX9m6pLMsm+Vwf7868DcIAjJjUvmT",
- "7vt5RLI5CzvjHv1x23NxOp+D5JlDmDeU78Z/iPG9GfTu3Vvan601gcB/bl4sbYbqVjuUDVa5XAYcCxDm",
- "AbEkAZOJyN9Tt/oM2sblPxzsARG9vMOCVXbYexHe+8l+Vn974TAGkGh08VP2O3ZAVmqXBcnzkBzWvYKx",
- "UkIEPgKjxQSwbB0U7JqkV5UZHHaVZPxF6TnnrspSXJX7uRmQy8Wl76Yvt5W9/1jF1ij1PIjxJA2CZ4ej",
- "1C/UKa4g76XnfuRU4kUhEYmXQRwHyGMY3ftTZK/N19FwWrE05yLsqvxUPQcBxQL0nShxxsCXruIcjA8r",
- "B0MHxZcoGSPfh1yXzemb00kdmUmKF0mybnvu006WT4BVh+IfehrCuGWXKOJpQrq58r4MifMR/h4kzujh",
- "c8Rl50qIwSJZioZMarFFIieVOC9i40UvoleyEENO0yrsBTHAAe3EgKUY4NSyPjGgHpAx2uHJUfZ+Zn+z",
- "0zCOsEZpGMKH6J7lGz2+HPC0KsIpI5uxJCZixPK2SPMA7W4jJbLhDTJBwrpVx13ClifonEH39yZq3Iaq",
- "BenQjb0SOyfJOP+tjpKzLS9QsBdEqb+nXmXN2q5slfn+yesEG8RBISYgZHnNikR8Qj/LV2SzErx+3DJA",
- "nDTMwra2hsAatHaOYPVZTmz9D+VB5mlHDrETxfxNW5xoyn5z4+reT/bfl7r9plKKtdqtbCizsfKNbJRE",
- "bAijcsK+blQIrW6zRfmIhsM7gSRB8EGINY4NtmOdbCuQuIKZnLw5imukGqefWzOF7zWJNbYtmVRroPnT",
- "TIC9d7o/ZSTc0f520f4cLnyGG0/vzR3cInV9G5rKjsQ3cpCv4ginY+wphWOxccfPEKYXoMAptDZtMG09",
- "KDZc227TucSOK1O23HyZtaCwum0ihGzr2UaUNqG6/4VNjkJEIirN935yjn/Zi5NoDM2XS/lK54D8IZhE",
- "DrPrikKyakStmeGzqS8jTIZpeMnmtbdNmQ69THJt+NSrISgRfc7pieF3d6OnwnlEHJCSWZSg/6VQRDIP",
- "BY+TF5V6y2ZOAlAAfYfb7R22Pc4XIc8H+bbqD44CmbFq13s/2X8srPjOSK2OXaEcteS5vdG+MKaReBiI",
- "W2mdL+Jkm1Sbg82AcR3mJMwn/rSZiXmeGJZuCwRB9Ah9/YtAmWql6GW/16lYnOiKHBPivZ84xFbcUqzw",
- "XuWXELdgk1K5eCOjiJN769ikhIyOUbaQUSoEm7HK+aiWUUKsYROpuCjWJr3qQueVV+IKi7R+G3s1/aNn",
- "NgTcw+dFLQEKDIefPhWAOFiFDhQnEf0H9LszbItY03SJRGSWjh0Qx5Laq8cab1PiRwLjnSRlh5f482UP",
- "8FrOTRdI0UqGD4v8RlVW5WFB7GonB7ZgWjme+UAT8G6acUXwNIkcfI9iCdtfKUyec+CiyQQzw4gGFBSS",
- "Xz5q46jrp+MFe8bPhinZ55YzrtMeqKlUvoBhEL9zoyCd9eNmZi1w3SPATPhMojT0dWaLAvsrzJ9pBvSn",
- "YVr7+JixcLNMyr3/zRKJt2khj/p80E4avRtplJea72TR30cWKYy/fkkURNN6OYSdIJo6AQorulH1+fAs",
- "mp6hkJ+OnRjaDjHUMxdSC+ADDDCdl6fDqZmYtSzMXPvwIeiA9uJ5HQwrx5AevA6bTYFjEiUGQHiHtoCM",
- "eC8NEDes6HLksAgO8/ojNUdFy8kL+S0MeODT+1kijVooTpVmi0CS91/vIaVKg6bziZJkdzgZXs/ZqZBJ",
- "YeUsOIum7Y8B/hmb7VS8JgJ2AKvRZPDZ5F6lvKm7HodoPnixdGG9BzSJRAb9V/B3biRxkc9GcXDu3Jkz",
- "Eud7nRNbk/OyjqIzUyxPolQTxMA8oJ4QJiic1hP42zHLbiAqwY4J82jGV40/6PhxZeEFLYIJavlSH2pX",
- "78oFMm3VFOqAm8KObK8jW+rYsb6YnAUsB+ZN6HinoK7VUas9M/VaqGjt4/Ey7e29Hm6qhrm6kDtrFfTg",
- "lUPuqidgF3Jnq6MuFXJnd0ruYUjof3FzeL7s4sgu9QF3CrmgcDoSfSx9/t/JMakgZokzUt2TjpUKXuJG",
- "NK2Mj7K41fqHtiyMFNuFqXb6ZObazvCB8+TDrfhE+m93tr6y8pjFuuJ2AbBNCuMCMdmdjsgQIGldUQvX",
- "acIoT9rx16r4SzDCghHm9QeOhVcHZpFKBdcO3tsQi/lWzpr3/Ix6D5+tHlFpu8KsVokbGRmwXGjVvL9m",
- "mJRiO1aw5bKiNYBK1Z/FQEzSUERtQStYZVvr5099puxXepJm+/k6D9Js6i14jlbhUB+ja4gli+i9h8+i",
- "PGIMUFKhlyxR/x+U3Q6OWNMDXhPxkP/rkIp33Xo0xSC0zNCYjtu8DBkvb0XnIie6gSVXm0J87aH0nRfA",
- "Sm4GUPp4WgbQ25qQ6/JBdFcAhgCRc7vWLMz5+3XcEOwytag2Xx6V8+69QA//vZlZZX5koZ7CJw9CvxKk",
- "Ji4oMmLKms+bLyZ74zS4N7v9fE6De0EeOJcJuFYo0D7vWDDQ5bcUDvg1pQNuLx46L/Etkw+MTVUhgVcs",
- "JTxW1abGPZB954YMpeBmQcU1SQ3uVsJHeM8KBUOAvUIhLgwJjAPwvHKx8WpVi8rJ5htEE0Ma9HOi64TU",
- "tgqpIaPU9cgnZkaztLFy25yFnfU7fO6e9XJj40K3dYbs7sauu7E7wva7Sj4Qp0FNGmb6Hbc7mofyiHmv",
- "RzNHwLYczasxq3HgOq3+vR2YKHxABLZ1sJa99E5jA/a1Oyulr5iCj4W8xCS2O98wnft0Totr8pnmE9TS",
- "emf+VrykOUrsnKM5bl/VI5qDu4gjtCCMji313s8Z36zGVVPwufxhh/+7XcUtC1ZuXWNru/xpinxVD9tO",
- "ho63frY2cq+mgNiWca8uC2G2P6bo7eI+tinMZcEJbzzd4BZywnpDbxc7d18t+NaSczU1v7aZc0VQbGvO",
- "rTv55nA+FkWKW9zRZC89i/9gX7s7mqRGBR8L3dEktjtlUHdHy2lxNbqgGG/vJ//DJgU1EEA4kySaN4W9",
- "cWr4e6iCYtkm2PjnzSfKXjnvLqIDvg+u3aIsd+eGpHYZkxY2ZmXy4q8UpnBnTgW3hxuLYLHWjmidvSLX",
- "CoyvkPyX9vohpniLMuNNRQa8JWfv9WsvBdpbLALMEUXwJd13MvG1ZSIVR9nuzDPBIiWi5JxFZWICCNxh",
- "D042rhK0NX+eavKVGAICz2jDLi5tW+PSVhXD1IjJdUYqZXS2BdFKZVg2lT6zyGstnHEUdu68cUp3VhU3",
- "ubilqHbO+K+LSlzRYyeOAuQ9N6dskR0c3sEmYYt0JbhkPbp0LXs6tCxm4intRmfq2XjWI16FrDZRS6HC",
- "Ga4tzNcZP3mOFhUnbW4PJVR3tZK2qIyZwguGaqsNJf8sGHEPE5AQIzuO6Fd+jl0cp2TmsMtKmSGvMUz4",
- "mwkD6IIilPV8i5z5Yf+wocQYQ5k4VgpYmUHgizeeIOIEU6SV8twvpeJYlOyiewTpoCz5caFaFkNpcUZJ",
- "CHQHFqaDprxZpTp6WFfWrpPDQg6fjwpVp1tI4jKWO1m8dbK4yghWFSUb03VZlFbtvBMZAor8VZula3U0",
- "W5zU2suwqxG7xQxt5DxLjq49UUU9jp1NPFmJEmFv7eVq/eYCHWLa2QyyulWFnekeVbbhUSXbm+qjypL2",
- "CU31tFrWzQulOeNnzlDa0o1vxI7X29YKbhuos7igfOgkwtYVWFRFxEqKKlrJicacGseEwHksksOwthY1",
- "X99aMo1OgtQ5sCHM3PuFCOFEEGzfBeGVH/GaGGVTDJ1A2rEm9p4lKbHlYda8Y+FtzAaQpKHYqobgCxTG",
- "KfOH4I+7uuW+bIWm0uUCqJEvbMNfQ6Dka6q1BfBmlkXhv0Iy4sN2ouX1tIN2Wa4MlgYxXHeh2OYLhdyl",
- "tUgN8Ra/8xgl93UBY7lbp9FRovORyF3UOSpuGFIpQupqbVBkZG70vKMjt6Mz4m/bq5xC/ounChGDmFjo",
- "3b++FfiHY2NDJXI0M/utEn3Ire04d/ue31TGW8RYz6VyvXmenpBceNf73uZnw7s/LHNMdJWolr5qyhCg",
- "Yuw0x/Gij1QS0fx62T5DpFqTR5MoUimk06WLVNJFKnjBDWaiQtWj10seqYPbusicYkEqEEx3Pd3KpJLF",
- "PaoGGdZfUNsInJ/qP5texwuc0HgCCzJ9y4/lJdbXg6Zi8A2rCWK7Fo1X7h7PzdHCRbt0c6Rwr0hTi/Pz",
- "HnviaDRR84cQztAq0LsNfD1go3fM/frMnedGuFRKQ3AYl7FmF3HEtrszaG/IoH2j4j60yUqQb1JblWF1",
- "EgfPQAzXpEeM2NidvHkzygTfsE6j+BtpFJlHvEXp7ELV7CDIXt2wRteoY30WjsUfyPsy3X4nA1YO4BnA",
- "xBmcsqSVM+gEQO6gKfkJwGTgG7OffDjUZT/ZgOdemzIbquTpfGu29MV+AVli/5xvJwux1csEa2mn0bzL",
- "dEw+nIA0IO7Rfq8gKjaRmCmb+9Mik/Py78742WET6CcVn8xR4ptQu7rHntXrW6tM9JaNaVm20wHOGBBv",
- "VnnsqdOY3n29TvWdhCPD1hlY+KhXn0redRHPoHs9aki6xMlmEy83eM9LorBZI6GtnD+jcQ4USdB02ug+",
- "cZJE4btWU95M1shsY5FPp51CkqnEuw3JgU0Xt1UnL35LmYFrclWOn52JyIe5spSZKp9h+7SZ4+f1Zc5U",
- "js0N584sIGMJHbY7mDR6bOUkWJNCS4+lvZ/0PzvyV7tiENWjyvppgBLOGy8Nka3eBFYBo5svDmFZxUG7",
- "iV1eznJVBT2a2lnziwRx+9Kre25bkrnesgPPFnPWmo7O7th8C6bvVof1CuSD3fnNaMDWzq0a35tf77t7",
- "5DbfI2VhfNtLJGu/3hvkVl9vKXAxSCjSDC+6JbB44xvVxrch+DTx2FrYxNvppswCBbRhAkiKoVVxI9l2",
- "kSvtiPUVl0sb4O5R6FtBxRq2Buk7Cv1maN68BYWgOXTAhAJa8Sl8BFiG+KlLcA/3Dw929un/rvb3j9j/",
- "/q8B96L7MZ1AT7w+IHCHQuHa1uqjEI/hJErgOkH+zGZYJcw1WJ6gEOHZ4jDL/hvF86qAXimm12cRrJrf",
- "3q09sKw7dteatXgRrscQyBwHbZLlAkeARg+6Ivur2XMt/YPfcrnHTg3v1PDNq+Gdbtnplq8SGYCXLI/K",
- "BFCXxrv5fF9DqdL8nKeg+mlAj8cGq2HWchH74Uh27qyI22xFXN+9KCOAN+Uu0SlTnTL1ZpSpfBm5qF6J",
- "bdaq7nzG4JmVdsOF26sSprM6rFYrMWgA69VL9n5mf+5UMp00eiXpQW6ps7xx3yQNDoyZfbWo3lp3Jf3u",
- "dv5KZX8lA57aOSQYaKPBc2klDPimq/W8Ke5b53HcHcVv3a9pvXLETjHIkhm85DE0tfU8gRPCR3MkjX0g",
- "zRXv8HbSD9ffXtUoWH32glrQNlppVLMNbSqDGDd/o+kf2zl5qlmTzfB3YnHz5Q+3LuWkEHR1VL6eIEZF",
- "FhfsyHp5LDUCIZHt9cGKKjFMw04Kb1IKyx1QNqCN/DXqDRss1dReHVUl8Lu8aXbi10r8CoWkSSdeucjl",
- "ecx3vCgNSYOLDmsjs0LJBPzgAaAAjAPIpK8ibvS38a+Q8Dzp+ITN+OZFb1PyrjeevK+wWQtevTmpcPLp",
- "rOGGN/oCkhZL6Vdk/xTDBO95aZLAes7G/HbAGzq0W4V7rzFMvkJyIgZbI93RmVrSGYO4KwXz+qVgoJcm",
- "iDwzMe5F0T2CxymVXX/cUlFVCm4rkpskd7b9GjKeIjJLx3seCIIx8O6N5HwSzeMAEshp+oLO72jPIzoR",
- "L4TxlQ19QXF5IocvEfiH/cOG9wRPzOtX551B4Iuqb0HEN0NbZTAT6y8lZBZwJxdYnMMSfZiAxCwKRvTr",
- "YohjXdtjjcGzfpwx6FoiLIqmAVwPvbGh/+b0xtG3YnrLEfe3ozcUPiACbUpDSm2Yd2BKt9XxTUe4Yn0H",
- "Yq41nuLqRFb+EwHCcmOKC+z0RetjlWVHLWEvp7wrzQ2xQHt7wPNgTMyWt2P2HWcWNjFJhdrUzed93PXY",
- "k/jgfKLm0oU11MdXrqO/zgsgr9/PkFTZe3v6SiDLM1hT04x+b0dfvI+7rgphdPAV0BdfeUdfDfXbKZIW",
- "oK8gmqLQTFZn0RQ7KHQAOxt3axSMMzbQemiJHcF0/A3VWLW6RwfRdAp9B4Xd9Xmrrs/FY51Sje09OYim",
- "UUoamCFKiR03ROnr23oEjUZbVnGoI9IGZZRRjy3ZzuF8DBM8Q3GLK5DSye4axI+QH3k3EUa0VgLXT9r+",
- "PqSiqLsTLXInUjHYTJIxwPgxSmo8EbiYFJLUke3rROqlHHN9OsbJDITTbKJtUjY8BpmfIaoT529InHOy",
- "KlK6BRMlcEoFWVJ36eMtcK1GkvnprIttJBjbxDASed0z15vQ0yUJ2eo8OADe/VpeGEZ05C1+YGgQNS1f",
- "HB5gggUItcVtRTvpv4Jh8qDREQfhJPoKyW9i0JWW9lAgzTM6HOzu7+7rckYobiN/ZF1vLap2XNUstuQq",
- "V0PON9BJIEmTsIC8kp5NpVQahiic5lM87cghd6KYh6jms8lNe4TjWRTd7wgvor2f4geLeDx6UojWVS8j",
- "/rt9qJ0YyOzFk020YScey9g1CV93Lrz+uVCOl1PJ1Oi6I1rcWjHHnsCzzSVZNpVl8eo5Rug92Daxxtby",
- "zWqc3zj03PdNoIZiZigmNEndLG+owE62XR17bhF7MptAZYva8mjGm+yPF4tK1xptg1OYZWCq8BCsczjV",
- "nPFvx920teOfWHFnDat4lFaidajSXO9AytRqSoXEm9XYumoJmbd6M7S8BlMCQ0Dh3DCdFQIDqUTZ5oJY",
- "LHmNQ9Zxmp7TBEMsw2yl06QcmWGVmSRzH7dKhdDiXrSV4Q1tsnpkAHbRVZuPrtJdhxSKWTC4odekYdlz",
- "QguV6z1E+SwY2dPx1mvzlhpCtAxj2ah99tzVTg/cCgZbX+VpjgzbQGeudRW5bNPKoZVEKKuHnTwwKojL",
- "MWeDmmiVXp9uUjGPfsZ4D9lLh/GkbJFOfxv4WZPSkiekXEG9ocWrDekBmyZRGrM8oTkIcqOMoLBO3+Gz",
- "25jDYc1CYsnc3fJRqUvfvYXaxEL5wlsJLplXxugbIlMitM30slCCl62UXFcadtl1BhNm3cYppQ7o9xhX",
- "BYBATDKeQtiZQOLNoG/KJp0L/i1XpAQZLJg15tVyxSjwtkoS06WG6VLDrCE1TCvRLGQDtnjVKpzkVmJZ",
- "+Na8IRPM30Eur1nKSYep5VTBTt5tlQqYk+KiKmDZ8W8MQQKTzPGvp3UFZJ5kXB6kSeAeue7L7cv/CwAA",
- "//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
}