@skbkontur/cassandra-distributed-task-queue-ui
Version:
.NET library implementing distributed task queue machinery using Apache Cassandra
183 lines • 10.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskTimeLine = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const edi_ui_1 = require("@skbkontur/edi-ui");
const ArrowADownIcon16Regular_1 = require("@skbkontur/icons/ArrowADownIcon16Regular");
const ArrowAUpIcon16Regular_1 = require("@skbkontur/icons/ArrowAUpIcon16Regular");
const ArrowDCornerDownRightIcon16Regular_1 = require("@skbkontur/icons/ArrowDCornerDownRightIcon16Regular");
const ArrowRoundTimeForwardIcon16Regular_1 = require("@skbkontur/icons/ArrowRoundTimeForwardIcon16Regular");
const ArrowShapeTriangleADownIcon16Regular_1 = require("@skbkontur/icons/ArrowShapeTriangleADownIcon16Regular");
const CheckAIcon16Regular_1 = require("@skbkontur/icons/CheckAIcon16Regular");
const NetDownloadIcon16Regular_1 = require("@skbkontur/icons/NetDownloadIcon16Regular");
const TimeClockIcon16Regular_1 = require("@skbkontur/icons/TimeClockIcon16Regular");
const XCircleIcon16Regular_1 = require("@skbkontur/icons/XCircleIcon16Regular");
const XIcon16Regular_1 = require("@skbkontur/icons/XIcon16Regular");
const react_ui_1 = require("@skbkontur/react-ui");
const react_1 = tslib_1.__importDefault(require("react"));
const TaskState_1 = require("../../Domain/Api/TaskState");
const RouterLink_1 = require("../RouterLink/RouterLink");
const TaskStateIcon_1 = require("../TaskChainTree/TaskStateIcon");
const TaskTimeLine_styles_1 = require("./TaskTimeLine.styles");
const TimeLine_1 = require("./TimeLine/TimeLine");
const TimeLineEntry = TimeLine_1.TimeLine.Entry;
const alwaysVisibleTaskIdsCount = 3;
function TaskTimeLine({ taskMeta, childTaskIds, getHrefToTask }) {
const [showAllErrors, setShowAllErrors] = react_1.default.useState(false);
const theme = react_1.default.useContext(react_ui_1.ThemeContext);
const createSimpleEntry = (entry) => {
return (jsx_runtime_1.jsxs(TimeLineEntry, Object.assign({ icon: entry.icon }, { children: [jsx_runtime_1.jsx("div", Object.assign({ style: { color: entry.color } }, { children: entry.title }), void 0), entry.date && (jsx_runtime_1.jsx("div", Object.assign({ className: TaskTimeLine_styles_1.jsStyles.date(theme) }, { children: jsx_runtime_1.jsx(edi_ui_1.Timestamp, { value: entry.date }, void 0) }), void 0))] }), entry.title));
};
const getStartedEntry = () => {
if (!taskMeta.startExecutingTicks) {
return null;
}
return createSimpleEntry({
title: "Started",
icon: jsx_runtime_1.jsx(ArrowDCornerDownRightIcon16Regular_1.ArrowDCornerDownRightIcon16Regular, {}, void 0),
date: taskMeta.startExecutingTicks,
});
};
const getExecutionEntries = () => {
if (taskMeta.attempts === undefined || taskMeta.attempts === null || taskMeta.attempts === 0) {
return [getShouldStartedEntry(), getStartedEntry()];
}
const shouldStartAndStartEntries = [];
if (taskMeta.state === TaskState_1.TaskState.WaitingForRerun) {
shouldStartAndStartEntries.push(getStartedEntry(), createSimpleEntry({
title: "Finished",
icon: jsx_runtime_1.jsx(CheckAIcon16Regular_1.CheckAIcon16Regular, {}, void 0),
date: taskMeta.finishExecutingTicks,
}));
}
else if (taskMeta.state === TaskState_1.TaskState.WaitingForRerunAfterError) {
const color = TaskStateIcon_1.getIconColor(theme, "error");
shouldStartAndStartEntries.push(getStartedEntry(), createSimpleEntry({
title: "Failed",
icon: jsx_runtime_1.jsx(XCircleIcon16Regular_1.XCircleIcon16Regular, { color: color }, void 0),
color: color,
date: taskMeta.finishExecutingTicks,
}));
}
else {
shouldStartAndStartEntries.push(getShouldStartedEntry(), getStartedEntry());
}
if (taskMeta.attempts !== undefined && taskMeta.attempts !== null && taskMeta.attempts > 1) {
const TimeLineCycled = TimeLine_1.TimeLine.Cycled;
return [
jsx_runtime_1.jsx(TimeLineCycled, Object.assign({ icon: jsx_runtime_1.jsx(ArrowRoundTimeForwardIcon16Regular_1.ArrowRoundTimeForwardIcon16Regular, {}, void 0), content: `Restarted for ${taskMeta.attempts} times` }, { children: shouldStartAndStartEntries }), "FewAttempts"),
];
}
return shouldStartAndStartEntries;
};
const getShouldStartedEntry = () => {
return createSimpleEntry({
title: "Start scheduled",
icon: jsx_runtime_1.jsx(TimeClockIcon16Regular_1.TimeClockIcon16Regular, {}, void 0),
date: taskMeta.minimalStartTicks,
});
};
const getCurrentStateEntries = () => {
if (taskMeta.state === TaskState_1.TaskState.Finished) {
const color = TaskStateIcon_1.getIconColor(theme, "success");
return [
createSimpleEntry({
title: "Finished",
icon: jsx_runtime_1.jsx(CheckAIcon16Regular_1.CheckAIcon16Regular, { color: color }, void 0),
color: color,
date: taskMeta.finishExecutingTicks,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.Fatal) {
const color = TaskStateIcon_1.getIconColor(theme, "error");
return [
createSimpleEntry({
title: "Failed",
icon: jsx_runtime_1.jsx(XCircleIcon16Regular_1.XCircleIcon16Regular, { color: color }, void 0),
color: color,
date: taskMeta.finishExecutingTicks,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.Canceled) {
const color = TaskStateIcon_1.getIconColor(theme, "error");
return [
createSimpleEntry({
title: "Canceled",
icon: jsx_runtime_1.jsx(XIcon16Regular_1.XIcon16Regular, { color: color }, void 0),
color: color,
date: taskMeta.finishExecutingTicks || taskMeta.lastModificationTicks,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.WaitingForRerun || taskMeta.state === TaskState_1.TaskState.WaitingForRerunAfterError) {
const color = TaskStateIcon_1.getIconColor(theme, "waiting");
return [
getShouldStartedEntry(),
createSimpleEntry({
title: "Waiting for next run",
icon: jsx_runtime_1.jsx(TimeClockIcon16Regular_1.TimeClockIcon16Regular, { color: color }, void 0),
color: color,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.InProcess) {
const color = TaskStateIcon_1.getIconColor(theme, "waiting");
return [
createSimpleEntry({
title: "Waiting for complete",
icon: jsx_runtime_1.jsx(TimeClockIcon16Regular_1.TimeClockIcon16Regular, { color: color }, void 0),
color: color,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.New) {
const color = TaskStateIcon_1.getIconColor(theme, "waiting");
return [
createSimpleEntry({
title: "Waiting for start",
icon: jsx_runtime_1.jsx(TimeClockIcon16Regular_1.TimeClockIcon16Regular, { color: color }, void 0),
color: color,
}),
];
}
if (taskMeta.state === TaskState_1.TaskState.Unknown) {
return [];
}
return [];
};
const getEnqueuedEntry = () => {
return createSimpleEntry({
title: "Enqueued",
icon: jsx_runtime_1.jsx(NetDownloadIcon16Regular_1.NetDownloadIcon16Regular, {}, void 0),
date: taskMeta.ticks,
});
};
const getChildrenTaskIdsEntry = () => {
if (childTaskIds && childTaskIds.length > 0) {
const visibleTaskIdsCount = showAllErrors ? childTaskIds.length : alwaysVisibleTaskIdsCount;
const hiddenTaskIdsCount = childTaskIds.length - visibleTaskIdsCount;
const color = TaskStateIcon_1.getIconColor(theme, "waiting");
return (jsx_runtime_1.jsx(TimeLineEntry, Object.assign({ icon: jsx_runtime_1.jsx(ArrowADownIcon16Regular_1.ArrowADownIcon16Regular, { color: color }, void 0) }, { children: jsx_runtime_1.jsxs("div", Object.assign({ style: { color: color }, "data-tid": "EnqueuedTasks" }, { children: [jsx_runtime_1.jsx("div", { children: "Enqueued tasks:" }, void 0), childTaskIds.slice(0, visibleTaskIdsCount).map(x => (jsx_runtime_1.jsx("div", Object.assign({ "data-tid": "TaskLink" }, { children: jsx_runtime_1.jsx(edi_ui_1.AllowCopyToClipboard, { children: jsx_runtime_1.jsx(RouterLink_1.RouterLink, Object.assign({ to: getHrefToTask(x) }, { children: x }), void 0) }, void 0) }), x))), hiddenTaskIdsCount > 0 && (jsx_runtime_1.jsxs(react_ui_1.Link, Object.assign({ "data-tid": "ShowAllTasks", onClick: () => setShowAllErrors(true) }, { children: ["...and ", hiddenTaskIdsCount, " more", "\u00A0", jsx_runtime_1.jsx(ArrowShapeTriangleADownIcon16Regular_1.ArrowShapeTriangleADownIcon16Regular, {}, void 0)] }), void 0))] }), void 0) }), "Children"));
}
return null;
};
const getParentTaskIdEntry = () => {
if (!taskMeta.parentTaskId) {
return null;
}
const color = TaskStateIcon_1.getIconColor(theme, "waiting");
return (jsx_runtime_1.jsx(TimeLineEntry, Object.assign({ icon: jsx_runtime_1.jsx(ArrowAUpIcon16Regular_1.ArrowAUpIcon16Regular, { color: color }, void 0) }, { children: jsx_runtime_1.jsxs("div", Object.assign({ style: { color: color } }, { children: ["Parent:", " ", jsx_runtime_1.jsx(edi_ui_1.AllowCopyToClipboard, { children: jsx_runtime_1.jsx(RouterLink_1.RouterLink, Object.assign({ to: getHrefToTask(taskMeta.parentTaskId) }, { children: taskMeta.parentTaskId }), void 0) }, void 0)] }), void 0) }), "Parent"));
};
return (jsx_runtime_1.jsx(TimeLine_1.TimeLine, { children: [
getParentTaskIdEntry(),
getEnqueuedEntry(),
...getExecutionEntries(),
...getCurrentStateEntries(),
getChildrenTaskIdsEntry(),
] }, void 0));
}
exports.TaskTimeLine = TaskTimeLine;
//# sourceMappingURL=TaskTimeLine.js.map