UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

562 lines (561 loc) 27.4 kB
import { C as computed, Cn as toDisplayString, D as createElementBlock, E as createCommentVNode, Gt as unref, It as ref, J as onBeforeUnmount, M as createVNode, P as defineComponent, T as createBlock, Z as onMounted, _ as Fragment, at as renderSlot, bt as withCtx, et as openBlock, it as renderList, j as createTextVNode, q as onBeforeMount, vn as normalizeClass, w as createBaseVNode } from "./vue.runtime.esm-bundler-tP5dCd7J.js"; import { _t as useI18n } from "./_MapCache-ficiegRb.js"; import { Cn as N8nSpinner_default, Ct as N8nActionBox_default, et as N8nCard_default, wn as N8nIcon_default, xn as N8nText_default, yn as N8nHeading_default } from "./src-DgvumQTi.js"; import "./en-CF30SCh2.js"; import "./preload-helper-CR0ecmWK.js"; import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js"; import { y as useRouter } from "./truncate-B1HVeveJ.js"; import { O as useTelemetry, Yn as useDocumentTitle, gs as useSettingsStore, v as useToast } from "./builder.store-sBTWwxRU.js"; import "./empty-BuGRxzl4.js"; import "./sanitize-html-Cc45ZKm8.js"; import "./CalendarDate-zWqgZMlk.js"; import "./path-browserify-BtCDmZ3_.js"; import "./constants-BbpucWL4.js"; import "./merge-k8vSyyXH.js"; import { r as useRootStore } from "./_baseOrderBy-B_6CV8x6.js"; import "./dateformat-CM9k0--B.js"; import "./useDebounce-Bnb8W2LR.js"; import "./assistant.store-bS9AHOoo.js"; import "./retry-dP46utx2.js"; import "./executions.store-CXjGPxs0.js"; import { i as usePushConnectionStore } from "./useRunWorkflow-BQJbxiOd.js"; import "./usePinnedData-CL2qWhwp.js"; import "./nodeCreator.store-FJrC_Pu6.js"; import "./nodeIcon-DI2Acud1.js"; import "./useCanvasOperations-CAHezq7d.js"; import "./folders.store-BjAwtSH4.js"; import "./versions.store-BwdT833-.js"; import { t as usePageRedirectionHelper } from "./usePageRedirectionHelper-fGNB6ZKK.js"; import "./banners.store-C9sgKjcT.js"; import { t as useClipboard } from "./useClipboard-CyG-SBdG.js"; import "./schemaPreview.store-BFprwUEe.js"; import { t as sortByProperty } from "./sortByProperty-CV1aCzkS.js"; import "./chart-CE3HWIkr.js"; import { t as PushConnectionTracker_default } from "./PushConnectionTracker-TnOaTBdr.js"; import { n as WORKER_HISTORY_LENGTH, r as useOrchestrationStore, t as usePushConnection } from "./usePushConnection-DTJahVkB.js"; import "./aiTemplatesStarterCollection.store-DkHa_nSs.js"; import "./readyToRun.store-CsvyRJzn.js"; import { n as Chart } from "./dist-DP_8je0B.js"; function averageWorkerLoadFromLoads(loads) { return loads.reduce((prev, curr) => prev + curr, 0) / loads.length; } function averageWorkerLoadFromLoadsAsString(loads) { return averageWorkerLoadFromLoads(loads).toFixed(2); } function memAsGb(mem, decimalPlaces = 2) { return Number((mem / 1024 / 1024 / 1024).toFixed(decimalPlaces)); } function memAsMb(mem, decimalPlaces = 2) { return Number((mem / 1024 / 1024).toFixed(decimalPlaces)); } var WorkerAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerAccordion", props: { icon: { default: "list-checks" }, iconColor: { default: "text-dark" }, initialExpanded: { type: Boolean, default: true } }, setup(__props) { const expanded$1 = ref(__props.initialExpanded); function toggle() { expanded$1.value = !expanded$1.value; } return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(["accordion", _ctx.$style.container]) }, [createBaseVNode("div", { class: normalizeClass({ [_ctx.$style.header]: true, [_ctx.$style.expanded]: expanded$1.value }), onClick: toggle }, [ createVNode(unref(N8nIcon_default), { icon: _ctx.icon, color: _ctx.iconColor, size: "small", class: "mr-2xs" }, null, 8, ["icon", "color"]), createVNode(unref(N8nText_default), { class: normalizeClass(_ctx.$style.headerText), color: "text-base", size: "small", align: "left", bold: "" }, { default: withCtx(() => [renderSlot(_ctx.$slots, "title")]), _: 3 }, 8, ["class"]), createVNode(unref(N8nIcon_default), { icon: expanded$1.value ? "chevron-up" : "chevron-down", bold: "" }, null, 8, ["icon"]) ], 2), expanded$1.value ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass({ [_ctx.$style.description]: true, [_ctx.$style.collapsed]: !expanded$1.value }) }, [renderSlot(_ctx.$slots, "content")], 2)) : createCommentVNode("", true)], 2); }; } }); var WorkerAccordion_vue_vue_type_style_index_0_lang_module_default = { container: "_container_1nnt5_123", header: "_header_1nnt5_127", headerText: "_headerText_1nnt5_133", expanded: "_expanded_1nnt5_137", description: "_description_1nnt5_141" }; var WorkerAccordion_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerAccordion_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerAccordion_vue_vue_type_style_index_0_lang_module_default }]]); var _hoisted_1$4 = ["href"]; var _hoisted_2$1 = ["href"]; var WorkerJobAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerJobAccordion", props: { items: {} }, setup(__props) { const props = __props; const i18n = useI18n(); function runningSince(started) { let seconds = Math.floor((/* @__PURE__ */ (/* @__PURE__ */ new Date()).getTime() - started.getTime()) / 1e3); const hrs = Math.floor(seconds / 3600); seconds -= hrs * 3600; const mnts = Math.floor(seconds / 60); seconds -= mnts * 60; return `${hrs}h ${mnts}m ${Math.floor(seconds)}s`; } return (_ctx, _cache) => { return openBlock(), createBlock(WorkerAccordion_default, { icon: "list-checks", "icon-color": "text-dark", "initial-expanded": true }, { title: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workerList.item.jobListTitle")) + " (" + toDisplayString(_ctx.items.length) + ") ", 1)]), content: withCtx(() => [props.items.length > 0 ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass(_ctx.$style.accordionItems) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item) => { return openBlock(), createElementBlock("div", { key: item.executionId, class: normalizeClass(_ctx.$style.accordionItem) }, [ createBaseVNode("a", { href: "/workflow/" + item.workflowId + "/executions/" + item.executionId }, " Execution " + toDisplayString(item.executionId) + " - " + toDisplayString(item.workflowName), 9, _hoisted_1$4), createVNode(unref(N8nText_default), { color: "text-base", size: "small", align: "left" }, { default: withCtx(() => [createTextVNode(" | Started at: " + toDisplayString(new Date(item.startedAt)?.toLocaleTimeString()) + " | Running for " + toDisplayString(runningSince(new Date(item.startedAt))) + " " + toDisplayString(item.retryOf ? `| Retry of: ${item.retryOf}` : "") + " | ", 1)]), _: 2 }, 1024), createBaseVNode("a", { target: "_blank", href: "/workflow/" + item.workflowId }, " (Open workflow)", 8, _hoisted_2$1) ], 2); }), 128))], 2)) : (openBlock(), createElementBlock("div", { key: 1, class: normalizeClass(_ctx.$style.accordionItems) }, [createBaseVNode("span", { class: normalizeClass(_ctx.$style.empty) }, toDisplayString(unref(i18n).baseText("workerList.item.jobList.empty")), 3)], 2))]), _: 1 }); }; } }); var WorkerJobAccordion_vue_vue_type_style_index_0_lang_module_default = { accordionItems: "_accordionItems_pocpt_123", accordionItem: "_accordionItem_pocpt_123", empty: "_empty_pocpt_136" }; var WorkerJobAccordion_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerJobAccordion_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerJobAccordion_vue_vue_type_style_index_0_lang_module_default }]]); var _hoisted_1$3 = ["onClick"]; var WorkerNetAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerNetAccordion", props: { items: {} }, setup(__props) { const props = __props; const i18n = useI18n(); const clipboard = useClipboard(); const { showMessage } = useToast(); function onCopyToClipboard(content) { try { clipboard.copy(content); showMessage({ title: i18n.baseText("workerList.item.copyAddressToClipboard"), type: "success" }); } catch {} } return (_ctx, _cache) => { return openBlock(), createBlock(WorkerAccordion_default, { icon: "list-checks", "icon-color": "text-dark", "initial-expanded": false }, { title: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workerList.item.netListTitle")) + " (" + toDisplayString(_ctx.items.length) + ") ", 1)]), content: withCtx(() => [props.items.length > 0 ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass(_ctx.$style.accordionItems) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item) => { return openBlock(), createElementBlock("div", { key: item.address, class: normalizeClass(_ctx.$style.accordionItem), onClick: ($event) => onCopyToClipboard(item.address) }, [ createTextVNode(toDisplayString(item.family) + ": ", 1), createBaseVNode("span", { class: normalizeClass(_ctx.$style.clickable) }, toDisplayString(item.address), 3), createTextVNode(" " + toDisplayString(item.internal ? "(internal)" : ""), 1) ], 10, _hoisted_1$3); }), 128))], 2)) : createCommentVNode("", true)]), _: 1 }); }; } }); var WorkerNetAccordion_vue_vue_type_style_index_0_lang_module_default = { accordionItems: "_accordionItems_blrmp_123", accordionItem: "_accordionItem_blrmp_123", clickable: "_clickable_blrmp_137" }; var WorkerNetAccordion_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerNetAccordion_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerNetAccordion_vue_vue_type_style_index_0_lang_module_default }]]); var WorkerChartsAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerChartsAccordion", props: { workerId: {} }, setup(__props) { const props = __props; const i18n = useI18n(); const blankDataSet = (label, color, prefill = 0) => ({ datasets: [{ label, backgroundColor: color, data: prefill ? Array(Math.min(100, prefill)).fill(0) : [] }], labels: Array(Math.min(100, prefill)).fill("") }); const orchestrationStore = useOrchestrationStore(); const chartRefJobs = ref(void 0); const chartRefCPU = ref(void 0); const chartRefMemoryUsage = ref(void 0); const optionsBase = () => ({ responsive: true, maintainAspectRatio: true, scales: { y: { type: "linear", display: true, position: "left", min: 0, suggestedMax: 5 } } }); const optionsJobs = optionsBase(); const optionsCPU = optionsBase(); if (optionsCPU.scales?.y) optionsCPU.scales.y.suggestedMax = 100; const optionsMemory = optionsBase(); if (optionsMemory.scales?.y) optionsMemory.scales.y.suggestedMax = 100; const dataJobs = ref(blankDataSet("Job Count", "rgb(255, 111, 92)", 100)); const dataCPU = ref(blankDataSet("Processor Usage", "rgb(19, 205, 103)", 100)); const dataMemoryUsage = ref(blankDataSet("Memory Usage (%)", "rgb(244, 216, 174)", 100)); orchestrationStore.$onAction(({ name, store }) => { if (name === "updateWorkerStatus") { const prefillCount = 100 - (store.workersHistory[props.workerId]?.length ?? 0); const newDataJobs = blankDataSet("Job Count", "rgb(255, 111, 92)", prefillCount); const newDataCPU = blankDataSet("Processor Usage", "rgb(19, 205, 103)", prefillCount); const newDataMemoryUsage = blankDataSet("Memory Usage (%)", "rgb(244, 216, 174)", prefillCount); store.workersHistory[props.workerId]?.forEach((item) => { newDataJobs.datasets[0].data.push(item.data.runningJobsSummary.length); newDataJobs.labels?.push(new Date(item.timestamp).toLocaleTimeString()); newDataCPU.datasets[0].data.push(averageWorkerLoadFromLoads(item.data.loadAvg)); newDataCPU.labels = newDataJobs.labels; newDataMemoryUsage.labels = newDataJobs.labels; const totalMem = item.data.isInContainer ? item.data.process.memory.constraint : item.data.host.memory.total; const usage = (totalMem - item.data.process.memory.available) / totalMem * 100; newDataMemoryUsage.datasets[0].data.push(usage); }); dataJobs.value = newDataJobs; dataCPU.value = newDataCPU; dataMemoryUsage.value = newDataMemoryUsage; } }); return (_ctx, _cache) => { return openBlock(), createBlock(WorkerAccordion_default, { icon: "list-checks", "icon-color": "text-dark", "initial-expanded": false }, { title: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workerList.item.chartsTitle")), 1)]), content: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.charts) }, [ createVNode(unref(Chart), { ref_key: "chartRefJobs", ref: chartRefJobs, type: "line", data: dataJobs.value, options: unref(optionsJobs), class: normalizeClass(_ctx.$style.chart) }, null, 8, [ "data", "options", "class" ]), createVNode(unref(Chart), { ref_key: "chartRefCPU", ref: chartRefCPU, type: "line", data: dataCPU.value, options: unref(optionsCPU), class: normalizeClass(_ctx.$style.chart) }, null, 8, [ "data", "options", "class" ]), createVNode(unref(Chart), { ref_key: "chartRefMemoryUsage", ref: chartRefMemoryUsage, type: "line", data: dataMemoryUsage.value, options: unref(optionsMemory), class: normalizeClass(_ctx.$style.chart) }, null, 8, [ "data", "options", "class" ]) ], 2)]), _: 1 }); }; } }); var WorkerChartsAccordion_vue_vue_type_style_index_0_lang_module_default = { accordionItems: "_accordionItems_rnm37_123", accordionItem: "_accordionItem_rnm37_123", charts: "_charts_rnm37_136", chart: "_chart_rnm37_136" }; var WorkerChartsAccordion_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerChartsAccordion_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerChartsAccordion_vue_vue_type_style_index_0_lang_module_default }]]); var _hoisted_1$2 = { key: 0 }; var WorkerMemoryMonitorAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerMemoryMonitorAccordion", props: { worker: {} }, setup(__props) { const props = __props; const i18n = useI18n(); return (_ctx, _cache) => { return openBlock(), createBlock(WorkerAccordion_default, { icon: "list-checks", "icon-color": "text-dark", "initial-expanded": false }, { title: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workerList.item.memoryMonitorTitle")), 1)]), content: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style["accordion-content"]) }, [ _cache[7] || (_cache[7] = createBaseVNode("strong", null, "Host/OS Memory:", -1)), createBaseVNode("table", null, [createBaseVNode("tbody", null, [createBaseVNode("tr", null, [_cache[0] || (_cache[0] = createBaseVNode("th", null, "Total (os.totalmem)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsGb)(props.worker.host.memory.total)) + "GB", 1)]), createBaseVNode("tr", null, [_cache[1] || (_cache[1] = createBaseVNode("th", null, "Free (os.freemem)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsGb)(props.worker.host.memory.free)) + "GB", 1)])])]), _cache[8] || (_cache[8] = createBaseVNode("br", null, null, -1)), _cache[9] || (_cache[9] = createBaseVNode("strong", null, "Process Memory:", -1)), _cache[10] || (_cache[10] = createBaseVNode("br", null, null, -1)), createBaseVNode("table", null, [createBaseVNode("tbody", null, [ _ctx.worker.isInContainer ? (openBlock(), createElementBlock("tr", _hoisted_1$2, [_cache[2] || (_cache[2] = createBaseVNode("th", null, "Constraint: (process.constrainedMemory)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsMb)(props.worker.process.memory.constraint)) + "MB", 1)])) : createCommentVNode("", true), createBaseVNode("tr", null, [_cache[3] || (_cache[3] = createBaseVNode("th", null, "Available: (process.availableMemory)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsMb)(props.worker.process.memory.available)) + "MB", 1)]), createBaseVNode("tr", null, [_cache[4] || (_cache[4] = createBaseVNode("th", null, "RSS: (process.memoryUsage().rss)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsMb)(props.worker.process.memory.rss)) + "MB", 1)]), createBaseVNode("tr", null, [_cache[5] || (_cache[5] = createBaseVNode("th", null, "Heap total: (process.memoryUsage().heapTotal)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsMb)(props.worker.process.memory.heapTotal)) + "MB", 1)]), createBaseVNode("tr", null, [_cache[6] || (_cache[6] = createBaseVNode("th", null, "Heap used: (process.memoryUsage().heapUsed)", -1)), createBaseVNode("td", null, toDisplayString(unref(memAsMb)(props.worker.process.memory.heapUsed)) + "MB", 1)]) ])]) ], 2)]), _: 1 }); }; } }); var WorkerMemoryMonitorAccordion_vue_vue_type_style_index_0_lang_module_default = { "accordion-content": "_accordion-content_3cfqp_133" }; var WorkerMemoryMonitorAccordion_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerMemoryMonitorAccordion_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerMemoryMonitorAccordion_vue_vue_type_style_index_0_lang_module_default }]]); var WorkerCard_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerCard", props: { workerId: {} }, setup(__props) { let interval; const orchestrationStore = useOrchestrationStore(); const i18n = useI18n(); const props = __props; const secondsSinceLastUpdateString = ref("0"); const stale$1 = ref(false); const worker = computed(() => { return orchestrationStore.getWorkerStatus(props.workerId); }); const sortedWorkerInterfaces = computed(() => sortByProperty("family", worker.value?.interfaces.slice() ?? [])); function upTime(seconds) { const days = Math.floor(seconds / (3600 * 24)); seconds -= days * 3600 * 24; const hrs = Math.floor(seconds / 3600); seconds -= hrs * 3600; const mnts = Math.floor(seconds / 60); seconds -= mnts * 60; return `${days}d ${hrs}h ${mnts}m ${Math.floor(seconds)}s`; } onMounted(() => { interval = setInterval(() => { const lastUpdated = orchestrationStore.getWorkerLastUpdated(props.workerId); if (!lastUpdated) return; const secondsSinceLastUpdate = Math.ceil((Date.now() - lastUpdated) / 1e3); stale$1.value = secondsSinceLastUpdate > 10; secondsSinceLastUpdateString.value = secondsSinceLastUpdate.toFixed(0); }, 500); }); onBeforeUnmount(() => { clearInterval(interval); }); return (_ctx, _cache) => { return worker.value ? (openBlock(), createBlock(unref(N8nCard_default), { key: 0, class: normalizeClass(_ctx.$style.cardLink) }, { header: withCtx(() => [createVNode(unref(N8nHeading_default), { tag: "h2", bold: "", class: normalizeClass(stale$1.value ? [_ctx.$style.cardHeading, _ctx.$style.stale] : [_ctx.$style.cardHeading]), "data-test-id": "worker-card-name" }, { default: withCtx(() => [ createTextVNode(" Name: " + toDisplayString(worker.value.senderId) + " (" + toDisplayString(worker.value.hostname) + ") ", 1), _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)), createTextVNode(" Average Load: " + toDisplayString(unref(averageWorkerLoadFromLoadsAsString)(worker.value.loadAvg ?? [0])) + " | Free memory: " + toDisplayString(unref(memAsGb)(worker.value.process.memory.available)) + "GB / " + toDisplayString(unref(memAsGb)(worker.value.isInContainer ? worker.value.process.memory.constraint : worker.value.host.memory.total)) + "GB " + toDisplayString(stale$1.value ? " (stale)" : ""), 1) ]), _: 1 }, 8, ["class"])]), append: withCtx(() => [createBaseVNode("div", { ref: "cardActions", class: normalizeClass(_ctx.$style.cardActions) }, null, 2)]), default: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.cardDescription) }, [createVNode(unref(N8nText_default), { color: "text-light", size: "small", class: normalizeClass(_ctx.$style.container) }, { default: withCtx(() => [ createBaseVNode("span", null, toDisplayString(unref(i18n).baseText("workerList.item.lastUpdated")) + " " + toDisplayString(secondsSinceLastUpdateString.value) + "s ago | n8n-Version: " + toDisplayString(worker.value.version) + " | Architecture: " + toDisplayString(worker.value.arch) + " ( " + toDisplayString(worker.value.platform) + ") | Uptime: " + toDisplayString(upTime(worker.value.uptime)), 1), _cache[1] || (_cache[1] = createBaseVNode("br", null, null, -1)), createVNode(WorkerJobAccordion_default, { items: worker.value.runningJobsSummary }, null, 8, ["items"]), createVNode(WorkerNetAccordion_default, { items: sortedWorkerInterfaces.value }, null, 8, ["items"]), createVNode(WorkerChartsAccordion_default, { "worker-id": worker.value.senderId }, null, 8, ["worker-id"]), createVNode(WorkerMemoryMonitorAccordion_default, { worker: worker.value }, null, 8, ["worker"]) ]), _: 1 }, 8, ["class"])], 2)]), _: 1 }, 8, ["class"])) : createCommentVNode("", true); }; } }); var WorkerCard_vue_vue_type_style_index_0_lang_module_default = { container: "_container_1ejgw_123", cardLink: "_cardLink_1ejgw_127", cardHeading: "_cardHeading_1ejgw_137", stale: "_stale_1ejgw_143", cardDescription: "_cardDescription_1ejgw_147", cardActions: "_cardActions_1ejgw_154" }; var WorkerCard_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerCard_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerCard_vue_vue_type_style_index_0_lang_module_default }]]); var _hoisted_1$1 = { key: 0 }; var _hoisted_2 = { key: 1 }; var _hoisted_3 = { key: 0 }; var _hoisted_4 = { key: 1 }; var WorkerList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerList", props: { autoRefreshEnabled: { type: Boolean, default: true } }, setup(__props) { const router = useRouter(); const i18n = useI18n(); const pushConnection = usePushConnection({ router }); const documentTitle = useDocumentTitle(); const telemetry = useTelemetry(); const orchestrationManagerStore = useOrchestrationStore(); const rootStore = useRootStore(); const pushStore = usePushConnectionStore(); const initialStatusReceived = computed(() => orchestrationManagerStore.initialStatusReceived); const workerIds = computed(() => Object.keys(orchestrationManagerStore.workers)); const pageTitle = computed(() => i18n.baseText("workerList.pageTitle")); onMounted(() => { documentTitle.set(pageTitle.value); telemetry.track("User viewed worker view", { instance_id: rootStore.instanceId }); }); onBeforeMount(() => { pushConnection.initialize(); pushStore.pushConnect(); orchestrationManagerStore.startWorkerStatusPolling(); }); onBeforeUnmount(() => { orchestrationManagerStore.stopWorkerStatusPolling(); pushStore.pushDisconnect(); pushConnection.terminate(); }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", null, [ createVNode(PushConnectionTracker_default, { class: "actions" }), createBaseVNode("div", { class: normalizeClass(_ctx.$style.workerListHeader) }, [createVNode(unref(N8nHeading_default), { tag: "h1", size: "2xlarge" }, { default: withCtx(() => [createTextVNode(toDisplayString(pageTitle.value), 1)]), _: 1 })], 2), !initialStatusReceived.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [createVNode(unref(N8nSpinner_default))])) : (openBlock(), createElementBlock("div", _hoisted_2, [workerIds.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_3, toDisplayString(unref(i18n).baseText("workerList.empty")), 1)) : (openBlock(), createElementBlock("div", _hoisted_4, [(openBlock(true), createElementBlock(Fragment, null, renderList(workerIds.value, (workerId) => { return openBlock(), createElementBlock("div", { key: workerId, class: normalizeClass(_ctx.$style.card) }, [createVNode(WorkerCard_default, { "worker-id": workerId, "data-test-id": "worker-card" }, null, 8, ["worker-id"])], 2); }), 128))]))])) ]); }; } }); var WorkerList_vue_vue_type_style_index_0_lang_module_default = { workerListHeader: "_workerListHeader_1k6ao_123", card: "_card_1k6ao_130", tableLoader: "_tableLoader_1k6ao_134" }; var WorkerList_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerList_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerList_vue_vue_type_style_index_0_lang_module_default }]]); var _hoisted_1 = ["href"]; var WorkerView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "WorkerView", setup(__props) { const settingsStore = useSettingsStore(); const pageRedirectionHelper = usePageRedirectionHelper(); const i18n = useI18n(); const goToUpgrade = () => { pageRedirectionHelper.goToUpgrade("worker-view", "upgrade-worker-view"); }; return (_ctx, _cache) => { return unref(settingsStore).isQueueModeEnabled && unref(settingsStore).isWorkerViewAvailable ? (openBlock(), createBlock(WorkerList_default, { key: 0, "data-test-id": "worker-view-licensed" })) : (openBlock(), createBlock(unref(N8nActionBox_default), { key: 1, "data-test-id": "worker-view-unlicensed", class: normalizeClass(_ctx.$style.actionBox), description: unref(i18n).baseText("workerList.actionBox.description"), "button-text": unref(i18n).baseText("workerList.actionBox.buttonText"), "onClick:button": goToUpgrade }, { heading: withCtx(() => [createBaseVNode("span", null, toDisplayString(unref(i18n).baseText("workerList.actionBox.title")), 1)]), description: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workerList.actionBox.description")) + " ", 1), createBaseVNode("a", { href: unref(i18n).baseText("workerList.docs.url"), target: "_blank" }, toDisplayString(unref(i18n).baseText("workerList.actionBox.description.link")), 9, _hoisted_1)]), _: 1 }, 8, [ "class", "description", "button-text" ])); }; } }); var WorkerView_vue_vue_type_style_index_0_lang_module_default = { actionBox: "_actionBox_185wr_123" }; var WorkerView_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkerView_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkerView_vue_vue_type_style_index_0_lang_module_default }]]); export { WorkerView_default as default };