cadence-web
Version:
Cadence Web UI
91 lines (78 loc) • 2.83 kB
JavaScript
// Copyright (c) 2021-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.
const { mapHistoryResponse } = require('../helpers');
const workflowHandler = async ctx => {
try {
const describeResponse = await ctx.cadence.describeWorkflow();
if (describeResponse.workflowExecutionInfo) {
describeResponse.workflowExecutionInfo.closeEvent = null;
if (describeResponse.workflowExecutionInfo.closeStatus) {
const closeEventResponse = await ctx.cadence.getHistory({
HistoryEventFilterType: 'CLOSE_EVENT',
});
describeResponse.workflowExecutionInfo.closeEvent = mapHistoryResponse(
closeEventResponse.history
)[0];
}
}
ctx.body = describeResponse;
} catch (error) {
if (error.name !== 'NotFoundError') {
throw error;
}
const archivedHistoryResponse = await ctx.cadence.getHistory();
const archivedHistoryEvents = mapHistoryResponse(
archivedHistoryResponse.history
);
if (!archivedHistoryEvents.length) {
throw error;
}
const { runId, workflowId } = ctx.params;
const {
timestamp: startTime,
details: {
taskList,
executionStartToCloseTimeoutSeconds,
taskStartToCloseTimeoutSeconds,
workflowType: type,
},
} = archivedHistoryEvents[0];
ctx.body = {
executionConfiguration: {
taskList,
executionStartToCloseTimeoutSeconds,
taskStartToCloseTimeoutSeconds,
},
workflowExecutionInfo: {
execution: {
runId,
workflowId,
},
isArchived: true,
startTime,
type,
},
pendingActivities: null,
pendingChildren: null,
};
}
};
module.exports = workflowHandler;