diff --git a/cypress/fixtures/count.json b/cypress/fixtures/count.json deleted file mode 100644 index 18b01584b..000000000 --- a/cypress/fixtures/count.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "count": 15 -} diff --git a/cypress/fixtures/workflows-count.json b/cypress/fixtures/workflows-count.json new file mode 100644 index 000000000..00a0b840d --- /dev/null +++ b/cypress/fixtures/workflows-count.json @@ -0,0 +1,3 @@ +{ + "count": "15" +} diff --git a/cypress/integration/namespaces-archival.spec.js b/cypress/integration/namespaces-archival.spec.js index 2b49ded1e..29898ab03 100644 --- a/cypress/integration/namespaces-archival.spec.js +++ b/cypress/integration/namespaces-archival.spec.js @@ -10,7 +10,7 @@ describe('Archival disabled page', () => { it('have the correct title on page', () => { cy.get('[data-cy="archived-disabled-title"]').should( 'contain', - 'This namespace is currently not enabled for archival.', + 'This Namespace is currently not enabled for archival.', ); }); }); diff --git a/cypress/integration/namespaces.spec.js b/cypress/integration/namespaces.spec.js index 23b5ad1fb..5a6787ad6 100644 --- a/cypress/integration/namespaces.spec.js +++ b/cypress/integration/namespaces.spec.js @@ -74,12 +74,16 @@ describe('Namespace Select', () => { it('have the correct namespaces in the dropdown when using navigation header', () => { cy.get('@namespace-select-button').click({ wait: 1000 }); - cy.get('.prose > .text-2xl').contains('Select a namespace'); + cy.get('[data-cy="namespace-select-header"]').contains( + 'Select a Namespace', + ); }); it('navigates to the correct namespaces in the dropdown when using navigation header', () => { cy.get('@namespace-select-button').click({ wait: 1000 }); - cy.get('.prose > .text-2xl').contains('Select a namespace'); + cy.get('[data-cy="namespace-select-header"]').contains( + 'Select a Namespace', + ); cy.get('[data-cy="namespace-list"] > :nth-child(2)').click(); cy.get('[data-cy="namespace-name"]').contains(namespaces[1]); }); diff --git a/cypress/integration/workflow-bulk-actions.spec.js b/cypress/integration/workflow-bulk-actions.spec.js index 48adbe5a8..e7c46a00b 100644 --- a/cypress/integration/workflow-bulk-actions.spec.js +++ b/cypress/integration/workflow-bulk-actions.spec.js @@ -1,34 +1,81 @@ /// -describe('Bulk Termination', () => { - it("disallows bulk actions for cluster that doesn't have elasticsearch enabled", () => { - cy.interceptApi(); +describe('Batch and Bulk Workflow Actions', () => { + describe('when advanced visibility is disabled', () => { + it('disallows bulk and batch actions', () => { + cy.interceptApi(); - cy.visit('/namespaces/default/workflows'); + cy.visit('/namespaces/default/workflows'); - cy.wait('@workflows-api'); - cy.wait('@cluster-api'); + cy.wait('@cluster-api'); + cy.wait('@workflows-api'); - cy.get('#workflows-table-with-bulk-actions').should('not.exist'); + cy.get('#workflows-table-with-bulk-actions').should('not.exist'); + }); }); - it('allows running workflows to be terminated for cluster that does have elasticsearch enabled', () => { - cy.interceptApi(); - cy.intercept(Cypress.env('VITE_API_HOST') + '/api/v1/cluster*', { - fixture: 'cluster-with-elasticsearch.json', - }).as('cluster-api-elasticsearch'); + describe('when advanced visibility is enabled', () => { + beforeEach(() => { + cy.interceptApi(); - cy.visit('/namespaces/default/workflows'); + cy.intercept(Cypress.env('VITE_API_HOST') + '/api/v1/cluster*', { + fixture: 'cluster-with-elasticsearch.json', + }).as('cluster-api-elasticsearch'); - cy.wait('@workflows-api'); - cy.wait('@cluster-api-elasticsearch'); + cy.visit('/namespaces/default/workflows'); - cy.get('#workflows-table-with-bulk-actions').should('exist'); + cy.wait('@cluster-api-elasticsearch'); + cy.wait('@workflows-api'); + }); - cy.get('th.selectable > label.checkbox > span.label').click(); - cy.get('[data-cy="bulk-terminate-button"]').click(); - cy.get('#bulk-terminate-reason').type('Sarah Connor'); - cy.get('div.modal button.destructive').click(); - cy.get('#batch-terminate-success-toast'); + it('allows running workflows to be terminated by ID', () => { + cy.get('#workflows-table-with-bulk-actions').should('exist'); + + cy.get('#select-visible-workflows').click({ force: true }); + cy.get('[data-cy="bulk-terminate-button"]').click(); + cy.get('#bulk-action-reason').type('Sarah Connor'); + cy.get('div.modal button.destructive').click(); + cy.get('#batch-terminate-success-toast'); + }); + + it('allows running workflows to be terminated by a query', () => { + cy.get('#workflows-table-with-bulk-actions').should('exist'); + + cy.get('#select-visible-workflows').click({ force: true }); + cy.get('[data-cy="select-all-workflows"]').click(); + cy.get('[data-cy="bulk-terminate-button"]').click(); + cy.get('[data-cy="batch-action-workflows-query"]').should( + 'have.text', + 'ExecutionStatus="Running"', + ); + cy.get('#bulk-action-reason').type('Sarah Connor'); + cy.get('div.modal button.destructive').click(); + cy.get('#batch-terminate-success-toast'); + }); + + it('allows running workflows to be cancelled by ID', () => { + cy.get('#workflows-table-with-bulk-actions').should('exist'); + + cy.get('#select-visible-workflows').click({ force: true }); + cy.get('[data-cy="bulk-cancel-button"]').click(); + cy.get('#bulk-action-reason').type('Sarah Connor'); + cy.get('div.modal button.destructive').click(); + cy.get('#batch-cancel-success-toast'); + }); + + it('allows running workflows to be cancelled by a query', () => { + cy.get('#workflows-table-with-bulk-actions').should('exist'); + + cy.get('#select-visible-workflows').click({ force: true }); + cy.get('[data-cy="select-all-workflows"]').click(); + cy.get('[data-cy="bulk-cancel-button"]').click(); + cy.get('[data-cy="batch-action-workflows-query"]').should( + 'have.text', + 'ExecutionStatus="Running"', + ); + cy.get('#bulk-action-reason').type('Sarah Connor'); + cy.get('div.modal button.destructive').click(); + cy.get('#batch-cancel-success-toast'); + }); }); }); diff --git a/cypress/integration/workflow-executions-with-new-search.spec.js b/cypress/integration/workflow-executions-with-new-search.spec.js index 8991f9c21..6d815a4d9 100644 --- a/cypress/integration/workflow-executions-with-new-search.spec.js +++ b/cypress/integration/workflow-executions-with-new-search.spec.js @@ -5,19 +5,18 @@ import workflowsFixture from '../fixtures/workflows.json'; const workflowRunningFixture = workflowsFixture.executions[0]; const { workflowId, runId } = workflowRunningFixture.execution; -describe.skip('Workflow Executions List With Search', () => { +describe('Workflow Executions List With Search', () => { beforeEach(() => { cy.interceptApi(); + cy.intercept(Cypress.env('VITE_API_HOST') + '/api/v1/cluster*', { + fixture: 'cluster-with-elasticsearch.json', + }).as('cluster-api-elasticsearch'); cy.visit('/namespaces/default/workflows'); - cy.wait('@workflows-api'); - cy.wait('@workflows-count-api'); + cy.wait('@cluster-api-elasticsearch'); cy.wait('@namespaces-api'); - }); - - it('should show count of workflows', () => { - cy.get('[data-cy="workflow-count"]').should('contain', '15 workflows'); + cy.wait('@workflows-api'); }); it('should default to All for the time range', () => { @@ -36,7 +35,7 @@ describe.skip('Workflow Executions List With Search', () => { cy.get('#workflowType').should('have.value', 'ImportantWorkflowType'); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); }); @@ -56,7 +55,7 @@ describe.skip('Workflow Executions List With Search', () => { ); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); @@ -65,7 +64,6 @@ describe.skip('Workflow Executions List With Search', () => { ).click(); cy.url().should('not.contain', result); - cy.get('[data-cy="workflow-count"]').should('contain', '15 workflows'); }); it('should send the correct query for Workflow ID, autocomplete manual search and be clearable', () => { @@ -80,7 +78,7 @@ describe.skip('Workflow Executions List With Search', () => { 'WorkflowId="002c98_Running"', ); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); @@ -89,7 +87,6 @@ describe.skip('Workflow Executions List With Search', () => { ).click(); cy.url().should('not.contain', result); - cy.get('[data-cy="workflow-count"]').should('contain', '15 workflows'); }); it('should change url on single Execution Status change', () => { @@ -103,7 +100,7 @@ describe.skip('Workflow Executions List With Search', () => { 'ExecutionStatus="Running"', ); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); }); @@ -160,7 +157,7 @@ describe.skip('Workflow Executions List With Search', () => { cy.url().should('contain', 'StartTime+BETWEEN'); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); }); @@ -172,7 +169,7 @@ describe.skip('Workflow Executions List With Search', () => { cy.url().should('contain', 'CloseTime+BETWEEN'); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); }); @@ -216,7 +213,7 @@ describe.skip('Workflow Executions List With Search', () => { encodeURIComponent(`ExecutionStatus="Running"`), ); cy.get('[data-cy="workflow-count"]').should( - 'contain', + 'have.text', 'Results 15 of 15 workflows', ); }); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 82aadd04e..c6efff1e6 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -56,7 +56,7 @@ Cypress.Commands.add('interceptWorkflowsCountApi', () => { cy.intercept( Cypress.env('VITE_API_HOST') + `/api/v1/namespaces/*/workflows/count?query=*`, - { fixture: 'count.json' }, + { fixture: 'workflows-count.json' }, ).as('workflows-count-api'); }); diff --git a/package.json b/package.json index c0ddc86a7..af99c44d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@temporalio/ui", - "version": "2.1.86", + "version": "2.1.87", "type": "module", "description": "Temporal.io UI", "keywords": [ diff --git a/src/api.d.ts b/src/api.d.ts index 4134266a1..63a6d0a0c 100644 --- a/src/api.d.ts +++ b/src/api.d.ts @@ -1,9 +1,7 @@ type WorkflowsAPIRoutePath = | 'workflows' | 'workflows.archived' - | 'workflows.count' - | 'workflows.batch.terminate' - | 'workflows.batch.describe'; + | 'workflows.count'; type WorkflowAPIRoutePath = | 'workflow' @@ -13,6 +11,8 @@ type WorkflowAPIRoutePath = | 'events.descending' | 'query'; +type BatchAPIRoutePath = 'batch-operations' | 'batch-operation.describe'; + type NamespaceAPIRoutePath = 'namespace'; type TaskQueueAPIRoutePath = 'task-queue'; @@ -29,7 +29,8 @@ type APIRoutePath = | TaskQueueAPIRoutePath | WorkflowAPIRoutePath | WorkflowsAPIRoutePath - | NamespaceAPIRoutePath; + | NamespaceAPIRoutePath + | BatchAPIRoutePath; type APIRouteParameters = { namespace: string; @@ -49,6 +50,8 @@ type WorkflowRouteParameters = Pick< 'namespace' | 'workflowId' | 'runId' >; +type BatchRouteParameters = Pick; + type TaskQueueRouteParameters = Pick; type ValidWorkflowEndpoints = WorkflowsAPIRoutePath; diff --git a/src/fixtures/large-number-of-child-workflows.json b/src/fixtures/large-number-of-child-workflows.json new file mode 100644 index 000000000..5b96e6e2b --- /dev/null +++ b/src/fixtures/large-number-of-child-workflows.json @@ -0,0 +1,759 @@ +{ + "executionConfig": { + "taskQueue": { + "name": "child-workflow", + "kind": "Normal" + }, + "workflowExecutionTimeout": "0s", + "workflowRunTimeout": "0s", + "defaultWorkflowTaskTimeout": "10s" + }, + "workflowExecutionInfo": { + "execution": { + "workflowId": "parent-workflow_4609bb51-ec81-4a55-a943-0bf2ce924edb", + "runId": "15d3d584-12f0-4c2f-be72-869c6fa534be" + }, + "type": { + "name": "SampleParentWorkflow" + }, + "startTime": "2022-11-21T14:44:21.603149470Z", + "closeTime": null, + "status": "Running", + "historyLength": "9", + "parentNamespaceId": "", + "parentExecution": null, + "executionTime": "2022-11-21T14:44:21.603149470Z", + "memo": { + "fields": {} + }, + "searchAttributes": { + "indexedFields": { + "BinaryChecksums": { + "metadata": { + "encoding": "anNvbi9wbGFpbg==", + "type": "S2V5d29yZA==" + }, + "data": "WyIzNjEyM2Y3ZDkzN2U5ODAzOTY3MmY1YmYyMDk2YzE0NiJd" + } + } + }, + "autoResetPoints": { + "points": [ + { + "binaryChecksum": "36123f7d937e98039672f5bf2096c146", + "runId": "15d3d584-12f0-4c2f-be72-869c6fa534be", + "firstWorkflowTaskCompletedId": "4", + "createTime": "2022-11-21T14:44:21.628934012Z", + "expireTime": null, + "resettable": true + } + ] + }, + "taskQueue": "child-workflow", + "stateTransitionCount": "6" + }, + "pendingActivities": [], + "pendingChildren": [ + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-6eb9dffb-05ba-4a9f-bcba-2e470cbb158d", + "runId": "ce481d0d-16e8-47a2-b155-f3f969bd8b01", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-3d433d5e-a946-42ed-ac3d-05be5809be06", + "runId": "439e60a7-e0d2-4745-9cdc-894d8b176a0b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-0c25f305-44c5-4de3-8ba1-95a8176e45a6", + "runId": "17f33b96-f26d-46a9-b71f-0d95eb6c6f8a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-4a2e0b29-715b-4484-8e60-d79b0f39cb5a", + "runId": "c2d4b23b-5c65-4a64-bfbe-a475e7cb1ca6", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-ec88751d-9720-4eee-92d0-fc313487711e", + "runId": "bcec6f73-5d27-4378-b12f-bd0dfe28ba9f", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-eb8c26de-d051-452f-8714-c157524f661c", + "runId": "941567cd-cef1-4c47-97e4-1ad2d0d90cdf", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-f7a0749c-a3ca-4cc3-9b71-c849e9018ce2", + "runId": "3644c379-4ed8-48c3-9444-c993edbe85dc", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-6162c299-9c6a-4194-8580-8c739d0f813b", + "runId": "aaf8367f-b481-4bf7-ba94-9d4964bfeb3a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-9ebc037a-ad87-4dbc-b1b2-5a290d70a8a7", + "runId": "30ce4f43-392d-4be1-80be-dc2337c030ef", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-0e7ea652-e5ee-4f8c-bb06-031d9539ce04", + "runId": "02488550-407c-41c7-a123-95c2b3dc7c05", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-bdd95534-e48b-4b91-b5db-a12aa63b34ed", + "runId": "1dec1652-c205-455a-aff6-0937fb484e0d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-5f02867f-610a-4d87-a364-97dd0b08f918", + "runId": "05f77e13-3d9e-4009-966b-a52c3a2fbceb", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-1b4be49f-c7f2-4922-b056-21c43d65123e", + "runId": "eb4f34e2-32d0-4fd2-a486-9987b44f259d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c3293f01-8aae-42cd-abdd-e222ac34ecba", + "runId": "6ba0d4f1-1528-450c-8783-114a9af03ef6", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-7b317fd4-76bb-47e4-b88f-6a65b458f2ac", + "runId": "d4cfdba0-2454-44a0-a5de-75df72844a76", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-884b75f8-cf51-4da8-b0c5-a96c3d45e385", + "runId": "c75f6c0f-a315-4289-a8c2-03c282497a82", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-1dd56f57-5486-4731-8a42-e29085b79caf", + "runId": "79a1524e-d681-4d82-a18c-6c71945d8d89", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-0fd57e59-572f-4e28-a13f-8c3717e2fdfc", + "runId": "6707a411-956e-4960-af33-ef91f16cf868", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-9a1f2c91-5b63-4e52-8d86-c56e0ae8e386", + "runId": "ac3f79c8-47ae-4c2f-9e53-31fbc00b4810", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-64a9ea61-c744-4d3e-846e-3ee142e0725a", + "runId": "7f1997b7-5639-4ff3-a0ad-9a1ca062dde7", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-b707f7c4-513a-480f-bafd-53ea1a801454", + "runId": "54775196-44c8-4aba-9dae-78a1892cbda1", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-f5c3bf7e-d7d4-4d8f-942b-3f5a2f76d278", + "runId": "89627585-6d38-498a-b76d-55f38e222fa0", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-6b92d048-d980-4736-8d9e-02b527704fa9", + "runId": "4330f8ab-9b76-412a-92dc-0afe75c2857e", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-46be225f-b3db-4725-aadf-9d2ea329bb2d", + "runId": "ef5286c7-a967-4d0d-9bbd-e98301dd8273", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-b57eea06-5ba8-4cd7-8478-0e365f6ecff1", + "runId": "c3811d5c-6ecd-4018-9772-12a12e7e8222", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-27222f14-a983-4cf3-99aa-175701051c58", + "runId": "ec122808-2508-4ccf-b7ce-22e6f463145b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-49f23986-9095-4e09-8261-5100930c9364", + "runId": "4a2178c6-f68c-450d-93b9-32406bd73242", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-4df24994-072e-446c-868a-8be0a0de8b07", + "runId": "713e06f6-674c-4a3a-b93a-53c11621a752", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-68568e4d-c162-4b37-b779-0e032bf43253", + "runId": "cbcb62ea-b2a5-4791-a7f0-3c65e3c549f8", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-4b3d0484-0fda-4efd-be88-d334724dc5cc", + "runId": "83976707-6fe0-4b63-afc9-27c7c0168735", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-147dd7e5-1324-44c8-912b-0aecd617a2aa", + "runId": "6d3ee392-facc-4b44-a122-f2b320930abd", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-0e89f5e5-dee6-4bdf-83dd-2169c72b5d93", + "runId": "03816664-79c9-40a1-86fe-4ddd73a0dfd1", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d60de2bf-fb1a-4aae-ae49-7d4816b00f64", + "runId": "5c7555c1-5e3f-4a3b-bb7c-773f189a423c", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d2206d81-7c91-47fc-9fc2-3fb19451eaab", + "runId": "522a47f8-b588-4f84-82b1-1072e9644377", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c396301a-945c-42d6-a626-1d6553aa2ea2", + "runId": "2cdfc476-1d33-427c-8de0-7309d5be9835", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-99fc93d1-a8fe-4628-97a3-dfa539d31e27", + "runId": "4c8e94ce-ad2a-4f1d-984b-5bd0998d7629", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c3859b4a-8ca1-4a0d-b60c-5e7ef8672719", + "runId": "a3f36295-084b-45de-a426-f581444d5f5a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-cded7ca3-2bd4-4046-ad13-f80d05da7ded", + "runId": "fabc990a-6931-4715-8c91-2009ad3c1816", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-ecbb87bf-820e-4dfd-8828-eb3e1b90bc97", + "runId": "947c0802-4d40-463c-a31a-5fd17a549c25", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-95cb9b26-746b-4874-a642-2195a09b7702", + "runId": "1433892f-f712-4492-9e52-d3f129fe9d23", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-2828dc2f-8896-4411-a74c-450751b1a956", + "runId": "c4d9d51f-732d-4528-af33-3cb597245f9f", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-099782cd-0c2d-4aa8-80d1-9b2c97459d53", + "runId": "094de832-d5ba-4e87-9760-16515b6f5c4f", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-93f63335-309e-4007-a88e-1c6050ddd2db", + "runId": "8e2fee73-677f-48f8-b9c5-d5c4a3b43129", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-6d15731a-1c9a-4b1f-9a2a-2db18c1f225f", + "runId": "85600be8-db7c-4c0d-bc3a-b5ea30e52f0b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-7880ef6e-1df8-4f1f-b9cb-1e6f2fdada37", + "runId": "caab72c8-13ae-4f0b-9c0c-4510808fbd1d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-442170d1-8eae-4354-bdb0-fd737028ef85", + "runId": "82ee9e9d-1a05-4d81-ae35-5bc429cfe599", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-993bd8ca-7b77-483d-913b-7f3157e744eb", + "runId": "957be67c-916d-4819-922e-f3481947348d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-a50b9b27-56f4-4ceb-83fb-d557dd213cd3", + "runId": "204c4d87-4ad8-4d26-820b-92acf7c6b572", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-e5a2aafd-b927-4e42-8b98-8a9db4ac4e20", + "runId": "060f5026-89c2-4898-a331-62ac1093500d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-acd6e03c-6df9-4484-9fb8-783a236c780b", + "runId": "ce80c0cf-9388-49d9-9b27-d9c421a21bb4", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-98d51bcc-32a9-45b7-90d1-dce6e7db035b", + "runId": "53aa5e8f-f8a4-485a-bbe2-1b83a32caf9b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-9e3324cd-a9fa-44b1-953c-560c2addc9ab", + "runId": "58ed9f65-4fa6-40f5-8ca3-a2c184dddef2", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-6389fb14-fcca-4880-bb19-0cc19fcea0ed", + "runId": "0cc9b756-083a-44cd-bd9f-35d5a49e4a83", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d79e01d0-fc8e-44ca-9adf-b9d4e5e4fc8f", + "runId": "49448e06-cdd0-4ee0-8797-2c937f2392ee", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-680a3540-573c-42a0-8d8e-1bbf66a2c8b3", + "runId": "321218c3-4675-42b7-8c23-7eadbcd70fbc", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d16fa4f0-3a62-4980-8055-4d9463219f33", + "runId": "bacf2b9f-3fae-4493-a468-72bcc19c2f9d", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-5551ee2d-affd-4cce-9a17-9708e83fb9b6", + "runId": "67944706-3d3f-4560-a454-c163b54156c8", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-e1a24d9a-4794-49a1-8331-a906229c6ac1", + "runId": "1f9ac8cf-5a84-47cb-8638-6102a3d44905", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-cb45b77b-ece6-464f-af3a-4ae54c55d373", + "runId": "ecef8701-7583-4d37-b242-2a530cb71144", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-95aa840b-a8f5-4e43-8e0a-07c86fc8d2a6", + "runId": "d6fe8ecc-293a-4957-b40d-23d138703569", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-660f2e52-2703-4660-a315-f43b02447d8c", + "runId": "79d79f88-0161-4c14-8dab-0d57d66795cb", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c8499050-0cf0-4a80-9575-73726214749e", + "runId": "21e1d342-1cd1-4f52-addb-33a19a314119", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d9f7b679-3c52-4a66-b462-582dab7c4163", + "runId": "aac89522-68f2-4f01-8c56-60b8039de4c2", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d7de60ec-ca07-4216-9021-d37b2e37c68f", + "runId": "de99ea6f-bf3d-4ca6-98af-99a337c3ae14", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c3eb2cbc-9fc6-42a9-8e9c-b0b30510cd2a", + "runId": "8650c72b-1cad-4c01-b2fd-792c839ff12a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-0b1a0146-880a-4fbe-9475-ba4e91a22d1e", + "runId": "1435ed85-40c9-4c2e-942e-5c24bbdff776", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-1b3a100b-29d4-4d99-930c-78cfb5d5a45e", + "runId": "e17ffc55-b1e8-4645-bbf7-593f2d75bc04", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-19da9605-210a-4e25-a6b7-913d7bf10989", + "runId": "8a660639-7cfd-4d30-836d-b018f5ee8bad", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-4e67b3a1-40e9-40b1-b111-28842751fc61", + "runId": "7fdb25b8-6bdd-4996-89c9-6f7a04c7b2b8", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-05313e7f-8c71-4135-84a5-8b1a8be128b2", + "runId": "479055a9-d72c-4cad-bb90-bd170805ab35", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-7c91eca6-53fb-4706-8d9d-19f41c4839f4", + "runId": "97728079-57da-4214-a3d3-2d61a2bf2866", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-183c4c38-1722-4153-b561-f7eff054d89b", + "runId": "81c68dd0-0c9a-40cc-8abf-67b3534f2630", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-ccab2c06-6b14-4f7d-9177-5d07bc449160", + "runId": "5e843c24-3bb8-4cbc-9579-8afd5f0f323a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-a19e9cf5-55a2-4b42-8be0-13d7537ce6a6", + "runId": "7dff7cea-ecfb-457f-9042-c4077ff97d22", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-f74bbd12-f537-4166-ac29-ffa7ef4db922", + "runId": "07f34a89-0d10-4acb-9a9b-6bb1c125ac89", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-fdf42cda-4731-458a-9b7f-e6531e69d1de", + "runId": "f58bfcf1-acc3-40bf-912b-fd845e27715c", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-186e9844-71fe-4618-9c90-5e864a054774", + "runId": "22e46cae-7564-4bd5-9947-24a039404fd4", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-a8c78735-c9e1-4f03-8558-9a6166d23ff3", + "runId": "3d838982-27f3-4c34-bed7-8b73e570a151", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c1fc2043-7ad0-4b07-b629-29e99a3e6151", + "runId": "ac3d27e0-4088-4ed3-9b84-5b48d9271d6f", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d63d977d-b67c-4279-aa21-17636fa4e0af", + "runId": "881f476b-a8af-4e0d-9a9f-b1c250abf3c7", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-ce9b3eaa-45ff-4867-865b-ce62bf8af00e", + "runId": "366ef1f9-bb15-4b2b-beff-e9bb3a55e074", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-46873e19-9207-45e1-9e53-4de8e1fb32c4", + "runId": "4fd6667b-6d5d-4b31-9de3-a817d98a6fa9", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-8c220709-0d88-45bc-8cb2-89e5df50f8b2", + "runId": "2776545f-20c4-42ff-9ea2-bc2943982170", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-daae19a0-0407-4dcf-ba46-6307ce6c33b7", + "runId": "2bb9f819-7cb6-4835-abe5-d78faced17fa", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c1c2bf98-bd5c-4cf8-b7a6-16699cbdfb0b", + "runId": "0aaa70cd-bc08-4391-9ee4-c3a8bd439a4f", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-9268bce6-25b8-4a89-88ab-d916219dbede", + "runId": "bd543d26-5c2d-485a-8c4d-85d2d7a01eee", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-b65a97e3-3ed7-423a-96e2-e861f1c6e7c9", + "runId": "976a53ab-f464-4b53-80d7-432d22d108e8", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-f08d6f17-c6a8-43fa-af89-f29690a21684", + "runId": "4dd94990-7dfd-4538-a6ab-21fc398ff8e0", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-ad890e59-a055-4a36-ba46-3b84e8550488", + "runId": "53e8e68c-44ac-481e-92e7-8095d184dde5", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-d1e9c3a7-7a10-4985-9d0e-f2821a69744a", + "runId": "238c16f4-5acf-4c40-b76e-5c841d5930ed", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-4a9c0bc7-18c1-47aa-ae5a-e53869387d70", + "runId": "fdb2439d-b2a8-4960-8776-f45589473f84", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-7244e955-ccdc-4e13-9a11-73c46bfdeeab", + "runId": "d03b6222-843a-489a-9e2d-d8bce92cd32a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-c6e84a18-cab1-45f8-bca9-e4d457818b73", + "runId": "2eb13a34-6ff4-4d2e-a464-49a30753f20a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-728851ba-0da3-40f6-85b4-6c7ef15a4759", + "runId": "938778c7-dd26-4103-8865-47b461240b9e", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-8bd8390c-e9d6-453c-bc9e-b3342d01705a", + "runId": "6f7b1d3f-e258-4187-8fc5-fe703cba883b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-3b0413bb-603f-4e23-84e7-c730dfa0a99f", + "runId": "439ff0b2-8413-48f7-818b-40bc0a48573a", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-31c3722b-3673-40cb-aa59-0531667da344", + "runId": "632695c3-6fd1-4db0-81b8-7bc1a8e8a3be", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-8af91378-355b-4b3b-b232-76522ef99369", + "runId": "b0b3b4f7-1450-468a-95ba-cb47c0e16699", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-185f899c-8edb-4f1c-94a2-b93457f90126", + "runId": "6823f456-3901-4319-a574-1757ee2560c1", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + }, + { + "workflowId": "totally-fictional-child-worflow-with-an-intentionally-long-name-16980317-4d6f-4261-968b-119f159f1c5b", + "runId": "2f916461-511a-4223-81bc-bddd42950e1b", + "workflowTypeName": "TotallyRealChildWorkflow", + "initiatedId": "5", + "parentClosePolicy": "Terminate" + } + ], + "pendingWorkflowTask": null +} diff --git a/src/lib/components/advanced-visibility-guard.svelte b/src/lib/components/advanced-visibility-guard.svelte new file mode 100644 index 000000000..bc929153a --- /dev/null +++ b/src/lib/components/advanced-visibility-guard.svelte @@ -0,0 +1,9 @@ + + +{#if $supportsAdvancedVisibility} + +{:else} + +{/if} diff --git a/src/lib/components/auto-refresh-workflow.svelte b/src/lib/components/auto-refresh-workflow.svelte index d19689d78..bf58337e3 100644 --- a/src/lib/components/auto-refresh-workflow.svelte +++ b/src/lib/components/auto-refresh-workflow.svelte @@ -9,7 +9,9 @@ $: checked = $autoRefreshWorkflow === 'on'; - - - - + diff --git a/src/lib/components/event/event-details-row-expanded.svelte b/src/lib/components/event/event-details-row-expanded.svelte index 4775da7f3..b89661147 100644 --- a/src/lib/components/event/event-details-row-expanded.svelte +++ b/src/lib/components/event/event-details-row-expanded.svelte @@ -3,8 +3,7 @@ import { format } from '$lib/utilities/format-camel-case'; import { - routeForWorkflow, - routeForWorkers, + routeForEventHistory, routeForTaskQueue, } from '$lib/utilities/route-for'; import { @@ -19,6 +18,7 @@ import Link from '$lib/holocene/link.svelte'; import Copyable from '../copyable.svelte'; import type { CombinedAttributes } from '$lib/utilities/format-event-attributes'; + import { eventViewType } from '$lib/stores/event-view'; export let key: string; export let value: string | Record; @@ -50,7 +50,12 @@ > {value} @@ -64,7 +69,8 @@ ; @@ -45,7 +46,12 @@ > {value} @@ -59,7 +65,8 @@
-

Select a namespace

+

Select a Namespace

{#if $page.params?.namespace}

You are currently viewing {$page.params.namespace}

{/if} diff --git a/src/lib/components/schedule/schedule-form-view.svelte b/src/lib/components/schedule/schedule-form-view.svelte index de6a22775..72637d861 100644 --- a/src/lib/components/schedule/schedule-form-view.svelte +++ b/src/lib/components/schedule/schedule-form-view.svelte @@ -112,7 +112,7 @@ - - + + + Terminate + + + + {#if !actionsDisabled} diff --git a/src/lib/components/workflow/batch-operation-confirmation-modal.svelte b/src/lib/components/workflow/batch-operation-confirmation-modal.svelte new file mode 100644 index 000000000..5f138a813 --- /dev/null +++ b/src/lib/components/workflow/batch-operation-confirmation-modal.svelte @@ -0,0 +1,80 @@ + + + +

{action} Workflows

+ +
+ {#if allSelected} +

+ Are you sure you want to {action.toLowerCase()} all worklfows matching + the following query? This action cannot be undone. +

+
+ + {query} + +
+ Note: The actual count of workflows that will be affected is the + total number of running workflows matching this query at the time of + clicking "{confirmText}". + {:else} +

+ Are you sure you want to {action.toLowerCase()} + {actionableWorkflowsLength} running {pluralize( + 'workflow', + actionableWorkflowsLength, + )}? +

+ {/if} +
+ +
+
diff --git a/src/lib/components/workflow/child-workflows-table.svelte b/src/lib/components/workflow/child-workflows-table.svelte new file mode 100644 index 000000000..6ed7fe2b0 --- /dev/null +++ b/src/lib/components/workflow/child-workflows-table.svelte @@ -0,0 +1,38 @@ + + + + + + + + + {#each visibleItems as child (child.runId)} + + + + + {/each} +
Child Workflow IDChild Run ID + {child.workflowId} + + {child.runId} +
+
diff --git a/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte b/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte new file mode 100644 index 000000000..ac1f9ace9 --- /dev/null +++ b/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte @@ -0,0 +1,43 @@ + + +
+ + + + + (time = 'AM')} + >AM + (time = 'PM')} + >PM + +
diff --git a/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte b/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte index c8a24a9b3..19cc445b7 100644 --- a/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte +++ b/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte @@ -5,7 +5,6 @@ addHours, addMinutes, addSeconds, - endOfDay, formatISO, startOfDay, } from 'date-fns'; @@ -19,26 +18,45 @@ import { workflowFilters, workflowSorts } from '$lib/stores/filters'; import DatePicker from '$lib/holocene/date-picker.svelte'; import Button from '$lib/holocene/button.svelte'; - import { onMount } from 'svelte'; import TimePicker from '$lib/holocene/time-picker.svelte'; import { updateQueryParamsFromFilter } from '$lib/utilities/query/to-list-workflow-filters'; import { page } from '$app/stores'; import Icon from '$lib/holocene/icon/icon.svelte'; + import MenuItem from '$lib/holocene/primitives/menu/menu-item.svelte'; let custom = false; let show = false; let value = 'All Time'; let timeField = 'StartTime'; - onMount(() => { - const timeFilter = $workflowFilters.find( - (f) => f.attribute === 'StartTime' || f.attribute === 'CloseTime', - ); - if (timeFilter) { - value = timeFilter.value; + let startDate = startOfDay(new Date()); + let endDate = startOfDay(new Date()); + + let startHour = ''; + let startMinute = ''; + let startSecond = ''; + let startHalf: 'AM' | 'PM' = 'AM'; + + let endHour = ''; + let endMinute = ''; + let endSecond = ''; + let endHalf: 'AM' | 'PM' = 'AM'; + + $: timeFilter = $workflowFilters.find( + (f) => f.attribute === 'StartTime' || f.attribute === 'CloseTime', + ); + + const setTimeValues = () => { + if (!timeFilter) { + value = 'All Time'; + timeField = 'StartTime'; + } else { + value = custom ? 'Custom' : timeFilter.value; timeField = timeFilter.attribute as string; } - }); + }; + + $: timeFilter, setTimeValues(); const getOtherFilters = () => $workflowFilters.filter( @@ -74,41 +92,54 @@ } }; - let startDate = startOfDay(new Date()); - let endDate = endOfDay(new Date()); - let startTime = { hour: '', minute: '', second: '' }; - let endTime = { hour: '', minute: '', second: '' }; - const onStartDateChange = (d) => { startDate = startOfDay(d.detail); }; - const onStartDateTimeChange = (d) => { - startTime = d.detail; - }; - const onEndDateChange = (d) => { endDate = startOfDay(d.detail); }; - const onEndDateTimeChange = (d) => { - endTime = d.detail; - }; - const applyTimeChanges = (date: Date, time) => { let _date = new Date(date); if (time.hour) _date = addHours(_date, time.hour); if (time.minute) _date = addMinutes(_date, time.minute); if (time.second) _date = addSeconds(_date, time.second); + return _date; }; + const setHours = (hour: string, half: 'AM' | 'PM') => { + if (hour) { + if (hour === '12') { + return half === 'AM' ? '00' : '12'; + } else if (half === 'PM') { + return (parseInt(hour) + 12).toString(); + } else { + return hour; + } + } else { + hour = ''; + } + }; + const onApply = () => { - startDate = applyTimeChanges(startDate, startTime); - endDate = applyTimeChanges(endDate, endTime); + let startDateWithTime = applyTimeChanges(startDate, { + hour: setHours(startHour, startHalf), + minute: startMinute, + second: startSecond, + }); + let endDateWithTime = applyTimeChanges(endDate, { + hour: setHours(endHour, endHalf), + minute: endMinute, + second: endSecond, + }); + const filter = { attribute: timeField, - value: `BETWEEN "${formatISO(startDate)}" AND "${formatISO(endDate)}"`, + value: `BETWEEN "${formatISO(startDateWithTime)}" AND "${formatISO( + endDateWithTime, + )}"`, conditional: '=', operator: '', parenthesis: '', @@ -142,20 +173,30 @@ > {#if custom}
-

To

-
+

Start

+
- +
-

From

-
+

End

+
- +
@@ -180,7 +221,7 @@ {/each}
-
onTimeFieldChange('StartTime')} @@ -191,10 +232,10 @@ {/if}
Start Time -
+
-
onTimeFieldChange('CloseTime')} @@ -205,7 +246,7 @@ {/if}
End Time -
+
@@ -220,13 +261,9 @@ label={capitalize($timeFormat)} icon="clock" > -
($timeFormat = 'relative')} class="timezone-label"> - Relative -
-
($timeFormat = 'UTC')} class="timezone-label">UTC
-
($timeFormat = 'local')} class="timezone-label"> - Local -
+ ($timeFormat = 'relative')}>Relative + ($timeFormat = 'UTC')}>UTC + ($timeFormat = 'local')}>Local
diff --git a/src/lib/components/workflow/dropdown-filter/workflow-id.svelte b/src/lib/components/workflow/dropdown-filter/workflow-id.svelte index af7db383c..1361c6ffa 100644 --- a/src/lib/components/workflow/dropdown-filter/workflow-id.svelte +++ b/src/lib/components/workflow/dropdown-filter/workflow-id.svelte @@ -54,12 +54,12 @@ dataCy="workflow-id-filter-button" on:showmenu={handleShowInput} > - Workflow Id + Workflow ID
Status
{#each Object.entries(AllStatuses) as [label, _value] (_value)} -
onStatusClick(_value)} @@ -122,7 +122,7 @@ {/if}
-
+ {/each}
diff --git a/src/lib/components/workflow/pending-activities.svelte b/src/lib/components/workflow/pending-activities.svelte index 7514f7e17..fe2f1df28 100644 --- a/src/lib/components/workflow/pending-activities.svelte +++ b/src/lib/components/workflow/pending-activities.svelte @@ -15,11 +15,13 @@ } from '$lib/utilities/format-event-attributes'; import { toTimeDifference } from '$lib/utilities/to-time-difference'; - const { namespace, run } = $page.params; - const { workflow } = $workflowRun; - const { pendingActivities, defaultWorkflowTaskTimeout, id } = workflow; + $: pendingActivities = $workflowRun.workflow.pendingActivities; - const href = routeForPendingActivities({ namespace, workflow: id, run }); + $: href = routeForPendingActivities({ + namespace: $page.params.namespace, + workflow: $page.params.workflow, + run: $page.params.run, + }); {#if pendingActivities.length} @@ -92,32 +94,28 @@ - {#if failed} -
- {#if pendingActivity.heartbeatDetails} -
-

- Heartbeat Details -

- -
- {/if} - {#if pendingActivity.lastFailure} -
-

- Last Failure -

- -
- {/if} -
- {/if} +
+ {#if pendingActivity?.heartbeatDetails} +
+

+ Heartbeat Details +

+ +
+ {/if} + {#if pendingActivity?.lastFailure} +
+

Last Failure

+ +
+ {/if} +
diff --git a/src/lib/components/workflow/workflow-advanced-search.svelte b/src/lib/components/workflow/workflow-advanced-search.svelte index e6ea11ab9..0a1525c59 100644 --- a/src/lib/components/workflow/workflow-advanced-search.svelte +++ b/src/lib/components/workflow/workflow-advanced-search.svelte @@ -9,6 +9,7 @@ import Button from '$lib/holocene/button.svelte'; import { workflowFilters, workflowSorts } from '$lib/stores/filters'; import { toListWorkflowFilters } from '$lib/utilities/query/to-list-workflow-filters'; + import { workflowsQuery } from '$lib/stores/workflows'; let manualSearchString = ''; @@ -26,6 +27,7 @@ if (!manualSearchString) { $workflowFilters = []; $workflowSorts = []; + $workflowsQuery = ''; } else { try { $workflowFilters = toListWorkflowFilters(manualSearchString); diff --git a/src/lib/components/workflow/workflows-summary-row-with-filters.svelte b/src/lib/components/workflow/workflows-summary-row-with-filters.svelte index 2dc0fc256..ed8c77550 100644 --- a/src/lib/components/workflow/workflows-summary-row-with-filters.svelte +++ b/src/lib/components/workflow/workflows-summary-row-with-filters.svelte @@ -1,20 +1,32 @@ + {#if bulkActionsEnabled} + +
+ +
+ + {/if} onRowFilterClick('WorkflowId', workflow.id)} + filtered={Boolean( + $workflowFilters.find( + (f) => f.attribute === 'WorkflowId' && f.value === workflow.id, + ), + )} />

{formatDate(workflow.startTime, timeFormat)} @@ -79,14 +116,18 @@

Workflow Name:

onTypeClick(workflow.name)} - >{workflow.name} + onRowFilterClick('WorkflowType', workflow.name)}>{workflow.name} onTypeClick(workflow.name)} - filtered={$page.url?.searchParams?.get('query')?.includes(workflow.name)} + onFilter={() => onRowFilterClick('WorkflowType', workflow.name)} + filtered={Boolean( + $workflowFilters.find( + (f) => f.attribute === 'WorkflowType' && f.value === workflow.name, + ), + )} />

{formatDate(workflow.endTime, timeFormat)} diff --git a/src/lib/components/workflow/workflows-summary-row.svelte b/src/lib/components/workflow/workflows-summary-row.svelte index 8e078e331..fa39a2ab4 100644 --- a/src/lib/components/workflow/workflows-summary-row.svelte +++ b/src/lib/components/workflow/workflows-summary-row.svelte @@ -3,23 +3,22 @@ import { formatDate } from '$lib/utilities/format-date'; import { getMilliseconds } from '$lib/utilities/format-time'; - import { routeForWorkflow } from '$lib/utilities/route-for'; + import { routeForEventHistory } from '$lib/utilities/route-for'; import { updateQueryParameters } from '$lib/utilities/update-query-parameters'; import { toListWorkflowQuery } from '$lib/utilities/query/list-workflow-query'; import { toListWorkflowParameters } from '$lib/utilities/query/to-list-workflow-parameters'; import WorkflowStatus from '$lib/components/workflow-status.svelte'; import FilterOrCopyButtons from '$holocene/filter-or-copy-buttons.svelte'; - import SelectableTableRow from '$holocene/table/selectable-table-row.svelte'; import TableRow from '$lib/holocene/table/table-row.svelte'; + import { eventViewType } from '$lib/stores/event-view'; - export let bulkActionsEnabled: boolean = false; - export let selected: boolean = false; export let namespace: string; export let workflow: WorkflowExecution; export let timeFormat: TimeFormat | string; - $: href = routeForWorkflow({ + $: href = routeForEventHistory({ + view: $eventViewType, namespace, workflow: workflow.id, run: workflow.runId, @@ -45,13 +44,7 @@ }; - + - + diff --git a/src/lib/holocene/namespace-selector.svelte b/src/lib/holocene/namespace-selector.svelte index b376ebdde..c9a670995 100644 --- a/src/lib/holocene/namespace-selector.svelte +++ b/src/lib/holocene/namespace-selector.svelte @@ -10,7 +10,7 @@ } - +