client/containers/workflow/helpers/get-summary.js (59 lines of code) (raw):

// Copyright (c) 2017-2024 Uber Technologies Inc. // // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import getSummaryWorkflowStatus from './get-summary-workflow-status'; import parentWorkflowLink from './parent-workflow-link'; import { getJsonStringObject, getKeyValuePairs } from '~helpers'; const getSummary = ({ clusterName, events, isWorkflowRunning, workflow }) => { const formattedWorkflow = workflow.pendingActivities ? { ...workflow, pendingActivities: workflow.pendingActivities.map(item => ({ ...item, kvps: getKeyValuePairs({ clusterName, item }), })), } : workflow; if (!events || !events.length) { return { input: undefined, isWorkflowRunning, cronSchedule: undefined, parentWorkflowRoute: undefined, result: undefined, wfStatus: undefined, workflow: formattedWorkflow, }; } const firstEvent = events[0]; const lastEvent = workflow.workflowExecutionInfo.closeEvent || (events.length > 1 && events[events.length - 1]); const input = getJsonStringObject(firstEvent.details.input); const workflowCompletedEvent = lastEvent && lastEvent.eventType.startsWith('WorkflowExecution') ? lastEvent : undefined; const result = workflowCompletedEvent ? getJsonStringObject( workflowCompletedEvent.details.result || workflowCompletedEvent.details ) : undefined; const wfStatus = getSummaryWorkflowStatus({ clusterName, isWorkflowRunning, workflow, workflowCompletedEvent, }); const parentWorkflowRoute = parentWorkflowLink({ clusterName, eventDetails: firstEvent.details, }); return { input, cronSchedule: firstEvent.details.cronSchedule, isWorkflowRunning, parentWorkflowRoute, result, wfStatus, workflow: formattedWorkflow, }; }; export default getSummary;