plugin-cluster-manager 1.1.16 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.js +1 -1
- package/dist/client-v2/376.cd1d86e85a50088e.js +10 -0
- package/dist/client-v2/index.js +1 -1
- package/dist/externalVersion.js +6 -6
- package/dist/locale/en-US.json +16 -6
- package/dist/locale/vi-VN.json +16 -6
- package/dist/locale/zh-CN.json +16 -6
- package/dist/server/actions/cluster-nodes.js +43 -10
- package/dist/server/actions/doctor.js +69 -4
- package/dist/server/actions/event-queue-monitor.js +33 -3
- package/dist/server/actions/orchestrator.js +48 -32
- package/dist/server/actions/queue-mappings.js +1 -0
- package/dist/server/actions/tasks.js +8 -8
- package/dist/server/adapters/redis-event-queue-adapter.js +188 -0
- package/dist/server/adapters/redis-node-registry.js +42 -3
- package/dist/server/collections/orchestrator-stacks.js +6 -0
- package/dist/server/collections/worker-queue-mappings.js +1 -1
- package/dist/server/orchestrator/PackageManager.js +47 -12
- package/dist/server/plugin.js +36 -5
- package/dist/server/queue-scanner.js +54 -34
- package/dist/server/utils/node.js +3 -7
- package/dist/server/utils/redis.js +37 -9
- package/dist/shared/worker-processes.js +233 -0
- package/package.json +1 -1
- package/src/client/ClusterNodes.tsx +76 -10
- package/src/client/ContainerOrchestrator.tsx +146 -8
- package/src/client/QueueAssignment.tsx +10 -2
- package/src/locale/en-US.json +16 -6
- package/src/locale/vi-VN.json +16 -6
- package/src/locale/zh-CN.json +16 -6
- package/src/server/__tests__/worker-processes.test.ts +42 -0
- package/src/server/actions/cluster-nodes.ts +43 -8
- package/src/server/actions/doctor.ts +77 -0
- package/src/server/actions/event-queue-monitor.ts +34 -3
- package/src/server/actions/orchestrator.ts +58 -38
- package/src/server/actions/queue-mappings.ts +1 -0
- package/src/server/actions/tasks.ts +142 -142
- package/src/server/adapters/redis-event-queue-adapter.ts +189 -0
- package/src/server/adapters/redis-node-registry.ts +44 -4
- package/src/server/collections/orchestrator-stacks.ts +6 -0
- package/src/server/collections/worker-queue-mappings.ts +3 -3
- package/src/server/orchestrator/PackageManager.ts +48 -11
- package/src/server/orchestrator/types.ts +5 -4
- package/src/server/plugin.ts +40 -6
- package/src/server/queue-scanner.ts +65 -51
- package/src/server/utils/node.ts +3 -10
- package/src/server/utils/redis.ts +39 -4
- package/src/shared/worker-processes.ts +216 -0
- package/dist/client-v2/914.c0bce51908fd81d7.js +0 -10
package/dist/client/index.js
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-cluster-manager",["@nocobase/client-v2","dayjs","react","antd","@nocobase/client","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-cluster-manager"]=t(require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):e["plugin-cluster-manager"]=t(e["@nocobase/client-v2"],e.dayjs,e.react,e.antd,e["@nocobase/client"],e["@ant-design/icons"])}(self,function(e,t,n,r,a,l){return function(){"use strict";var o={375:function(e){e.exports=l},342:function(e){e.exports=a},485:function(t){t.exports=e},59:function(e){e.exports=r},185:function(e){e.exports=t},155:function(e){e.exports=n}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return o[e](n,n.exports,c),n.exports}c.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(t,{a:t}),t},c.d=function(e,t){for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.g.importScripts&&(u=c.g.location+"");var u,s=c.g.document;if(!u&&s&&(s.currentScript&&"SCRIPT"===s.currentScript.tagName.toUpperCase()&&(u=s.currentScript.src),!u)){var d=s.getElementsByTagName("script");if(d.length)for(var m=d.length-1;m>-1&&(!u||!/^http(s?):/.test(u));)u=d[m--].src}if(!u)throw Error("Automatic publicPath is not supported in this browser");c.p=u.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var p={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src&&(e=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/plugin-cluster-manager/dist/client/")}if(!e){var r=window.__nocobase_modern_client_prefix__||"v",a="/"+(r=String(r).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var l=window.location.pathname||"/",o=l.indexOf(a);e=o>=0?l.slice(0,o+1):"/"}e&&(e=e.replace(RegExp("/"+r+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-cluster-manager/dist/client/"}c.p=e}(),!function(){c.r(p),c.d(p,{PluginClusterManagerClient:function(){return t_},default:function(){return tU}});var e=c(342),t=c(155),n=c.n(t),r=c(59),a=c(375),l=c(485),o=c(185),i=c.n(o);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function d(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){s(l,r,a,o,i,"next",e)}function i(e){s(l,r,a,o,i,"throw",e)}o(void 0)})}}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var g={null:{label:"Pending",color:"default"},0:{label:"Running",color:"processing"},1:{label:"Succeeded",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Canceled",color:"warning"}};function v(){var e=(0,l.useApp)().apiClient,o=y((0,t.useState)([]),2),c=o[0],u=o[1],s=y((0,t.useState)(!1),2),p=s[0],v=s[1],b=y((0,t.useState)({current:1,pageSize:20,total:0}),2),E=b[0],w=b[1],S=y((0,t.useState)(void 0),2),k=S[0],C=S[1],x=(0,t.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:E.current,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:E.pageSize;return d(function(){var a,l;return h(this,function(o){switch(o.label){case 0:v(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,e.request({url:"clusterManager:list",params:{page:t,pageSize:n,statusFilter:void 0===k?"":k}})];case 2:return u(Array.isArray(null==(l=o.sent().data)||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:Array.isArray(l)?l:[]),w(function(e){var n,r;return f(m({},e),{current:(null==(n=l.meta)?void 0:n.page)||t,total:(null==(r=l.meta)?void 0:r.count)||0})}),[3,5];case 3:return o.sent(),r.message.error("Failed to load tasks"),[3,5];case 4:return v(!1),[7];case 5:return[2]}})})()},[e,E.current,E.pageSize,k]);(0,t.useEffect)(function(){x()},[k]);var O=function(t){return d(function(){var n,a;return h(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,e.request({url:"clusterManager:purge",method:"post",data:{days:t}})];case 1:return a=l.sent(),r.message.success("Purged ".concat((null==a||null==(n=a.data)?void 0:n.deletedCount)||0," tasks")),x(),[3,3];case 2:return l.sent(),r.message.error("Failed to purge tasks"),[3,3];case 3:return[2]}})})()},I=[{title:"Title",dataIndex:"title",width:200,ellipsis:!0},{title:"Type",dataIndex:"type",width:120},{title:"Status",dataIndex:"status",width:100,render:function(e){var t=g[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Progress",key:"progress",width:150,render:function(e,t){if(0!==t.status||!t.progressTotal)return"-";var a=Math.round(t.progressCurrent/t.progressTotal*100);return n().createElement(r.Progress,{percent:a,size:"small"})}},{title:"User",key:"user",width:120,render:function(e,t){var n;return(null==(n=t.createdBy)?void 0:n.nickname)||"-"}},{title:"Created",dataIndex:"createdAt",width:160,render:function(e){return e?i()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Duration",key:"duration",width:100,render:function(e,t){if(!t.startedAt)return"-";var n=t.doneAt||new Date().toISOString(),r=i()(n).diff(i()(t.startedAt),"second");return r<60?"".concat(r,"s"):"".concat(Math.floor(r/60),"m ").concat(r%60,"s")}},{title:"Actions",key:"actions",width:120,render:function(t,l){return n().createElement(r.Space,null,(0===l.status||null===l.status)&&n().createElement(r.Popconfirm,{title:"Cancel this task?",onConfirm:function(){var t;return t=l.id,d(function(){return h(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManager:cancel",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Task canceled"),x(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})),(-1===l.status||-2===l.status)&&n().createElement(r.Popconfirm,{title:"Retry this task?",onConfirm:function(){var t;return t=l.id,d(function(){return h(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManager:retry",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Task re-queued"),x(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.RedoOutlined,null)})))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Select,{placeholder:"Filter by status",allowClear:!0,style:{width:160},value:k,onChange:C,options:Object.entries(g).map(function(e){var t=y(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return x()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return O(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return O(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return O(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Purge Tasks"))),n().createElement(r.Table,{rowKey:"id",columns:I,dataSource:c,loading:p,size:"small",scroll:{x:"max-content"},pagination:f(m({},E),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return x(e,t)}})}))}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function w(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){E(l,r,a,o,i,"next",e)}function i(e){E(l,r,a,o,i,"throw",e)}o(void 0)})}}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){S(e,t,n[t])})}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var I={null:{label:"Queueing",color:"default"},0:{label:"Started",color:"processing"},1:{label:"Resolved",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Error",color:"error"},"-3":{label:"Aborted",color:"warning"},"-4":{label:"Canceled",color:"warning"},"-5":{label:"Rejected",color:"warning"},"-6":{label:"Retry Needed",color:"orange"}},P={0:{label:"Pending",color:"default"},1:{label:"Resolved",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Error",color:"error"},"-3":{label:"Aborted",color:"warning"},"-4":{label:"Canceled",color:"warning"}};function A(){var e=(0,l.useApp)().apiClient,o=x((0,t.useState)([]),2),c=o[0],u=o[1],s=x((0,t.useState)(!1),2),d=s[0],m=s[1],p=x((0,t.useState)({current:1,pageSize:20,total:0}),2),f=p[0],y=p[1],h=x((0,t.useState)(void 0),2),g=h[0],v=h[1],b=x((0,t.useState)({}),2),E=b[0],A=b[1],T=x((0,t.useState)({}),2),j=T[0],R=T[1],z=(0,t.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f.current,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.pageSize;return w(function(){var a,l;return O(this,function(o){switch(o.label){case 0:m(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,e.request({url:"clusterManagerWorkflow:list",params:{page:t,pageSize:n,statusFilter:void 0===g?"":g}})];case 2:return u(Array.isArray(null==(l=o.sent().data)||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:Array.isArray(l)?l:[]),y(function(e){var n,r;return C(k({},e),{current:(null==(n=l.meta)?void 0:n.page)||t,total:(null==(r=l.meta)?void 0:r.count)||0})}),[3,5];case 3:return o.sent(),r.message.error("Failed to load executions"),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[e,f.current,f.pageSize,g]);(0,t.useEffect)(function(){z()},[g]);var M=function(t){return w(function(){var n,a;return O(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,e.request({url:"clusterManagerWorkflow:purge",method:"post",data:{days:t}})];case 1:return a=l.sent(),r.message.success("Purged ".concat((null==a||null==(n=a.data)?void 0:n.deletedCount)||0," executions")),z(),[3,3];case 2:return l.sent(),r.message.error("Failed to purge executions"),[3,3];case 3:return[2]}})})()},D=[{title:"Job ID",dataIndex:"id",width:100},{title:"Node",key:"node",width:200,render:function(e,t){var n;return(null==(n=t.node)?void 0:n.title)||t.nodeKey||"-"}},{title:"Status",dataIndex:"status",width:100,render:function(e){var t=P[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Result",dataIndex:"result",ellipsis:!0,render:function(e){return e?JSON.stringify(e).slice(0,120):"-"}}],N=[{title:"ID",dataIndex:"id",width:100},{title:"Workflow",key:"workflow",width:200,render:function(e,t){var n;return(null==(n=t.workflow)?void 0:n.title)||"-"}},{title:"Status",dataIndex:"status",width:120,render:function(e){var t=I[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Executing Node",dataIndex:"workerNode",width:150,render:function(e){return e&&"-"!==e?n().createElement(r.Tag,{color:"blue"},e):n().createElement(r.Tag,null,e||"-")}},{title:"Manual",dataIndex:"manually",width:80,render:function(e){return e?n().createElement(r.Tag,{color:"blue"},"Yes"):"-"}},{title:"Triggered At",dataIndex:"createdAt",width:160,render:function(e){return e?i()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Actions",key:"actions",width:120,render:function(t,l){return n().createElement(r.Space,null,n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.UnorderedListOutlined,null),onClick:function(){var t;return t=l.id,w(function(){var n,a,l,o,i;return O(this,function(c){switch(c.label){case 0:if(E[t])return[2];R(function(e){return C(k({},e),S({},t,!0))}),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,e.request({url:"clusterManagerWorkflow:getJobs",params:{filterByTk:t}})];case 2:return i=Array.isArray(null==(o=c.sent())||null==(a=o.data)||null==(n=a.data)?void 0:n.data)?o.data.data.data:Array.isArray(null==o||null==(l=o.data)?void 0:l.data)?o.data.data:Array.isArray(null==o?void 0:o.data)?o.data:[],A(function(e){return C(k({},e),S({},t,i))}),[3,5];case 3:return c.sent(),r.message.error("Failed to load jobs"),[3,5];case 4:return R(function(e){return C(k({},e),S({},t,!1))}),[7];case 5:return[2]}})})()},loading:j[l.id]},"Jobs"),(0===l.status||null===l.status)&&n().createElement(r.Popconfirm,{title:"Cancel execution?",onConfirm:function(){var t;return t=l.id,w(function(){return O(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManagerWorkflow:cancel",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Execution canceled"),z(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Select,{placeholder:"Filter by status",allowClear:!0,style:{width:160},value:g,onChange:v,options:Object.entries(I).map(function(e){var t=x(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return z()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return M(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return M(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return M(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Clear History"))),n().createElement(r.Table,{rowKey:"id",columns:N,dataSource:c,loading:d,size:"small",scroll:{x:"max-content"},expandable:{expandedRowRender:function(e){var t=E[e.id];return t?n().createElement(r.Table,{rowKey:"id",columns:D,dataSource:t,size:"small",pagination:!1}):n().createElement("div",{style:{padding:8}},'Click "Jobs" to load')}},pagination:C(k({},f),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return z(e,t)}})}))}function T(){var e=(0,l.useApp)();return(0,t.useCallback)(function(t){return e.i18n.t(t,{ns:"cluster-manager"})},[e.i18n])}function j(e){if(0===e)return"0 B";var t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(1))+" "+["B","KB","MB","GB"][t]}function R(e){var t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),a=[];return t>0&&a.push("".concat(t,"d")),n>0&&a.push("".concat(n,"h")),a.push("".concat(r,"m")),a.join(" ")}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function M(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function D(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){M(l,r,a,o,i,"next",e)}function i(e){M(l,r,a,o,i,"throw",e)}o(void 0)})}}function N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function F(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function B(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||L(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e){return function(e){if(Array.isArray(e))return z(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||L(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function L(e,t){if(e){if("string"==typeof e)return z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return z(e,t)}}function _(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function U(e){var o=e.open,i=e.node,c=e.onClose,u=T(),s=(0,l.useApp)().apiClient,d=B((0,t.useState)([]),2),m=d[0],p=d[1],f=B((0,t.useState)(null),2),y=f[0],h=f[1],g=B((0,t.useState)(!1),2),v=g[0],b=g[1],E=B((0,t.useState)(!0),2),w=E[0],S=E[1],k=B((0,t.useState)(""),2),C=k[0],x=k[1],O=(0,t.useRef)(null),I=(0,t.useCallback)(function(){return D(function(){var e,t,n;return _(this,function(a){switch(a.label){case 0:if(!o)return[2];b(!0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerCluster:logs",params:{lines:200,targetNodeId:null==i?void 0:i.id}})];case 2:return(n=null==(t=a.sent())||null==(e=t.data)?void 0:e.data)&&(n._error&&r.message.warning(n._error),p(n.lines||[]),h(n.node)),[3,5];case 3:return a.sent(),r.message.error("Failed to load logs"),[3,5];case 4:return b(!1),[7];case 5:return[2]}})})()},[s,o,i]);(0,t.useEffect)(function(){o&&(p([]),x(""),S(!0),I())},[o,I]),(0,t.useEffect)(function(){if(o&&w){var e=setInterval(I,5e3);return function(){return clearInterval(e)}}},[o,w,I]),(0,t.useEffect)(function(){O.current&&!C&&O.current.scrollIntoView({behavior:"smooth"})},[m,C]);var P=C?m.filter(function(e){return e.toLowerCase().includes(C.toLowerCase())}):m;return n().createElement(r.Modal,{title:n().createElement(r.Space,null,n().createElement(a.FileTextOutlined,null),u("Instance Logs")," — ",(null==i?void 0:i.name)||"",y&&n().createElement(r.Tag,null,y.hostname,":",y.pid," (",y.workerMode,")")),open:o,onCancel:c,footer:null,width:"80vw",styles:{body:{height:"70vh",display:"flex",flexDirection:"column",padding:"12px 24px"}},destroyOnClose:!0},n().createElement(r.Space,{style:{marginBottom:8,flexShrink:0}},n().createElement(r.Input,{placeholder:u("Search logs..."),prefix:n().createElement(a.SearchOutlined,null),value:C,onChange:function(e){return x(e.target.value)},allowClear:!0,style:{width:300}}),n().createElement(r.Switch,{checked:w,onChange:S,checkedChildren:u("Auto 5s"),unCheckedChildren:u("Paused")}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:I,loading:v,size:"small"},u("Refresh")),n().createElement("span",{style:{fontSize:12,color:"#888"}},P.length," / ",m.length," ",u("lines"))),n().createElement("div",{style:{flex:1,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",fontFamily:'Consolas, Monaco, "Courier New", monospace',fontSize:12,lineHeight:1.5,padding:12,borderRadius:6,whiteSpace:"pre-wrap",wordBreak:"break-all"}},0===P.length&&!v&&n().createElement("div",{style:{color:"#888",textAlign:"center",paddingTop:40}},u(0===m.length?"No logs available":"No matching logs")),P.map(function(e,t){var r="#d4d4d4";return/\berror\b/i.test(e)?r="#f5222d":/\bwarn(ing)?\b/i.test(e)?r="#faad14":/\bdebug\b/i.test(e)&&(r="#8c8c8c"),n().createElement("div",{key:t,style:{padding:"1px 0",color:r}},e)}),n().createElement("div",{ref:O})))}var K={ok:"green",connected:"green",online:"green",warning:"orange",disconnected:"red",offline:"red",error:"red",not_configured:"default"};function W(e){return(null==e?void 0:e.length)?n().createElement(r.Space,{wrap:!0,size:[4,2]},e.map(function(e){return n().createElement(r.Tag,{key:e},e)})):n().createElement(r.Typography.Text,{type:"secondary"},"-")}function V(){var e,o,i=T(),c=(0,l.useApp)().apiClient,u=B((0,t.useState)(!1),2),s=u[0],d=u[1],m=B((0,t.useState)(null),2),p=m[0],f=m[1],y=B((0,t.useState)([]),2),h=y[0],g=y[1],v=B((0,t.useState)(null),2),b=v[0],E=v[1],w=B((0,t.useState)(null),2),S=w[0],k=w[1],C=B((0,t.useState)(null),2),x=C[0],O=C[1],I=B((0,t.useState)(null),2),P=I[0],A=I[1],z=B((0,t.useState)(null),2),M=z[0],L=z[1],V=B((0,t.useState)("worker"),2),H=V[0],Q=V[1],J=B((0,t.useState)("soft"),2),$=J[0],G=J[1],Y=B((0,t.useState)(5e3),2),X=Y[0],Z=Y[1],ee=B((0,t.useState)(!1),2),et=ee[0],en=ee[1],er=(0,t.useCallback)(function(){return D(function(){var e,t,n,r,a,l,o,i,u,s,m,p;return _(this,function(y){switch(y.label){case 0:d(!0),y.label=1;case 1:return y.trys.push([1,3,4,5]),[4,Promise.all([c.request({url:"clusterManagerCluster:current"}),c.request({url:"clusterManagerCluster:list"}),c.request({url:"clusterManagerCluster:health"}),c.request({url:"clusterManagerCluster:drift"}),c.request({url:"clusterManagerCluster:legacyDiagnostics"})])];case 2:return i=(o=B.apply(void 0,[y.sent(),5]))[0],u=o[1],s=o[2],m=o[3],p=o[4],f(null==i||null==(e=i.data)?void 0:e.data),g((null==u||null==(n=u.data)||null==(t=n.data)?void 0:t.data)||[]),E(null==s||null==(r=s.data)?void 0:r.data),k(null==m||null==(a=m.data)?void 0:a.data),O(null==p||null==(l=p.data)?void 0:l.data),[3,5];case 3:return y.sent(),[3,5];case 4:return d(!1),[7];case 5:return[2]}})})()},[c]),ea=function(e,t){return D(function(){return _(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerCluster:restart",method:"POST",data:{hostname:e,mode:t}})];case 1:return n.sent(),r.message.success("[".concat(t,"] Restart signal sent to ").concat("*"===e?"all nodes":e)),setTimeout(er,3e3),[3,3];case 2:return n.sent(),r.message.error("Failed to send restart signal to ".concat(e)),[3,3];case 3:return[2]}})})()};(0,t.useEffect)(function(){er()},[er]),(0,t.useEffect)(function(){if(P){var e=setInterval(er,1e3*P);return function(){return clearInterval(e)}}},[P,er]);var el=h.filter(function(e){return"online"===e.status}).length,eo=[{title:i("Name"),dataIndex:"name",key:"name",width:200},{title:i("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:K[e]||"default",icon:"online"===e?n().createElement(a.CheckCircleOutlined,null):"warning"===e?n().createElement(a.WarningOutlined,null):n().createElement(a.CloseCircleOutlined,null)},e.toUpperCase())}},{title:i("Type"),dataIndex:"workerMode",key:"workerMode",width:100,render:function(e,t){if(t.isSandbox)return n().createElement(r.Tag,{color:"purple"},"SANDBOX");var a="worker"===e||"task"===e||"*"===e;return n().createElement(r.Tag,{color:a?"blue":"green"},a?"WORKER":"APP")}},{title:i("PID"),dataIndex:"pid",key:"pid",width:80},{title:i("Version"),dataIndex:"appVersion",key:"appVersion",width:120},{title:i("Last Heartbeat"),dataIndex:"lastHeartbeatAt",key:"lastHeartbeatAt",width:200},{title:"Action",key:"action",width:100,render:function(e,t){return n().createElement(r.Space,{size:"small"},n().createElement(r.Button,{type:"link",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){return L(t)},disabled:"offline"===t.status},i("Logs")))}}],ei=(null==b?void 0:b.checks)||{},ec=(null==S?void 0:S.summary)||{},eu=(null==S?void 0:S.packageDrifts)||[],es=(null==S?void 0:S.versionDrifts)||[],ed=(null==S?void 0:S.runtimeDrifts)||[],em=(null==x?void 0:x.findings)||[],ep=function(e){var t=e.messageKey?i(e.messageKey):e.message;return e.messageArgs?Object.entries(e.messageArgs).reduce(function(e,t){var n=B(t,2),r=n[0],a=n[1];return e.replace("{".concat(r,"}"),String(a))},t):t};return n().createElement(r.Spin,{spinning:s},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:er},i("Refresh")),n().createElement(r.Select,{placeholder:i("Auto Refresh"),allowClear:!0,value:P,onChange:A,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:"Soft Restart ALL Nodes?",description:"Sends a soft reload signal to all active Nodes simultaneously.",onConfirm:function(){return ea("*","soft")}},n().createElement(r.Button,{style:{color:"#faad14",borderColor:"#ffe58f"},icon:n().createElement(a.ReloadOutlined,null)},i("Soft Restart Cluster"))),n().createElement(r.Popconfirm,{title:"Hard Restart ALL Nodes?",description:"Sends a lethal signal. Docker will reboot ALL container infrastructure.",onConfirm:function(){return ea("*","hard")}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.ReloadOutlined,null)},i("Hard Restart Cluster"))))),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Nodes Online"),value:el,suffix:"/ ".concat(h.length),prefix:n().createElement(a.ClusterOutlined,null),valueStyle:{color:el===h.length?"#3f8600":"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Worker Nodes"),value:h.filter(function(e){return"worker"===e.workerMode||"task"===e.workerMode||"*"===e.workerMode}).length,prefix:n().createElement(a.ClusterOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Process Uptime"),value:p?R(p.node.uptime):"-"}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Memory (Heap)"),value:p?j(p.memory.heapUsed):"-",suffix:p?"/ ".concat(j(p.memory.heapTotal)):""})))),n().createElement(r.Card,{title:i("Rolling Restart"),size:"small"},n().createElement(r.Space,{wrap:!0},n().createElement(r.Select,{value:H,onChange:Q,style:{width:180},options:[{value:"worker",label:i("Worker nodes only")},{value:"app",label:i("App nodes only")},{value:"sandbox",label:i("Sandbox nodes only")},{value:"all",label:i("All nodes")}]}),n().createElement(r.Select,{value:$,onChange:G,style:{width:150},options:[{value:"soft",label:i("Soft restart")},{value:"hard",label:i("Hard restart")}]}),n().createElement(r.InputNumber,{min:1e3,max:6e4,step:1e3,value:X,onChange:function(e){return Z(Number(e)||5e3)},addonAfter:"ms",style:{width:150}}),n().createElement(r.Popconfirm,{title:i("Start rolling restart?"),description:i("Nodes will receive restart commands one-by-one with the configured delay."),onConfirm:function(){return D(function(){var e,t,n,a,l,o,u,s,d,m;return _(this,function(p){switch(p.label){case 0:en(!0),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,c.request({url:"clusterManagerCluster:rollingRestart",method:"POST",data:{role:H,mode:$,delayMs:X}})];case 2:return l=(null==(a=p.sent())||null==(n=a.data)||null==(t=n.data)||null==(e=t.published)?void 0:e.length)||0,r.message.success(i("Rolling restart dispatched for {count} node(s)").replace("{count}",String(l))),setTimeout(er,3e3),[3,5];case 3:return o=p.sent(),r.message.error((null==o||null==(m=o.response)||null==(d=m.data)||null==(s=d.errors)||null==(u=s[0])?void 0:u.message)||i("Failed to dispatch rolling restart")),[3,5];case 4:return en(!1),[7];case 5:return[2]}})})()},okText:i("Start"),cancelText:i("Cancel")},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),loading:et},i("Rolling Restart"))))),n().createElement(r.Card,{title:i("Health Checks"),size:"small"},b&&!b.healthy&&n().createElement(r.Alert,{type:"warning",message:i("Some subsystems are unhealthy"),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Row,{gutter:[16,8]},Object.entries(ei).map(function(e){var t=B(e,2),a=t[0],l=t[1];return n().createElement(r.Col,{span:4,key:a},n().createElement(r.Card,{size:"small",style:{textAlign:"center"}},n().createElement(r.Tag,{color:K[l.status]||"default"},l.status),n().createElement("div",{style:{marginTop:4,fontWeight:500}},a),void 0!==l.latency&&n().createElement("div",{style:{fontSize:11,color:"#888"}},l.latency,"ms"),l.detail&&n().createElement("div",{style:{fontSize:11,color:"#888"}},l.detail)))}))),n().createElement(r.Card,{title:i("Cluster Drift"),size:"small",extra:(null==S?void 0:S.checkedAt)?n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},new Date(S.checkedAt).toLocaleString()):null},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:(null==S?void 0:S.healthy)?"success":"warning",showIcon:!0,message:(null==S?void 0:S.healthy)?i("No cluster drift detected"):i("Cluster drift detected"),description:(null==S?void 0:S.referenceVersion)?"".concat(i("Reference version"),": ").concat(S.referenceVersion):i("No reference version available")}),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Checked Nodes"),value:ec.nodes||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Version Drift"),value:ec.versionDrifts||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Runtime Drift"),value:ec.runtimeDrifts||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Package Drift"),value:ec.packageDrifts||0}))),(es.length>0||ed.length>0)&&n().createElement(r.Table,{size:"small",rowKey:function(e){var t;return"".concat(e.id||e.name,":").concat(e.actualVersion||(null==(t=e.actual)?void 0:t.nodeVersion))},pagination:!1,dataSource:q(es.map(function(e){return F(N({},e),{driftType:i("Version")})})).concat(q(ed.map(function(e){var t,n;return F(N({},e),{driftType:i("Runtime"),expectedVersion:null==(t=e.expected)?void 0:t.nodeVersion,actualVersion:null==(n=e.actual)?void 0:n.nodeVersion})}))),columns:[{title:i("Type"),dataIndex:"driftType",width:120},{title:i("Name"),dataIndex:"name"},{title:i("Role"),dataIndex:"role",width:120},{title:i("Expected"),dataIndex:"expectedVersion"},{title:i("Actual"),dataIndex:"actualVersion"}]}),eu.length>0&&n().createElement(r.Table,{size:"small",rowKey:function(e){return e.id||e.name},pagination:{pageSize:5},dataSource:eu,columns:[{title:i("Name"),dataIndex:"name"},{title:i("Role"),dataIndex:"role",width:110},{title:i("Package Status"),dataIndex:"status",width:130,render:function(e){return n().createElement(r.Tag,{color:"succeeded"===e?"green":"orange"},e)}},{title:i("Missing Packages"),dataIndex:"missingPackages",render:function(e){var t,a,l;return 0===((null==e||null==(t=e.apt)?void 0:t.length)||0)+((null==e||null==(a=e.npm)?void 0:a.length)||0)+((null==e||null==(l=e.python)?void 0:l.length)||0)?n().createElement(r.Typography.Text,{type:"secondary"},i("No missing packages")):n().createElement(r.Space,{direction:"vertical",size:2},n().createElement("div",null,"APT: ",W(null==e?void 0:e.apt)),n().createElement("div",null,"NPM: ",W(null==e?void 0:e.npm)),n().createElement("div",null,"Python: ",W(null==e?void 0:e.python)))}}]}))),n().createElement(r.Card,{title:i("Legacy Multi-app Diagnostics"),size:"small"},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement(r.Alert,{type:(null==x?void 0:x.healthy)?"success":"warning",showIcon:!0,message:(null==x?void 0:x.healthy)?i("No legacy multi-app risk detected"):i("Legacy multi-app risk detected")}),em.map(function(e){return n().createElement(r.Alert,{key:e.code,type:"warning"===e.level?"warning":"info",showIcon:!0,message:ep(e)})}),n().createElement(r.Space,{wrap:!0},((null==x?void 0:x.plugins)||[]).map(function(e){return n().createElement(r.Tag,{key:e.name,color:e.enabled||e.loaded?"orange":"default"},e.name,": ",e.enabled?i("Enabled"):i("Disabled"))}),n().createElement(r.Tag,{color:(null==x||null==(e=x.appSupervisor)?void 0:e.enabled)?"green":"default"},"app-supervisor: ",(null==x||null==(o=x.appSupervisor)?void 0:o.enabled)?i("Enabled"):i("Disabled")),n().createElement(r.Tag,null,i("Legacy app records"),": ",(null==x?void 0:x.legacyApplicationCount)||0)))),n().createElement(r.Card,{title:i("Cluster Nodes"),size:"small"},n().createElement(r.Table,{dataSource:h,columns:eo,rowKey:"id",size:"small",pagination:!1,scroll:{x:"max-content"}})),p&&n().createElement(r.Card,{title:n().createElement(r.Space,null,i("Current Node Details"),n().createElement(r.Tag,{color:"green"},"APP")),size:"small"},p._fallback&&n().createElement(r.Alert,{type:"warning",message:i("APP node not found in cluster registry. Showing data from the responding worker node."),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Descriptions,{size:"small",column:3},n().createElement(r.Descriptions.Item,{label:i("Hostname")},p.node.hostname),n().createElement(r.Descriptions.Item,{label:"PID"},p.node.pid),n().createElement(r.Descriptions.Item,{label:"Node.js"},p.node.nodeVersion),n().createElement(r.Descriptions.Item,{label:i("Worker Mode")},p.node.workerMode||"(default)"),n().createElement(r.Descriptions.Item,{label:i("App Port")},p.node.appPort),n().createElement(r.Descriptions.Item,{label:i("Cluster Mode")},p.node.clusterMode||"(disabled)"),n().createElement(r.Descriptions.Item,{label:i("RSS Memory")},j(p.memory.rss)),n().createElement(r.Descriptions.Item,{label:i("OS Memory")},j(p.os.freeMemory)," free / ",j(p.os.totalMemory)),n().createElement(r.Descriptions.Item,{label:i("CPU Cores")},p.os.cpuCount))),n().createElement(U,{open:!!M,node:M,onClose:function(){return L(null)}})))}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Q(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function J(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){Q(l,r,a,o,i,"next",e)}function i(e){Q(l,r,a,o,i,"throw",e)}o(void 0)})}}function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||G(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){if(e){if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}}function Y(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var X=r.Typography.Text;function Z(){var e,o=(0,l.useApp)().apiClient,i=T(),c=$((0,t.useState)(null),2),u=c[0],s=c[1],d=$((0,t.useState)([]),2),m=d[0],p=d[1],f=$((0,t.useState)(!1),2),y=f[0],h=f[1],g=$((0,t.useState)(null),2),v=g[0],b=g[1],E=(0,t.useCallback)(function(){return J(function(){var e,t,n,a,l,i,c;return Y(this,function(u){switch(u.label){case 0:h(!0),u.label=1;case 1:return u.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerAclCache:stats"}),o.request({url:"clusterManagerAclCache:listKeys"})])];case 2:return i=(l=$.apply(void 0,[u.sent(),2]))[0],c=l[1],s((null==i||null==(e=i.data)?void 0:e.data)||(null==i?void 0:i.data)||{}),p(Array.isArray(null==c||null==(n=c.data)||null==(t=n.data)?void 0:t.data)?c.data.data.data:Array.isArray(null==c||null==(a=c.data)?void 0:a.data)?c.data.data:Array.isArray(null==c?void 0:c.data)?c.data:[]),[3,5];case 3:return u.sent(),r.message.error("Failed to load ACL cache data"),[3,5];case 4:return h(!1),[7];case 5:return[2]}})})()},[o]);if((0,t.useEffect)(function(){E()},[]),(0,t.useEffect)(function(){if(v){var e=setInterval(E,1e3*v);return function(){return clearInterval(e)}}},[v,E]),!u)return null;var w=Object.entries(u.detailByRole||{}).map(function(e){var t,n,r=$(e,2),a=r[0],l=r[1];return t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({role:a},l),n=n={hitRate:l.checks>0?Math.round(l.hits/l.checks*1e4)/100:0},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),S=[{title:i("Role"),dataIndex:"role",width:120,filters:((function(e){if(Array.isArray(e))return H(e)})(e=new Set(m.map(function(e){return e.role})))||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||G(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){return{text:e,value:e}}),onFilter:function(e,t){return t.role===e}},{title:i("Resource"),dataIndex:"resource",width:200},{title:i("Action"),dataIndex:"action",width:120},{title:i("Cache Key"),dataIndex:"key",ellipsis:!0,render:function(e){return n().createElement(X,{code:!0,style:{fontSize:11}},e)}}],k=[{title:i("Role"),dataIndex:"role",width:150},{title:i("Checks"),dataIndex:"checks",width:100,sorter:function(e,t){return e.checks-t.checks}},{title:i("Hits"),dataIndex:"hits",width:100,render:function(e){return n().createElement(X,{type:"success"},e)}},{title:i("Misses"),dataIndex:"misses",width:100,render:function(e){return n().createElement(X,{type:"danger"},e)}},{title:i("Hit Rate"),dataIndex:"hitRate",width:100,render:function(e){return n().createElement(r.Tag,{color:e>80?"green":e>50?"orange":"red"},e,"%")},sorter:function(e,t){return e.hitRate-t.hitRate}},{title:i("Actions"),width:80,render:function(e,t){return n().createElement(r.Popconfirm,{title:"".concat(i("Clear cache for role"),' "').concat(t.role,'"?'),onConfirm:function(){var e;return e=t.role,J(function(){var t,n;return Y(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:clearRole",method:"post",data:{roleName:e}})];case 1:return n=a.sent(),r.message.success("Cleared ".concat((null==(t=n.data)?void 0:t.deletedCount)||0,' entries for role "').concat(e,'"')),E(),[3,3];case 2:return a.sent(),r.message.error("Failed to clear role cache"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.DeleteOutlined,null),danger:!0}))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:E,loading:y},i("Refresh")),n().createElement(r.Select,{placeholder:i("Auto refresh"),allowClear:!0,style:{width:160},value:v,onChange:b,options:[{value:5,label:i("Every 5s")},{value:10,label:i("Every 10s")},{value:30,label:i("Every 30s")}]}),n().createElement(r.Popconfirm,{title:i("Clear all ACL cache entries?"),onConfirm:function(){return J(function(){var e,t;return Y(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:clear",method:"post"})];case 1:return t=n.sent(),r.message.success("Cleared ".concat((null==(e=t.data)?void 0:e.deletedCount)||0," cache entries")),E(),[3,3];case 2:return n.sent(),r.message.error("Failed to clear cache"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{icon:n().createElement(a.DeleteOutlined,null),danger:!0},i("Clear All Cache"))),n().createElement(r.Popconfirm,{title:i("Reset ACL stats counters?"),onConfirm:function(){return J(function(){return Y(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:resetStats",method:"post"})];case 1:return e.sent(),r.message.success("Stats reset"),E(),[3,3];case 2:return e.sent(),r.message.error("Failed to reset stats"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,null,i("Reset Stats"))),n().createElement(r.Tag,null,"TTL: ",u.ttlSeconds,"s"),n().createElement(r.Tag,null,i("Since"),": ",new Date(u.startedAt).toLocaleString())),n().createElement(r.Row,{gutter:[16,16]},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Total ACL Checks"),value:u.totalChecks,prefix:n().createElement(a.SafetyCertificateOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Cache Hits"),value:u.cacheHits,prefix:n().createElement(a.CheckCircleOutlined,null),valueStyle:{color:"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Cache Misses"),value:u.cacheMisses,prefix:n().createElement(a.CloseCircleOutlined,null),valueStyle:{color:"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Hit Rate"),value:u.hitRate,suffix:"%",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:u.hitRate>80?"#3f8600":u.hitRate>50?"#faad14":"#cf1322"}}),n().createElement(X,{type:"secondary"},i("Cached keys"),": ",u.cachedKeys)))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:i("Stats by Role"),size:"small"},0===w.length?n().createElement(X,{type:"secondary"},i("No ACL checks recorded yet")):n().createElement(r.Table,{rowKey:"role",size:"small",pagination:!1,dataSource:w,columns:k,scroll:{x:"max-content"}}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"".concat(i("Cached Permission Keys")," (").concat(m.length,")"),size:"small"},0===m.length?n().createElement(X,{type:"secondary"},i("No cached keys")):n().createElement(r.Table,{rowKey:"key",size:"small",pagination:{pageSize:10,size:"small"},dataSource:m,columns:S})))))}function ee(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function et(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function en(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ee(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ee(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var er=r.Typography.Text;function ea(){var e=(0,l.useApp)().apiClient,o=en((0,t.useState)(null),2),i=o[0],c=o[1],u=en((0,t.useState)({}),2),s=u[0],d=u[1],m=en((0,t.useState)(0),2),p=m[0],f=m[1],y=en((0,t.useState)([]),2),h=y[0],g=y[1],v=en((0,t.useState)([]),2),b=v[0],E=v[1],w=en((0,t.useState)(!1),2),S=w[0],k=w[1],C=en((0,t.useState)(null),2),x=C[0],O=C[1],I=en((0,t.useState)(null),2),P=I[0],A=I[1],T=(0,t.useCallback)(function(){var t;return(t=function(){var t,n,r,a,l,o,i,u,s,m,p,y,h,v,b,w,S,C,x;return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(O){switch(O.label){case 0:k(!0),A(null),O.label=1;case 1:return O.trys.push([1,3,4,5]),[4,Promise.all([e.request({url:"clusterManagerRedis:info"}),e.request({url:"clusterManagerRedis:pubsub"}),e.request({url:"clusterManagerRedis:clients"}),e.request({url:"clusterManagerRedis:slowlog",params:{count:10}})])];case 2:return m=(s=en.apply(void 0,[O.sent(),4]))[0],p=s[1],y=s[2],h=s[3],c((null==m||null==(t=m.data)?void 0:t.data)||(null==m?void 0:m.data)||{}),d((v=(null==p||null==(n=p.data)?void 0:n.data)||(null==p?void 0:p.data)||{}).channels||{}),f(v.total_channels||0),g(Array.isArray(null==y||null==(a=y.data)||null==(r=a.data)?void 0:r.data)?y.data.data.data:Array.isArray(null==y||null==(l=y.data)?void 0:l.data)?y.data.data:Array.isArray(null==y?void 0:y.data)?y.data:[]),E(Array.isArray(null==h||null==(i=h.data)||null==(o=i.data)?void 0:o.data)?h.data.data.data:Array.isArray(null==h||null==(u=h.data)?void 0:u.data)?h.data.data:Array.isArray(null==h?void 0:h.data)?h.data:[]),[3,5];case 3:return A((null==(b=O.sent())||null==(x=b.response)||null==(C=x.data)||null==(S=C.errors)||null==(w=S[0])?void 0:w.message)||"Failed to connect to Redis"),[3,5];case 4:return k(!1),[7];case 5:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var l=t.apply(e,n);function o(e){et(l,r,a,o,i,"next",e)}function i(e){et(l,r,a,o,i,"throw",e)}o(void 0)})})()},[e]);if((0,t.useEffect)(function(){T()},[]),(0,t.useEffect)(function(){if(x){var e=setInterval(T,1e3*x);return function(){return clearInterval(e)}}},[x,T]),P)return n().createElement(r.Card,null,n().createElement(er,{type:"danger"},P),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:T},"Retry"));if(!i)return null;var j="unlimited"!==i.memory.max_memory&&i.memory.peak_bytes>0?Math.round(i.memory.used_bytes/i.memory.peak_bytes*100):null;return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:T,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:x,onChange:O,options:[{value:5,label:"Every 5s"},{value:10,label:"Every 10s"},{value:30,label:"Every 30s"}]}),n().createElement(r.Tag,{color:"blue"},"Redis ",i.server.version),n().createElement(r.Tag,null,"Uptime: ",R(i.server.uptime_seconds))),n().createElement(r.Row,{gutter:[16,16]},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Memory Used",value:i.memory.used,prefix:n().createElement(a.DatabaseOutlined,null),suffix:null!==j?"(".concat(j,"%)"):void 0}),n().createElement(er,{type:"secondary"},"Peak: ",i.memory.peak),n().createElement("br",null),n().createElement(er,{type:"secondary"},"Max: ",i.memory.max_memory),n().createElement("br",null),n().createElement(er,{type:"secondary"},"Policy: ",i.memory.max_memory_policy))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Ops/sec",value:i.stats.ops_per_sec,prefix:n().createElement(a.ThunderboltOutlined,null)}),n().createElement(er,{type:"secondary"},"Total commands: ",i.stats.total_commands.toLocaleString()))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Connected Clients",value:i.clients.connected,prefix:n().createElement(a.CloudServerOutlined,null)}),n().createElement(er,{type:"secondary"},"Blocked: ",i.clients.blocked))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Cache Hit Rate",value:i.stats.hit_rate,suffix:"%",prefix:n().createElement(a.FieldTimeOutlined,null),valueStyle:{color:i.stats.hit_rate>90?"#3f8600":i.stats.hit_rate>50?"#faad14":"#cf1322"}}),n().createElement(er,{type:"secondary"},"Hits: ",i.stats.keyspace_hits.toLocaleString()," / Misses:"," ",i.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(er,{type:"secondary"},"Expired: ",i.stats.expired_keys.toLocaleString()," / Evicted:"," ",i.stats.evicted_keys.toLocaleString())))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Keyspace",size:"small"},0===Object.keys(i.keyspace).length?n().createElement(er,{type:"secondary"},"No databases in use"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(i.keyspace).map(function(e){var t=en(e,2),n=t[0],r=t[1];return{db:n,keys:r.keys,expires:r.expires,avg_ttl:r.avg_ttl}}),columns:[{title:"Database",dataIndex:"db",width:80},{title:"Keys",dataIndex:"keys",width:80},{title:"Expires",dataIndex:"expires",width:80},{title:"Avg TTL",dataIndex:"avg_ttl",render:function(e){return e?"".concat((Number(e)/1e3).toFixed(1),"s"):"-"}}]}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Pub/Sub Channels (".concat(p,")"),size:"small"},0===p?n().createElement(er,{type:"secondary"},"No active channels"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(s).map(function(e){var t=en(e,2);return{name:t[0],subs:t[1]}}),columns:[{title:"Channel",dataIndex:"name",ellipsis:!0},{title:"Subscribers",dataIndex:"subs",width:100}]})))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Slow Log (recent)",size:"small"},0===b.length?n().createElement(er,{type:"secondary"},"No slow queries"):n().createElement(r.Table,{rowKey:"id",size:"small",pagination:!1,dataSource:b,columns:[{title:"ID",dataIndex:"id",width:60},{title:"Duration",dataIndex:"duration_us",width:100,render:function(e){return"".concat((e/1e3).toFixed(1),"ms")}},{title:"Command",dataIndex:"command",ellipsis:!0}]}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Connected Clients (".concat(h.length,")"),size:"small"},n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:{pageSize:5,size:"small"},dataSource:h,columns:[{title:"Addr",dataIndex:"addr",width:140},{title:"Age",dataIndex:"age",width:60,render:function(e){return"".concat(e,"s")}},{title:"Idle",dataIndex:"idle",width:60,render:function(e){return"".concat(e,"s")}},{title:"DB",dataIndex:"db",width:40},{title:"Cmd",dataIndex:"cmd",width:80},{title:"Flags",dataIndex:"flags",width:60,render:function(e){return n().createElement(r.Tag,null,e)}}]})))),n().createElement(r.Row,{gutter:16,style:{marginTop:16}},n().createElement(r.Col,{span:24},n().createElement(el,null))))}function el(){var e=(0,l.useApp)().apiClient,a=en((0,t.useState)(null),2),o=a[0],i=a[1];return((0,t.useEffect)(function(){e.request({url:"clusterManagerRedis:syncMessages"}).then(function(e){var t;return i(null==e||null==(t=e.data)?void 0:t.data)}).catch(function(){})},[e]),o)?n().createElement(r.Card,{title:"Sync Messages (PubSub ".concat(o.pubSubConnected?"Connected":"Disconnected",")"),size:"small"},n().createElement(r.Table,{rowKey:"channel",size:"small",pagination:!1,dataSource:o.channels||[],columns:[{title:"Channel",dataIndex:"channel",key:"channel"}]})):null}function eo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ei(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ec(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ei(l,r,a,o,i,"next",e)}function i(e){ei(l,r,a,o,i,"throw",e)}o(void 0)})}}function eu(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eo(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function es(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function ed(){var e,o=T(),i=(0,l.useApp)().apiClient,c=eu((0,t.useState)(!1),2),u=c[0],s=c[1],d=eu((0,t.useState)(null),2),m=d[0],p=d[1],f=eu((0,t.useState)([]),2),y=f[0],h=f[1],g=eu((0,t.useState)(null),2),v=g[0],b=g[1],E=(0,t.useCallback)(function(){return ec(function(){var e,t,n,r,a,l;return es(this,function(o){switch(o.label){case 0:s(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,Promise.all([i.request({url:"clusterManagerLock:info"}),i.request({url:"clusterManagerLock:list"})])];case 2:return a=(r=eu.apply(void 0,[o.sent(),2]))[0],l=r[1],p(null==a||null==(e=a.data)?void 0:e.data),h((null==l||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),[3,5];case 3:return o.sent(),[3,5];case 4:return s(!1),[7];case 5:return[2]}})})()},[i]);(0,t.useEffect)(function(){E()},[E]),(0,t.useEffect)(function(){if(v){var e=setInterval(E,1e3*v);return function(){return clearInterval(e)}}},[v,E]);var w=[{title:o("Lock Key"),dataIndex:"key",key:"key",render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:o("Adapter"),dataIndex:"adapter",key:"adapter",width:100,render:function(e){return n().createElement(r.Tag,null,e)}},{title:o("TTL"),dataIndex:"ttl",key:"ttl",width:120,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:o("Actions"),key:"actions",width:120,render:function(e,t){return n().createElement(r.Popconfirm,{title:o("Force release this lock?"),description:o("This may cause data inconsistency. Use with caution."),onConfirm:function(){var e;return e=t.key,ec(function(){return es(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,i.request({url:"clusterManagerLock:release",method:"post",data:{key:e}})];case 1:return t.sent(),r.message.success(o("Lock released")),E(),[3,3];case 2:return t.sent(),r.message.error(o("Failed to release lock")),[3,3];case 3:return[2]}})})()},okText:o("Release"),cancelText:o("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.UnlockOutlined,null)},o("Release")))}}];return n().createElement(r.Spin,{spinning:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:E},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:v,onChange:b,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]})),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Adapter Type"),value:(null==m?void 0:m.adapter)||"-",prefix:n().createElement(a.LockOutlined,null),valueStyle:{fontSize:16}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Active Locks"),value:null!=(e=null==m?void 0:m.activeLocks)?e:0,prefix:n().createElement(a.LockOutlined,null),valueStyle:{color:((null==m?void 0:m.activeLocks)||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Total Listed"),value:y.length})))),n().createElement(r.Card,{title:o("Active Locks"),size:"small"},0===y.length?n().createElement("div",{style:{textAlign:"center",padding:24,color:"#999"}},o("No active locks")):n().createElement(r.Table,{dataSource:y,columns:w,rowKey:"key",size:"small",pagination:{pageSize:20}}))))}function em(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ep(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ef(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ep(l,r,a,o,i,"next",e)}function i(e){ep(l,r,a,o,i,"throw",e)}o(void 0)})}}function ey(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return em(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return em(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eh(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function eg(){var e,o,i,c=T(),u=(0,l.useApp)().apiClient,s=ey((0,t.useState)(!1),2),d=s[0],m=s[1],p=ey((0,t.useState)(null),2),f=p[0],y=p[1],h=ey((0,t.useState)(null),2),g=h[0],v=h[1],b=ey((0,t.useState)(null),2),E=b[0],w=b[1],S=ey((0,t.useState)(null),2),k=S[0],C=S[1],x=ey((0,t.useState)([]),2),O=x[0],I=x[1],P=ey((0,t.useState)({}),2),A=P[0],j=P[1],R=ey((0,t.useState)([]),2),z=R[0],M=R[1],D=ey((0,t.useState)({}),2),N=D[0],F=D[1],B=(0,t.useCallback)(function(){return ef(function(){var e,t;return eh(this,function(n){switch(n.label){case 0:m(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,u.request({url:"clusterManagerQueue:stats"})];case 2:return y(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[u]),q=(0,t.useCallback)(function(e){return ef(function(){var t,n,r,a,l;return eh(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,u.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return I((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),j((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,3];case 2:return o.sent(),[3,3];case 3:return[2]}})})()},[u]),L=(0,t.useCallback)(function(e){return ef(function(){var t,n,r,a,l;return eh(this,function(o){switch(o.label){case 0:if(!(null==e?void 0:e.key))return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,u.request({url:"clusterManagerQueue:messages",params:{source:"redis",key:e.key}})];case 2:return M((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),F((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,4];case 3:return o.sent(),[3,4];case 4:return[2]}})})()},[u]);(0,t.useEffect)(function(){B()},[B]),(0,t.useEffect)(function(){if(g){var e=setInterval(B,1e3*g);return function(){return clearInterval(e)}}},[g,B]);var _=[{title:c("Channel"),dataIndex:"channel",key:"channel"},{title:c("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return null===e?n().createElement(r.Tag,null,"N/A"):n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:c("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:c("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:c("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){w(t.channel),q(t.channel)}},c("Messages"))}}],U=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:c("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:c("Retried"),dataIndex:"retried",key:"retried",width:80},{title:c("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}],K=[{title:c("Queue"),dataIndex:"channel",key:"channel",width:240},{title:c("Redis Key"),dataIndex:"key",key:"key",ellipsis:!0},{title:c("App"),dataIndex:"appName",key:"appName",width:120},{title:c("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:c("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){C(t),L(t)}},c("Items"))}}],W=[{title:"#",dataIndex:"index",key:"index",width:80},{title:c("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:c("Queued At"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];return n().createElement(r.Spin,{spinning:d},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:B},c("Refresh")),n().createElement(r.Select,{placeholder:c("Auto Refresh"),allowClear:!0,value:g,onChange:v,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),f&&n().createElement(r.Tag,{color:f.connected?"green":"red"},f.adapter)),f&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Adapter"),value:f.adapter,prefix:n().createElement(a.ApiOutlined,null),valueStyle:{fontSize:16}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Channels"),value:f.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Pending"),value:f.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:f.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Connected"),value:f.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:f.connected?"#3f8600":"#cf1322"}})))),(null==f?void 0:f.redisQueues)&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Queue Pending"),value:f.redisQueues.totalPending||0,prefix:n().createElement(a.DatabaseOutlined,null),valueStyle:{color:(f.redisQueues.totalPending||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Queues"),value:(null==(e=f.redisQueues.queues)?void 0:e.length)||0,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Connected"),value:f.redisQueues.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:f.redisQueues.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:c("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==f?void 0:f.channels)||[],columns:_,rowKey:"channel",size:"small",pagination:!1})),n().createElement(r.Card,{title:c("Redis Queues"),size:"small"},(null==f||null==(o=f.redisQueues)?void 0:o.note)&&n().createElement(r.Tag,{style:{marginBottom:8}},f.redisQueues.note),n().createElement(r.Table,{dataSource:(null==f||null==(i=f.redisQueues)?void 0:i.queues)||[],columns:K,rowKey:"key",size:"small",pagination:!1})),E&&n().createElement(r.Card,{title:"".concat(c("Messages"),": ").concat(E),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return w(null)}},"Close")},A.note&&n().createElement(r.Tag,{style:{marginBottom:8}},A.note),n().createElement(r.Table,{dataSource:O,columns:U,rowKey:"id",size:"small",pagination:{pageSize:10,total:A.count}})),k&&n().createElement(r.Card,{title:"".concat(c("Redis Queue Items"),": ").concat(k.channel),size:"small",extra:n().createElement(r.Space,null,n().createElement(r.Button,{size:"small",onClick:function(){return L(k)}},c("Refresh")),n().createElement(r.Button,{size:"small",onClick:function(){return C(null)}},c("Close")))},n().createElement(r.Tag,{style:{marginBottom:8}},k.key),N.note&&n().createElement(r.Tag,{style:{marginBottom:8}},N.note),n().createElement(r.Table,{dataSource:z,columns:W,rowKey:"id",size:"small",pagination:{pageSize:10,total:N.count}}))))}function ev(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eb(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eE(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eb(l,r,a,o,i,"next",e)}function i(e){eb(l,r,a,o,i,"throw",e)}o(void 0)})}}function ew(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||eS(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eS(e,t){if(e){if("string"==typeof e)return ev(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ev(e,t)}}function ek(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var eC=r.Input.TextArea,ex=r.Typography.Title,eO=r.Typography.Text;function eI(){var e,o=T(),i=(0,l.useApp)().apiClient,c=ew((0,t.useState)(!1),2),u=c[0],s=c[1],d=ew((0,t.useState)(!1),2),m=d[0],p=d[1],f=ew((0,t.useState)(null),2),y=f[0],h=f[1],g=ew((0,t.useState)("directory"),2),v=g[0],b=g[1],E=ew((0,t.useState)("custom"),2),w=E[0],S=E[1],k=ew((0,t.useState)(""),2),C=k[0],x=k[1],O=ew((0,t.useState)(""),2),I=O[0],P=O[1],A=ew((0,t.useState)("PURGE"),2),j=A[0],R=A[1],z=ew((0,t.useState)('{\n "X-Purge": "1"\n}'),2),M=z[0],D=z[1],N=ew((0,t.useState)(""),2),F=N[0],B=N[1],q=n().useCallback(function(){return eE(function(){var e,t;return ek(this,function(n){switch(n.label){case 0:s(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,i.request({url:"clusterManagerCacheMgr:nginxCacheStatus"})];case 2:return h(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),r.message.error(o("Failed to load Nginx status")),[3,5];case 4:return s(!1),[7];case 5:return[2]}})})()},[i,o]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){var e;(null==y||null==(e=y.detectedPaths)?void 0:e.length)>0?S(y.detectedPaths[0]):S("custom")},[y]);var L=(null==y?void 0:y.detectedPaths)||[],_=(null==y?void 0:y.nginxInstalled)||!1;return n().createElement(r.Card,{bordered:!1,loading:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"large"},n().createElement(r.Alert,{type:_?"success":"warning",showIcon:!0,icon:_?n().createElement(a.CheckCircleOutlined,null):n().createElement(a.CloseCircleOutlined,null),message:n().createElement("span",{style:{fontWeight:600}},o("Nginx Cache Status")),description:n().createElement("div",{style:{marginTop:8}},n().createElement("div",null,n().createElement("span",{style:{fontWeight:500}},o("Status"),":")," ",_?n().createElement(r.Tag,{color:"success"},o("Nginx is installed")):n().createElement(r.Tag,{color:"warning"},o("Nginx is NOT installed"))),(null==y?void 0:y.mainConfigPath)&&n().createElement("div",{style:{marginTop:4}},n().createElement("span",{style:{fontWeight:500}},o("Nginx configuration file found at"),":")," ",n().createElement("code",{style:{fontSize:12}},y.mainConfigPath)),L.length>0&&n().createElement("div",{style:{marginTop:4}},n().createElement("span",{style:{fontWeight:500}},o("Nginx cache paths detected"),":"),n().createElement("div",{style:{marginTop:4,display:"flex",flexWrap:"wrap",gap:6}},L.map(function(e){return n().createElement(r.Tag,{key:e,color:"blue",style:{fontSize:11}},e)}))),!_&&n().createElement("div",{style:{marginTop:4,fontStyle:"italic",opacity:.8}},o("Nginx is not detected on this node. You can still input a custom cache directory."))),action:n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:q},o("Refresh"))}),n().createElement("div",null,n().createElement(ex,{level:5,style:{fontSize:14}},o("Nginx cache clearing method")),n().createElement(r.Radio.Group,{value:v,onChange:function(e){return b(e.target.value)},style:{width:"100%",marginTop:8}},n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:12},n().createElement(r.Radio.Button,{value:"directory",style:{width:"100%",height:"auto",padding:"16px 24px",display:"flex",flexDirection:"column",borderRadius:8,textAlign:"left",boxShadow:"none",lineHeight:"normal",border:"directory"===v?"2px solid #1677ff":"1px solid #d9d9d9"}},n().createElement(r.Space,{align:"start",size:"middle"},n().createElement(a.DeleteOutlined,{style:{fontSize:24,color:"directory"===v?"#1677ff":"inherit",marginTop:4}}),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,fontSize:15,color:"directory"===v?"#1677ff":"inherit"}},o("Physical Files")),n().createElement("div",{style:{fontSize:12,opacity:.65,marginTop:4}},o("Directly deletes all cache files inside the nginx cache directory on this server node.")))))),n().createElement(r.Col,{span:12},n().createElement(r.Radio.Button,{value:"purgeRequest",style:{width:"100%",height:"auto",padding:"16px 24px",display:"flex",flexDirection:"column",borderRadius:8,textAlign:"left",boxShadow:"none",lineHeight:"normal",border:"purgeRequest"===v?"2px solid #1677ff":"1px solid #d9d9d9"}},n().createElement(r.Space,{align:"start",size:"middle"},n().createElement(a.SendOutlined,{style:{fontSize:24,color:"purgeRequest"===v?"#1677ff":"inherit",marginTop:4}}),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,fontSize:15,color:"purgeRequest"===v?"#1677ff":"inherit"}},o("HTTP Purge Request")),n().createElement("div",{style:{fontSize:12,opacity:.65,marginTop:4}},o("Sends a custom HTTP request (like PURGE or bypass headers) to let Nginx clear specific URLs."))))))))),n().createElement(r.Card,{bordered:!0,size:"small",style:{backgroundColor:"#fafafa"}},"directory"===v?n().createElement(r.Form,{layout:"vertical"},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Select Cache Path")),required:!0},n().createElement(r.Select,{value:w,onChange:function(e){return S(e)},style:{width:"100%"},options:((function(e){if(Array.isArray(e))return ev(e)})(e=L.map(function(e){return{label:e,value:e}}))||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||eS(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([{label:o("Custom Path"),value:"custom"}])})),"custom"===w&&n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Custom Cache Path")),required:!0},n().createElement(r.Input,{placeholder:"/var/cache/nginx",value:C,onChange:function(e){return x(e.target.value)}}),n().createElement(eO,{type:"secondary",style:{fontSize:11,display:"block",marginTop:4}},o("Provide the full absolute path of the directory. Restricted system paths will be rejected for safety.")))):n().createElement(r.Form,{layout:"vertical"},n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:18},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Purge URL")),required:!0},n().createElement(r.Input,{placeholder:"http://127.0.0.1/purge/*",value:I,onChange:function(e){return P(e.target.value)}}))),n().createElement(r.Col,{span:6},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("HTTP Method")),required:!0},n().createElement(r.Select,{value:j,onChange:function(e){return R(e)},options:[{label:"PURGE",value:"PURGE"},{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"DELETE",value:"DELETE"}]})))),n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Headers (JSON)"))},n().createElement(eC,{rows:4,value:M,onChange:function(e){return D(e.target.value)},placeholder:'{\n "X-Purge": "1"\n}',style:{fontFamily:"monospace",fontSize:12}})))),n().createElement("div",null,n().createElement(r.Popconfirm,{title:o("Clear Nginx Cache?"),description:"directory"===v?o("Are you sure you want to clear Nginx cache? This will permanently delete all files in this directory."):o("Are you sure you want to trigger this HTTP Purge request?"),onConfirm:function(){return eE(function(){var e,t,n,a,l,c,u,s,d,m,f,y;return ek(this,function(h){switch(h.label){case 0:p(!0),B(""),h.label=1;case 1:if(h.trys.push([1,3,4,5]),t={method:v},"directory"===v){if(!(n="custom"===w?C:w))return r.message.error(o("Nginx cache path is required")),p(!1),[2];t.directory=n,B("[INFO] Clearing physical cache files in: ".concat(n,"\n"))}else{if(!I)return r.message.error(o("Please enter a valid Purge URL")),p(!1),[2];t.url=I,t.httpMethod=j,a={};try{M.trim()&&(a=JSON.parse(M))}catch(e){return r.message.error(o("Invalid headers JSON structure")),p(!1),[2]}t.headers=a,B("[INFO] Sending HTTP Purge request:\n[INFO] Method: ".concat(j,"\n[INFO] URL: ").concat(I,"\n[INFO] Headers: ").concat(JSON.stringify(a,null,2),"\n"))}return[4,i.request({url:"clusterManagerCacheMgr:clearNginxCache",method:"post",data:{values:t}})];case 2:return c=null==(l=h.sent())||null==(e=l.data)?void 0:e.data,"directory"===v?(u=o("Cache cleared successfully. Cleared {count} items.").replace("{count}",String((null==c?void 0:c.clearedCount)||0)),r.message.success(u),B(function(e){return e+"[SUCCESS] ".concat(u,"\n")})):(s=o("HTTP Purge request completed. Status: {status}").replace("{status}",String((null==c?void 0:c.status)||200)),r.message.success(s),B(function(e){var t;return e+"[SUCCESS] ".concat(s,"\n[RESPONSE BODY]\n").concat("object"==((t=null==c?void 0:c.data)&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t)?JSON.stringify(c.data,null,2):String((null==c?void 0:c.data)||""),"\n")})),[3,5];case 3:return y=(null==(d=h.sent())||null==(f=d.response)||null==(m=f.data)?void 0:m.message)||(null==d?void 0:d.message)||String(d),r.message.error(y),B(function(e){return e+"[ERROR] Failed: ".concat(y,"\n")}),[3,5];case 4:return p(!1),[7];case 5:return[2]}})})()},okButtonProps:{loading:m}},n().createElement(r.Button,{type:"primary",danger:"directory"===v,size:"large",icon:"directory"===v?n().createElement(a.DeleteOutlined,null):n().createElement(a.SendOutlined,null),loading:m},"directory"===v?o("Clear Nginx Cache"):o("Send Purge Request")))),F&&n().createElement("div",null,n().createElement(ex,{level:5,style:{fontSize:13,marginBottom:8}},o("Execution Logs")),n().createElement("pre",{style:{backgroundColor:"#1e1e1e",color:"#d4d4d4",padding:"12px 16px",borderRadius:6,fontFamily:"monospace",fontSize:12,overflowX:"auto",whiteSpace:"pre-wrap",maxHeight:"300px"}},F))))}function eP(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eA(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eT(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eA(l,r,a,o,i,"next",e)}function i(e){eA(l,r,a,o,i,"throw",e)}o(void 0)})}}function ej(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eP(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eP(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eR(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function ez(){var e=T(),o=(0,l.useApp)().apiClient,i=ej((0,t.useState)(!1),2),c=i[0],u=i[1],s=ej((0,t.useState)([]),2),d=s[0],m=s[1],p=ej((0,t.useState)([]),2),f=p[0],y=p[1],h=ej((0,t.useState)(null),2),g=h[0],v=h[1],b=(0,t.useCallback)(function(){return eT(function(){var e,t,n,r,a,l,i,c,s;return eR(this,function(d){switch(d.label){case 0:u(!0),d.label=1;case 1:return d.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerCacheMgr:stores"}),o.request({url:"clusterManagerCacheMgr:caches"}),o.request({url:"clusterManagerCacheMgr:redisMemory"})])];case 2:return i=(l=ej.apply(void 0,[d.sent(),3]))[0],c=l[1],s=l[2],m((null==i||null==(t=i.data)||null==(e=t.data)?void 0:e.data)||[]),y((null==c||null==(r=c.data)||null==(n=r.data)?void 0:n.data)||[]),v(null==s||null==(a=s.data)?void 0:a.data),[3,5];case 3:return d.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})})()},[o]);(0,t.useEffect)(function(){b()},[b]);var E=[{title:e("Store Name"),dataIndex:"name",key:"name"},{title:e("Type"),dataIndex:"type",key:"type",width:120,render:function(e){return n().createElement(r.Tag,{color:"redis"===e?"blue":"default"},e)}},{title:e("Default"),dataIndex:"isDefault",key:"isDefault",width:100,render:function(e){return e?n().createElement(r.Tag,{color:"green"},"Yes"):"-"}}],w=[{title:e("Cache Name"),dataIndex:"name",key:"name"},{title:e("Prefix"),dataIndex:"prefix",key:"prefix",render:function(e){return e?n().createElement("code",{style:{fontSize:11}},e):"-"}}];return n().createElement(r.Tabs,{defaultActiveKey:"overview",items:[{key:"overview",label:e("Cache Stores"),children:n().createElement(r.Spin,{spinning:c},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:b},e("Refresh")),n().createElement(r.Popconfirm,{title:e("Flush all caches?"),description:e("This will clear all cached data across all stores."),onConfirm:function(){return eT(function(){return eR(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerCacheMgr:flushAll",method:"post"})];case 1:return t.sent(),r.message.success(e("All caches flushed")),b(),[3,3];case 2:return t.sent(),r.message.error(e("Failed to flush caches")),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.DeleteOutlined,null)},e("Flush All")))),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Cache Stores"),value:d.length,prefix:n().createElement(a.DatabaseOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Named Caches"),value:f.length}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Redis Keys"),value:(null==g?void 0:g.available)?g.totalKeys:"-",suffix:(null==g?void 0:g.available)?"(".concat(g.usedMemory,")"):""})))),n().createElement(r.Card,{title:e("Registered Stores"),size:"small"},n().createElement(r.Table,{dataSource:d,columns:E,rowKey:"name",size:"small",pagination:!1})),n().createElement(r.Card,{title:e("Named Caches"),size:"small"},n().createElement(r.Table,{dataSource:f,columns:w,rowKey:"name",size:"small",pagination:!1}))))},{key:"acl",label:e("ACL Cache"),children:n().createElement(Z,null)},{key:"redis",label:e("Redis Monitor"),children:n().createElement(ea,null)},{key:"locks",label:e("Locks"),children:n().createElement(ed,null)},{key:"queue",label:e("Event Queue"),children:n().createElement(eg,null)},{key:"nginx",label:e("Nginx Cache"),children:n().createElement(eI,null)}]})}function eM(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eD(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eN(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eD(l,r,a,o,i,"next",e)}function i(e){eD(l,r,a,o,i,"throw",e)}o(void 0)})}}function eF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eB(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){eF(e,t,n[t])})}return e}function eq(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function eL(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eM(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eM(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e_(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var eU=r.Typography.Text;r.Typography.Title;var eK={APP_ROLE:"worker",WORKER_MODE:"*",APP_PORT:"13000",SKILL_HUB_SANDBOX:"false"},eW=[{configMapRef:{name:"nocobase-config"}},{secretRef:{name:"nocobase-secret"}}],eV=[{name:"app-storage",mountPath:"/app/nocobase/storage"},{name:"script-volume",mountPath:"/hotfix-license.js",subPath:"hotfix-license.js"}],eH=[{name:"app-storage",persistentVolumeClaim:{claimName:"app-storage"}},{name:"script-volume",configMap:{name:"nocobase-scripts"}}],eQ={running:"green",stopped:"orange",exited:"red",pending:"blue",creating:"cyan",error:"red"};function eJ(e,t){return JSON.stringify(null!=e?e:t,null,2)}function e$(e,t,n){var r=String(e||"").trim();if(!r)return t;try{return JSON.parse(r)}catch(e){throw Error("".concat(n," must be valid JSON"))}}function eG(){var e,o=T(),i=(0,l.useApp)().apiClient,c=eL((0,t.useState)(!1),2),u=c[0],s=c[1],d=eL((0,t.useState)([]),2),m=d[0],p=d[1],f=eL((0,t.useState)({}),2),y=f[0],h=f[1],g=eL((0,t.useState)({}),2),v=g[0],b=g[1],E=eL((0,t.useState)({}),2),w=E[0],S=E[1],k=eL((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),C=k[0],x=k[1],O=eL((0,t.useState)({visible:!1,containerName:"",logs:""}),2),I=O[0],P=O[1],A=eL((0,t.useState)(null),2),j=A[0],R=A[1],z=eL((0,t.useState)(!1),2),M=z[0],D=z[1],N=eL((0,t.useState)({visible:!1,stack:null}),2),F=N[0],B=N[1],q=eL(r.Form.useForm(),1)[0],L=eL(r.Form.useForm(),1)[0],_=eL((0,t.useState)([]),2),U=_[0],K=_[1],W=(0,t.useCallback)(function(){return eN(function(){var e,t,n;return e_(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:networks"})];case 1:return Array.isArray(n=(null==(e=(t=r.sent()).data)?void 0:e.data)||t.data)||(n=[]),K(n),[3,3];case 2:return r.sent(),K([]),[3,3];case 3:return[2]}})})()},[i]),V=(0,t.useCallback)(function(){return eN(function(){var e,t;return e_(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:ping"})];case 1:return R((null==(e=(t=n.sent()).data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),R({connected:!1,adapter:"unknown"}),[3,3];case 3:return[2]}})})()},[i]),H=(0,t.useCallback)(function(){return eN(function(){var e,t,n;return e_(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,i.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return p(t=(null==(e=r.sent().data)?void 0:e.data)||[]),n={},t.forEach(function(e){n[e.id]=e.desiredReplicas}),S(n),[3,3];case 2:return r.sent(),[3,3];case 3:return[2]}})})()},[i]),Q=(0,t.useCallback)(function(e){return eN(function(){var t,n,a,l;return e_(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:containers",params:{stackId:e}})];case 1:return a=(null==(t=(n=o.sent()).data)?void 0:t.data)||n.data,h(function(t){return eq(eB({},t),eF({},e,a.data||[]))}),b(function(t){return eq(eB({},t),eF({},e,a.meta||{}))}),[3,3];case 2:return l=o.sent(),r.message.error("Failed to load containers: ".concat(l.message)),[3,3];case 3:return[2]}})})()},[i]),J=(0,t.useCallback)(function(){return eN(function(){var e,t;return e_(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:getSettings"})];case 1:return t=n.sent(),q.setFieldsValue((null==(e=t.data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),[3,3];case 3:return[2]}})})()},[i,q]),$=function(e){B({visible:!0,stack:e||null}),L.setFieldsValue(e?eq(eB({},e),{envVars:eJ(e.envVars,{}),resourceLimits:eJ(e.resourceLimits,{}),k8sEnv:eJ(e.k8sEnv,[]),k8sEnvFrom:eJ(e.k8sEnvFrom,[]),k8sVolumeMounts:eJ(e.k8sVolumeMounts,[]),k8sVolumes:eJ(e.k8sVolumes,[])}):{name:"app-workers",adapter:"kubernetes",image:"nocobase/nocobase:2.1.6-full",command:"export NOCOBASE_RUNNING_IN_DOCKER=true\nif ! command -v git >/dev/null; then echo \"Installing git...\"; if command -v apt-get >/dev/null; then apt-get update && apt-get install -y git; elif command -v apk >/dev/null; then apk add git; fi; fi\nif [ ! -d /app/nocobase ]; then mkdir -p /app/nocobase; fi\nif [ ! -f /app/nocobase/package.json ]; then\n echo \"copying...\"\n tar -zxf /app/nocobase.tar.gz --absolute-names -C /app/nocobase\n touch /app/nocobase/node_modules/@nocobase/app/dist/client/index.html\nfi\necho \"Applying license hotfix...\"\ncd /app/nocobase && echo \"module.exports={getEnvAsync:async()=>({sys:'mock',osVer:'mock',db:{id:'mock'}}),getInstanceIdWithPublicKeyAsync:async()=>'mock',getInstanceIdAsync:async()=>'mock',instanceIdDecrypt:()=>'mock',createKeyPair:()=>({publicKey:'mock',privateKey:'mock'}),encryptWithPublicKey:()=>'mock',encrypt:()=>'mock',decryptWithPrivateKey:()=>'mock',createSignature:()=>'mock',verifySignature:()=>true,keyEncrypt:()=>'mock',keyDecrypt:()=>JSON.stringify({licenseKey:{domain:'*'}})}\" > node_modules/@nocobase/license-kit/index.js\ncd /app/nocobase && yarn nocobase postinstall\nPRIMARY_URL=\"http://app-1:13000/api/app:getInfo\"\nMAX_WAIT=900\nWAITED=0\nwhile [ $WAITED -lt $MAX_WAIT ]; do\n if wget -q --spider \"$PRIMARY_URL\" 2>/dev/null; then\n echo \"Primary ready after ${WAITED}s. Waiting an additional 15s...\"\n sleep 15\n break\n fi\n sleep 5\n WAITED=$((WAITED + 5))\ndone\nexec yarn --cwd /app/nocobase start",envVars:eJ(eK,{}),resourceLimits:eJ({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:eJ([],[]),k8sEnvFrom:eJ(eW,[]),k8sVolumeMounts:eJ(eV,[]),k8sVolumes:eJ(eH,[]),networkMode:""}),W()},G=function(){B({visible:!1,stack:null}),L.resetFields()};(0,t.useEffect)(function(){V(),H(),J()},[V,H,J]),(0,t.useEffect)(function(){var e=function(){m.forEach(function(e){return Q(e.id)})};e();var t=setInterval(function(){H(),e()},1e4);return function(){return clearInterval(t)}},[m,Q,H]);var Y=function(e,t,n){return eN(function(){var a,l,o,c,u;return e_(this,function(d){switch(d.label){case 0:s(!0),d.label=1;case 1:return d.trys.push([1,4,5,6]),[4,i.request({url:"/workerOrchestrator:".concat(e),method:"POST",data:{stackId:n,containerId:t}})];case 2:return d.sent(),r.message.success("".concat(e," ").concat(t," successful")),[4,Q(n)];case 3:return d.sent(),[3,6];case 4:return a=d.sent(),r.message.error((null==(u=a.response)||null==(c=u.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message),[3,6];case 5:return s(!1),[7];case 6:return[2]}})})()},X=[{title:o("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(eU,{code:!0,style:{fontSize:11}},t.id),n().createElement(eU,null,e))}},{title:o("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:eQ[e]||"default"},e.toUpperCase())}},{title:o("Packages"),key:"packages",width:140,render:function(e,t){var l=t.packageStatus;if(!l)return n().createElement(eU,{type:"secondary"},"-");var o="processing";return"succeeded"===l.initStatus&&(o="success"),"failed"===l.initStatus&&(o="error"),n().createElement(r.Tooltip,{title:l.initProgressLog||"Click to view logs"},n().createElement(r.Tag,{color:o,style:{cursor:"pointer"},onClick:function(){return P({visible:!0,containerName:t.name,logs:l.lastInitLog||""})}},"running"===l.initStatus&&n().createElement(a.ReloadOutlined,{spin:!0,style:{marginRight:4}}),"succeeded"===l.initStatus?"Installed":"failed"===l.initStatus?"Failed":"".concat(l.initProgressPercent||0,"%")))}},{title:o("Image"),dataIndex:"image",key:"image",ellipsis:!0,render:function(e){return n().createElement(eU,{type:"secondary",style:{fontSize:12}},e)}},{title:o("Age"),dataIndex:"createdAt",key:"age",width:80,render:function(e){return e?function(e){var t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<60)return"".concat(t,"m");var n=Math.floor(t/60);if(n<24)return"".concat(n,"h ").concat(t%60,"m");var r=Math.floor(n/24);return"".concat(r,"d ").concat(n%24,"h")}(e):"-"}},{title:o("Actions"),key:"actions",width:160,render:function(e,t){var l=(null==j?void 0:j.adapter)==="kubernetes";return n().createElement(r.Space,{size:"small"},!l&&("running"===t.status?n().createElement(r.Tooltip,{title:o("Stop")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PauseCircleOutlined,null),onClick:function(){return Y("stop",t.id,t._stackId)}})):n().createElement(r.Tooltip,{title:o("Start")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PlayCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return Y("start",t.id,t._stackId)}}))),n().createElement(r.Tooltip,{title:o("Logs")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){var e,n;return e=t.id,n=t._stackId,eN(function(){var t,a,l;return e_(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:logs",params:{stackId:n,containerId:e,tail:200}})];case 1:return x({visible:!0,containerId:e,logs:((null==(t=(a=o.sent()).data)?void 0:t.data)||a.data).lines||[]}),[3,3];case 2:return l=o.sent(),r.message.error("Failed to get logs: ".concat(l.message)),[3,3];case 3:return[2]}})})()}})),n().createElement(r.Popconfirm,{title:o("Remove this container?"),onConfirm:function(){return Y("remove",t.id,t._stackId)}},n().createElement(r.Tooltip,{title:o("Remove")},n().createElement(r.Button,{size:"small",type:"text",danger:!0,icon:n().createElement(a.DeleteOutlined,null)}))))}}];return j?n().createElement("div",null,n().createElement(r.Card,{size:"small",style:{marginBottom:16}},n().createElement(r.Row,{justify:"space-between",align:"middle"},n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(a.ApiOutlined,{style:{fontSize:18}}),n().createElement(eU,{strong:!0},o("Adapter"),": "),n().createElement(r.Tag,{color:"blue"},(null==(e=j.adapter)?void 0:e.toUpperCase())||"NONE"),n().createElement(r.Badge,{status:j.connected?"success":"error",text:j.connected?o("Connected"):o("Disconnected")}),void 0!==j.leader&&n().createElement(n().Fragment,null,n().createElement(eU,{type:"secondary"},"|"),n().createElement(r.Badge,{status:j.leader?"success":"default",text:j.leader?o("Leader (this node)"):o("Follower")})))),n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(r.Button,{type:"primary",icon:n().createElement(a.PlusOutlined,null),onClick:function(){return $()}},o("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return D(!0)}},o("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){V(),H()}},o("Refresh")))))),j.connected?n().createElement(n().Fragment,null,0===m.length&&n().createElement(r.Alert,{type:"info",showIcon:!0,message:o("No stacks configured"),description:o("Create a worker stack here, then scale it to start worker pods."),style:{marginBottom:16}}),m.map(function(e){var t,l,c,d,m=(y[e.id]||[]).map(function(t){return eq(eB({},t),{_stackId:e.id})}),p=v[e.id]||{};return n().createElement(r.Card,{key:e.id,title:n().createElement(r.Space,null,n().createElement(a.CloudServerOutlined,null),n().createElement("span",null,e.name),n().createElement(r.Tag,null,e.adapter)),extra:n().createElement(r.Space,null,n().createElement(eU,{type:"secondary",style:{fontSize:12}},e.image),n().createElement(r.Tooltip,{title:o("Edit worker stack")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.EditOutlined,null),onClick:function(){return $(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(eU,null,o("Replicas"),":"),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ShrinkOutlined,null),disabled:u||0>=(w[e.id]||0),onClick:function(){return S(function(t){return eq(eB({},t),eF({},e.id,Math.max(0,(t[e.id]||0)-1)))})}}),n().createElement(r.InputNumber,{min:0,max:20,value:null!=(t=w[e.id])?t:e.desiredReplicas,onChange:function(t){return S(function(n){return eq(eB({},n),eF({},e.id,null!=t?t:0))})},style:{width:70}}),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ExpandAltOutlined,null),disabled:u||(w[e.id]||0)>=20,onClick:function(){return S(function(t){return eq(eB({},t),eF({},e.id,Math.min(20,(t[e.id]||0)+1)))})}}),n().createElement(r.Button,{type:"primary",loading:u,onClick:function(){var t;return t=e.id,eN(function(){var e,n,a,l,o,c,u,d,m;return e_(this,function(p){switch(p.label){case 0:if(void 0===(e=w[t]))return[2];s(!0),p.label=1;case 1:return p.trys.push([1,5,6,7]),[4,i.request({url:"/workerOrchestrator:scale",method:"POST",data:{stackId:t,replicas:e}})];case 2:return l=(null==(n=(a=p.sent()).data)?void 0:n.data)||a.data,r.message.success("Scaled: ".concat(l.previousReplicas," → ").concat(l.currentReplicas," replicas")),[4,Q(t)];case 3:return p.sent(),[4,H()];case 4:return p.sent(),[3,7];case 5:return o=p.sent(),r.message.error((null==(m=o.response)||null==(d=m.data)||null==(u=d.errors)||null==(c=u[0])?void 0:c.message)||o.message),[3,7];case 6:return s(!1),[7];case 7:return[2]}})})()},disabled:(null!=(l=w[e.id])?l:e.desiredReplicas)===p.running},o("Scale")),n().createElement(eU,{type:"secondary"},null!=(c=p.running)?c:"?"," / ",null!=(d=w[e.id])?d:e.desiredReplicas," ",o("running")),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return Q(e.id)}})),n().createElement(r.Table,{dataSource:m,columns:X,rowKey:"id",size:"small",pagination:!1,locale:{emptyText:o("No containers")}}))})):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:o("Orchestrator Not Connected"),description:o("Please configure the adapter settings and ensure the container runtime is accessible."),style:{marginBottom:16},action:n().createElement(r.Button,{size:"small",type:"primary",onClick:function(){return D(!0)}},o("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(o("Logs"),": ").concat(C.containerId),open:C.visible,onCancel:function(){return x({visible:!1,containerId:"",logs:[]})},footer:null,width:900},n().createElement("pre",{style:{maxHeight:500,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",padding:12,borderRadius:6,fontSize:11,lineHeight:1.6,fontFamily:"Consolas, Monaco, monospace"}},C.logs.length>0?C.logs.join("\n"):o("No logs available"))),n().createElement(r.Modal,{title:"".concat(o("Package Logs"),": ").concat(I.containerName),open:I.visible,onCancel:function(){return P({visible:!1,containerName:"",logs:""})},footer:null,width:900},n().createElement("pre",{style:{maxHeight:500,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",padding:12,borderRadius:6,fontSize:11,lineHeight:1.6,fontFamily:"Consolas, Monaco, monospace",whiteSpace:"pre-wrap"}},I.logs||o("No logs available"))),n().createElement(r.Modal,{title:F.stack?o("Edit worker stack"):o("New worker stack"),open:F.visible,onCancel:G,onOk:function(){return L.submit()},okText:o("Save"),confirmLoading:u,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:L,layout:"vertical",onFinish:function(e){return eN(function(){var t,n,a,l,c,u,d;return e_(this,function(m){switch(m.label){case 0:s(!0),m.label=1;case 1:if(m.trys.push([1,7,8,9]),n=eq(eB({},e),{envVars:e$(e.envVars,{},"Environment variables"),resourceLimits:e$(e.resourceLimits,{},"Resource limits"),k8sEnv:e$(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:e$(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:e$(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:e$(e.k8sVolumes,[],"Kubernetes volumes"),desiredReplicas:Number(e.desiredReplicas||0),replicas:Number(e.replicas||0)}),!(null==(t=F.stack)?void 0:t.id))return[3,3];return[4,i.request({url:"/orchestratorStacks:update",method:"put",params:{filterByTk:F.stack.id},data:n})];case 2:return m.sent(),r.message.success(o("Worker stack updated")),[3,5];case 3:return[4,i.request({url:"/orchestratorStacks:create",method:"post",data:n})];case 4:m.sent(),r.message.success(o("Worker stack created")),m.label=5;case 5:return G(),[4,H()];case 6:return m.sent(),[3,9];case 7:return a=m.sent(),r.message.error((null==a||null==(d=a.response)||null==(u=d.data)||null==(c=u.errors)||null==(l=c[0])?void 0:l.message)||a.message||o("Failed to save worker stack")),[3,9];case 8:return s(!1),[7];case 9:return[2]}})})()}},n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"name",label:o("Stack name"),rules:[{required:!0,message:o("Stack name is required")},{pattern:/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/,message:o("Use a lowercase Kubernetes-safe name")}]},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"image",label:o("Image"),rules:[{required:!0}]},n().createElement(r.Input,{placeholder:"nocobase/nocobase:2.0.46-full"})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"adapter",label:o("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"kubernetes"},o("Kubernetes")),n().createElement(r.Select.Option,{value:"docker"},o("Docker"))))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"desiredReplicas",label:o("Desired replicas"),rules:[{required:!0}]},n().createElement(r.InputNumber,{min:0,max:20,style:{width:"100%"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"enabled",label:o("Enabled"),valuePropName:"checked"},n().createElement(r.Switch,null)))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"deploymentName",label:o("Deployment name")},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"serviceAccountName",label:o("Service account")},n().createElement(r.Input,{placeholder:"nocobase-orchestrator"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"imagePullPolicy",label:o("Image pull policy")},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"IfNotPresent"},"IfNotPresent"),n().createElement(r.Select.Option,{value:"Always"},"Always"),n().createElement(r.Select.Option,{value:"Never"},"Never"))))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"k8sContainerName",label:o("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"namespace",label:o("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapter!==t.adapter}},function(){return"docker"===L.getFieldValue("adapter")?n().createElement(r.Form.Item,{name:"networkMode",label:o("Docker Network"),extra:o("Main network. Workers also inherit app networks.")},n().createElement(r.Select,{allowClear:!0,placeholder:o("Default (bridge)")},n().createElement(r.Select.Option,{value:"bridge"},"bridge"),n().createElement(r.Select.Option,{value:"host"},"host"),(Array.isArray(U)?U:[]).map(function(e){return n().createElement(r.Select.Option,{key:e.id,value:e.name},e.name)}))):null}))),n().createElement(r.Form.Item,{name:"command",label:o("Command")},n().createElement(r.Input.TextArea,{rows:10})),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"envVars",label:o("Environment variables JSON")},n().createElement(r.Input.TextArea,{rows:8}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"resourceLimits",label:o("Resource limits JSON")},n().createElement(r.Input.TextArea,{rows:8})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnvFrom",label:o("Kubernetes envFrom JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnv",label:o("Kubernetes env JSON")},n().createElement(r.Input.TextArea,{rows:7})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumeMounts",label:o("Kubernetes volumeMounts JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumes",label:o("Kubernetes volumes JSON")},n().createElement(r.Input.TextArea,{rows:7})))))),n().createElement(r.Modal,{title:o("Orchestrator Settings"),open:M,onCancel:function(){return D(!1)},footer:null,width:600},n().createElement(r.Form,{form:q,layout:"vertical",onFinish:function(e){return eN(function(){var t;return e_(this,function(n){switch(n.label){case 0:s(!0),n.label=1;case 1:return n.trys.push([1,5,6,7]),[4,i.request({url:"/workerOrchestrator:saveSettings",method:"POST",data:e})];case 2:return n.sent(),r.message.success(o("Settings saved successfully. Reconnecting...")),D(!1),[4,V()];case 3:return n.sent(),[4,H()];case 4:return n.sent(),[3,7];case 5:return t=n.sent(),r.message.error("Failed to save settings: ".concat(t.message)),[3,7];case 6:return s(!1),[7];case 7:return[2]}})})()},initialValues:{adapterType:"none",k8sNamespace:"nocobase",workerLabelSelector:"role=worker"}},n().createElement(r.Form.Item,{name:"adapterType",label:o("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"none"},o("Disabled")),n().createElement(r.Select.Option,{value:"docker"},o("Docker")),n().createElement(r.Select.Option,{value:"kubernetes"},o("Kubernetes")))),n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapterType!==t.adapterType}},function(){var e=q.getFieldValue("adapterType");return"docker"===e?n().createElement(r.Card,{size:"small",title:o("Docker Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"dockerSocketPath",label:o("Socket Path"),extra:"/var/run/docker.sock"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"dockerHost",label:o("TCP Host"),extra:"e.g. tcp://192.168.1.10:2376 (Overrides socket)"},n().createElement(r.Input,null))):"kubernetes"===e?n().createElement(r.Card,{size:"small",title:o("Kubernetes Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"k8sNamespace",label:o("Namespace"),extra:"nocobase"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"k8sKubeconfig",label:o("Kubeconfig"),extra:"Paste kubeconfig YAML or enter a file path. Leave empty to use in-cluster ServiceAccount."},n().createElement(r.Input.TextArea,{rows:4}))):null}),n().createElement(r.Form.Item,{name:"workerLabelSelector",label:o("Worker Label Selector"),extra:"Only containers with this label will be managed. Example: role=worker"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{style:{marginBottom:0}},n().createElement(r.Button,{type:"primary",htmlType:"submit",icon:n().createElement(a.SaveOutlined,null),loading:u,block:!0},o("Save Settings & Reconnect")))))):n().createElement(r.Spin,{tip:o("Connecting to orchestrator..."),style:{display:"flex",justifyContent:"center",padding:48}})}var eY=["python3","python3-pip","python3-venv"],eX=["python-docx","openpyxl","pandas","matplotlib","Pillow","reportlab","jinja2","pyyaml","tabulate","xlsxwriter"],eZ=["xlsx","docx","pdfkit","csv-parse","archiver","sharp","lodash","dayjs"];function e0(e){return Array.isArray(e)?Array.from(new Set(e.filter(function(e){return"string"==typeof e}).map(function(e){return e.trim()}).filter(Boolean))):[]}function e1(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Array.isArray(e)?e0(e):"string"!=typeof e?e0(t):e0(e.split(/[\n,]/).map(function(e){return e.trim()}).filter(Boolean))}function e2(e){return e0(e).join("\n")}function e3(e){return{apt:e1(e.aptPackages,eY),python:e1(e.pythonPackages,eX),npm:e1(e.npmPackages,eZ)}}function e4(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function e6(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function e5(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){e6(l,r,a,o,i,"next",e)}function i(e){e6(l,r,a,o,i,"throw",e)}o(void 0)})}}function e8(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return e4(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e4(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e7(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var e9=r.Typography.Text,te={pending:{color:"default",text:"Not initialized"},running:{color:"processing",text:"Running..."},succeeded:{color:"success",text:"Succeeded"},failed:{color:"error",text:"Failed"}};function tt(e,t){return e.length?e.map(function(e){return n().createElement(r.Tag,{key:e,color:t,style:{marginBottom:2}},e)}):n().createElement(e9,{type:"secondary"},"-")}var tn=function(){var e,o,i,c,u,s,d=T(),m=(0,l.useApp)().apiClient,p=e8(r.Form.useForm(),1)[0],f=e8((0,t.useState)(!1),2),y=f[0],h=f[1],g=e8((0,t.useState)(!1),2),v=g[0],b=g[1],E=e8((0,t.useState)(!1),2),w=E[0],S=E[1],k=e8((0,t.useState)(null),2),C=k[0],x=k[1],O=e8((0,t.useState)(null),2),I=O[0],P=O[1],A=e8((0,t.useState)("all"),2),j=A[0],R=A[1],z=r.Form.useWatch("aptPackages",p),M=r.Form.useWatch("pythonPackages",p),D=r.Form.useWatch("npmPackages",p),N=(0,t.useRef)(!1),F=(0,t.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e5(function(){var t,n,r,a;return e7(this,function(l){switch(l.label){case 0:if(N.current)return[2];N.current=!0,e||h(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,m.request({url:"workerPackages:getPackageConfig"})];case 2:if(r=(null==(n=l.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data))try{r.packageWhitelist="string"==typeof r.packageWhitelist?JSON.parse(r.packageWhitelist):r.packageWhitelist}catch(e){r.packageWhitelist={python:[],node:[],apt:[]}}return x(r),r&&(p.setFieldsValue({npmRegistryUrl:r.npmRegistryUrl,npmAuthToken:r.npmAuthToken,pypiIndexUrl:r.pypiIndexUrl,pypiTrustedHost:r.pypiTrustedHost,aptMirrorUrl:r.aptMirrorUrl,aptGpgKeyUrl:r.aptGpgKeyUrl,aptPackages:e1(r.aptPackages,eY),pythonPackages:e1(r.pythonPackages,eX),npmPackages:e1(r.npmPackages,eZ),retentionHours:null!=(a=r.retentionHours)?a:24}),"running"===r.initStatus?(S(!0),P({percent:r.initProgressPercent||0,log:r.initProgressLog||d("Processing...")})):(S(!1),P(null))),[3,5];case 3:return l.sent(),[3,5];case 4:return e||h(!1),N.current=!1,[7];case 5:return[2]}})})()},[m,p,d]);(0,t.useEffect)(function(){F()},[F]),(0,t.useEffect)(function(){var e=setInterval(function(){return F(!0)},1e4);return function(){return clearInterval(e)}},[F]);var B=function(e){return e5(function(){var t;return e7(this,function(n){switch(n.label){case 0:var r,a;if(r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),a=a={aptPackages:e2(e.aptPackages),pythonPackages:e2(e.pythonPackages),npmPackages:e2(e.npmPackages)},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(a)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(a,e))}),t=r,!(null==C?void 0:C.id))return[3,2];return[4,m.request({url:"workerPackages:savePackageConfig",method:"post",params:{filterByTk:C.id},data:t})];case 1:return n.sent(),[3,4];case 2:return[4,m.request({url:"workerPackages:savePackageConfig",method:"post",data:t})];case 3:n.sent(),n.label=4;case 4:return[2]}})})()},q=te[null==C?void 0:C.initStatus]||te.pending,L=(null==C?void 0:C.packageWhitelist)||{},_=(null==L||null==(e=L.python)?void 0:e.length)>0||(null==L||null==(o=L.node)?void 0:o.length)>0||(null==L||null==(i=L.apt)?void 0:i.length)>0,U=e3({aptPackages:null!=z?z:eY,pythonPackages:null!=M?M:eX,npmPackages:null!=D?D:eZ});return n().createElement("div",{style:{padding:16,maxWidth:920}},n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.CloudServerOutlined,null),n().createElement("span",null,d("Cluster Package Installer"))),size:"small",style:{marginBottom:16},extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),size:"small",onClick:function(){return F(!1)},loading:y},d("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement("div",null,n().createElement(e9,{strong:!0},d("Status"),": "),n().createElement(r.Tag,{color:q.color},d(q.text)),(null==C?void 0:C.lastInitAt)&&n().createElement(e9,{type:"secondary",style:{fontSize:12}},"(",new Date(C.lastInitAt).toLocaleString(),")")),n().createElement("div",null,n().createElement(e9,{strong:!0,style:{marginRight:8}},d("Target"),": "),n().createElement(r.Select,{value:j,onChange:R,style:{width:240},options:[{label:d("All app and worker nodes"),value:"all"},{label:d("App nodes only"),value:"app"},{label:d("Worker nodes only"),value:"worker"}]})),n().createElement(r.Alert,{type:"info",showIcon:!0,message:d("Each target node checks whether a package/module is already installed before installing it.")}),n().createElement(r.Space,null,n().createElement(r.Button,{type:"primary",icon:w?n().createElement(a.ReloadOutlined,{spin:!0}):n().createElement(a.CloudServerOutlined,null),onClick:function(){return e5(function(){var e,t;return e7(this,function(n){switch(n.label){case 0:S(!0),P({percent:0,log:d("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,B(e=p.getFieldsValue())];case 2:return n.sent(),[4,m.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:j,packages:e3(e||{}),registryConfig:{aptMirrorUrl:e.aptMirrorUrl,npmRegistryUrl:e.npmRegistryUrl,pypiIndexUrl:e.pypiIndexUrl,pypiTrustedHost:e.pypiTrustedHost}}})];case 3:return n.sent(),r.message.info(d("Install task dispatched")),[4,F()];case 4:return n.sent(),[3,6];case 5:return t=n.sent(),r.message.error((null==t?void 0:t.message)||d("Failed to install packages/modules")),S(!1),P(null),[3,6];case 6:return[2]}})})()},size:"large"},w?d("Installing... (Click to Force Run)"):d("Install packages/modules")),w&&n().createElement(r.Button,{danger:!0,onClick:function(){return e5(function(){return e7(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,m.request({url:"workerPackages:resetInitStatus",method:"post"})];case 1:return e.sent(),r.message.success(d("Install status reset to stopped")),[4,F()];case 2:return e.sent(),[3,4];case 3:return e.sent(),r.message.error(d("Failed to stop installation")),[3,4];case 4:return[2]}})})()},size:"large"},d("Stop / Reset Status"))),w&&I&&n().createElement("div",null,n().createElement(r.Progress,{percent:I.percent,status:"active"}),n().createElement(e9,{type:"secondary"},I.log)),(null==C?void 0:C.lastInitLog)&&"running"!==C.initStatus&&n().createElement("div",null,n().createElement(e9,{strong:!0},d("Last Install Log"),":"),n().createElement("pre",{style:{background:"#f5f5f5",padding:8,borderRadius:4,fontSize:11,maxHeight:220,overflow:"auto",whiteSpace:"pre-wrap",marginTop:4}},C.lastInitLog)))),n().createElement(r.Card,{title:d("Package/module settings"),size:"small",style:{marginBottom:16}},n().createElement(r.Form,{form:p,layout:"vertical"},n().createElement(r.Form.Item,{name:"aptPackages",label:d("OS packages (APT)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"python3, python3-pip",tokenSeparators:[",","\n"," "]})),n().createElement(r.Form.Item,{name:"pythonPackages",label:d("Python modules (pip)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"python-docx, openpyxl",tokenSeparators:[",","\n"," "]})),n().createElement(r.Form.Item,{name:"npmPackages",label:d("Node modules (npm global)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"xlsx, docx",tokenSeparators:[",","\n"," "]})),n().createElement(r.Divider,{style:{margin:"8px 0 16px"}}),n().createElement(r.Form.Item,{name:"aptMirrorUrl",label:d("APT mirror URL")},n().createElement(r.Input,{placeholder:"https://deb.debian.org/debian"})),n().createElement(r.Form.Item,{name:"npmRegistryUrl",label:d("NPM registry URL")},n().createElement(r.Input,{placeholder:"https://registry.npmjs.org/"})),n().createElement(r.Form.Item,{name:"pypiIndexUrl",label:d("PyPI index URL")},n().createElement(r.Input,{placeholder:"https://pypi.org/simple"})),n().createElement(r.Button,{type:"primary",onClick:function(){return e5(function(){return e7(this,function(e){switch(e.label){case 0:b(!0),e.label=1;case 1:return e.trys.push([1,4,5,6]),[4,B(p.getFieldsValue())];case 2:return e.sent(),r.message.success(d("Config saved")),[4,F()];case 3:return e.sent(),[3,6];case 4:return e.sent(),r.message.error(d("Failed to save config")),[3,6];case 5:return b(!1),[7];case 6:return[2]}})})()},loading:v},d("Save settings"))),n().createElement(r.Divider,{style:{margin:"16px 0"}}),n().createElement(e9,{strong:!0},d("Install plan"),":"),n().createElement("div",{style:{marginTop:8}},n().createElement(e9,{type:"secondary"},"APT: "),tt(U.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(e9,{type:"secondary"},"Python: "),tt(U.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(e9,{type:"secondary"},"Node: "),tt(U.npm||[],"green"))),n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.SafetyOutlined,null),n().createElement("span",null,d("Installed package/module whitelist"))),size:"small"},_?n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},(null==L||null==(c=L.apt)?void 0:c.length)>0&&n().createElement("div",null,n().createElement(e9,{strong:!0},"APT: "),tt(L.apt)),(null==L||null==(u=L.python)?void 0:u.length)>0&&n().createElement("div",null,n().createElement(e9,{strong:!0},"Python: "),tt(L.python,"blue")),(null==L||null==(s=L.node)?void 0:s.length)>0&&n().createElement("div",null,n().createElement(e9,{strong:!0},"Node: "),tt(L.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:d("No successful install has generated a whitelist yet.")})))};function tr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ta(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tl(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ta(l,r,a,o,i,"next",e)}function i(e){ta(l,r,a,o,i,"throw",e)}o(void 0)})}}function to(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tr(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ti(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function tc(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function tu(){var e=T(),o=(0,l.useApp)().apiClient,i=to((0,t.useState)(!1),2),c=i[0],u=i[1],s=to((0,t.useState)(null),2),d=s[0],m=s[1],p=to((0,t.useState)(""),2),f=p[0],y=p[1],h=to((0,t.useState)([]),2),g=h[0],v=h[1],b=(0,t.useCallback)(function(){return tl(function(){var t,n,a,l,i;return ti(this,function(c){switch(c.label){case 0:u(!0),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,o.request({url:"clusterManagerPlugins:list"})];case 2:return v(Array.isArray(null==(l=c.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)?l.data.data.data:Array.isArray(null==l||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:[]),[3,5];case 3:return i=c.sent(),r.message.error(tc(i,e("Failed to load plugins"))),[3,5];case 4:return u(!1),[7];case 5:return[2]}})})()},[o,e]);(0,t.useEffect)(function(){b()},[b]);var E=(0,t.useMemo)(function(){var e=f.trim().toLowerCase(),t=Array.isArray(g)?g:[];return e?t.filter(function(t){return[t.name,t.packageName,t.displayName,t.description].filter(Boolean).some(function(t){return String(t).toLowerCase().includes(e)})}):t},[g,f]),w=[{title:e("Plugin"),dataIndex:"displayName",key:"displayName",render:function(e,t){return n().createElement(r.Space,{direction:"vertical",size:0},n().createElement(r.Typography.Text,{strong:!0},t.displayName||t.name),n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},t.packageName||t.name))}},{title:e("Name"),dataIndex:"name",key:"name",width:220,render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:e("Status"),key:"status",width:260,render:function(t,a){return n().createElement(r.Space,{wrap:!0,size:[4,4]},n().createElement(r.Tag,{color:a.enabled?"green":"default"},a.enabled?e("Enabled"):e("Disabled")),n().createElement(r.Tag,{color:a.installed?"blue":"default"},a.installed?e("Installed"):e("Not installed")),n().createElement(r.Tag,{color:a.loaded?"processing":"default"},a.loaded?e("Loaded"):e("Not loaded")),a.protected&&n().createElement(r.Tag,{color:"red"},e("Protected")))}},{title:e("Version"),dataIndex:"version",key:"version",width:120,render:function(e){return e||"-"}},{title:e("Description"),dataIndex:"description",key:"description",ellipsis:!0,render:function(e){return e||"-"}},{title:e("Actions"),key:"actions",width:250,render:function(t,l){return n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:e("Force disable this plugin?"),description:e("This updates the plugin registry directly. Restart or reload is required to fully unload runtime hooks."),disabled:l.protected||!l.enabled,onConfirm:function(){return tl(function(){var t,n,a,i,c;return ti(this,function(u){switch(u.label){case 0:m("".concat(l.name,":disable")),u.label=1;case 1:return u.trys.push([1,4,5,6]),[4,o.request({url:"clusterManagerPlugins:forceDisable",method:"post",data:{name:l.name}})];case 2:return i=u.sent(),r.message.success((null==i||null==(n=i.data)||null==(t=n.data)?void 0:t.message)||(null==i||null==(a=i.data)?void 0:a.message)||e("Plugin force disabled")),[4,b()];case 3:return u.sent(),[3,6];case 4:return c=u.sent(),r.message.error(tc(c,e("Failed to force disable plugin"))),[3,6];case 5:return m(null),[7];case 6:return[2]}})})()},okText:e("Force disable"),cancelText:e("Cancel")},n().createElement(r.Button,{size:"small",icon:n().createElement(a.StopOutlined,null),disabled:l.protected||!l.enabled,loading:d==="".concat(l.name,":disable")},e("Force disable"))),n().createElement(r.Popconfirm,{title:e("Force remove this plugin?"),description:e("This removes the plugin registry record. Package files are not deleted. Restart or reload is required."),disabled:l.protected,onConfirm:function(){return tl(function(){var t,n,a,i,c;return ti(this,function(u){switch(u.label){case 0:m("".concat(l.name,":remove")),u.label=1;case 1:return u.trys.push([1,4,5,6]),[4,o.request({url:"clusterManagerPlugins:forceRemove",method:"post",data:{name:l.name}})];case 2:return i=u.sent(),r.message.success((null==i||null==(n=i.data)||null==(t=n.data)?void 0:t.message)||(null==i||null==(a=i.data)?void 0:a.message)||e("Plugin force removed")),[4,b()];case 3:return u.sent(),[3,6];case 4:return c=u.sent(),r.message.error(tc(c,e("Failed to force remove plugin"))),[3,6];case 5:return m(null),[7];case 6:return[2]}})})()},okText:e("Force remove"),cancelText:e("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.DeleteOutlined,null),disabled:l.protected,loading:d==="".concat(l.name,":remove")},e("Force remove"))))}}];return n().createElement(r.Spin,{spinning:c},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:"warning",showIcon:!0,icon:n().createElement(a.ExclamationCircleOutlined,null),message:e("Force operations bypass plugin lifecycle hooks"),description:e("Use this only when the normal plugin manager cannot disable or remove a broken plugin. Restart or reload the app after a successful operation.")}),n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:b},e("Refresh")),n().createElement(r.Input.Search,{allowClear:!0,placeholder:e("Search plugins"),value:f,onChange:function(e){return y(e.target.value)},style:{width:320}})),n().createElement(r.Table,{rowKey:"name",size:"small",dataSource:E,columns:w,pagination:{pageSize:20},scroll:{x:1100}})))}function ts(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function td(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tm(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){td(l,r,a,o,i,"next",e)}function i(e){td(l,r,a,o,i,"throw",e)}o(void 0)})}}function tp(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ts(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ts(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tf(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var ty=r.Typography.Text;function th(e){var t;return(null==e?void 0:e.data)&&"object"==((t=e.data)&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t)&&"data"in e.data?e.data.data:null==e?void 0:e.data}function tg(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function tv(e){var t=Math.max(0,Math.ceil(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?"".concat(n,"m ").concat(r,"s"):"".concat(r,"s")}function tb(){var e,o,i,c,u=T(),s=(0,l.useApp)().apiClient,d=tp((0,t.useState)(!1),2),m=d[0],p=d[1],f=tp((0,t.useState)(!1),2),y=f[0],h=f[1],g=tp((0,t.useState)(!1),2),v=g[0],b=g[1],E=tp((0,t.useState)(12e4),2),w=E[0],S=E[1],k=tp((0,t.useState)(null),2),C=k[0],x=k[1],O=tp((0,t.useState)(null),2),I=O[0],P=O[1],A=tp((0,t.useState)(null),2),j=A[0],R=A[1],z=tp((0,t.useState)(Date.now()),2),M=z[0],D=z[1],N=!!C||(null==I?void 0:I.status)==="running",F=(null==C?void 0:C.runId)||(null==I?void 0:I.runId),B=(null==j?void 0:j.summary)||(null==I?void 0:I.summary),q=(null==C?void 0:C.deadlineAt)||(null==I?void 0:I.deadlineAt),L=q?Math.max(0,Date.parse(q)-M):0,_=(0,t.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return tm(function(){var t,n,a,l,o;return tf(this,function(i){switch(i.label){case 0:e||p(!0),i.label=1;case 1:return i.trys.push([1,6,7,8]),[4,s.request({url:"clusterManagerDoctor:status"})];case 2:if(x((null==(l=th(i.sent()))?void 0:l.activeRun)||null),P((null==l?void 0:l.run)||null),!(null==l||null==(t=l.run)?void 0:t.report))return[3,3];return R(l.run.report),[3,5];case 3:if(!(!(null==l?void 0:l.activeRun)&&(null==l||null==(n=l.run)?void 0:n.hasReport)&&(null==l||null==(a=l.run)?void 0:a.runId)))return[3,5];return[4,s.request({url:"clusterManagerDoctor:report",params:{runId:l.run.runId}})];case 4:R((null==(o=th(i.sent()))?void 0:o.report)||null),i.label=5;case 5:return[3,8];case 6:return i.sent(),r.message.error(u("Failed to load diagnostic status")),[3,8];case 7:return e||p(!1),[7];case 8:return[2]}})})()},[s,u]);(0,t.useEffect)(function(){_()},[_]),(0,t.useEffect)(function(){if(N){var e=setInterval(function(){D(Date.now()),_(!0)},3e3);return function(){return clearInterval(e)}}},[N,_]),(0,t.useEffect)(function(){if(N){var e=setInterval(function(){return D(Date.now())},1e3);return function(){return clearInterval(e)}}},[N]);var U=(null==j||null==(o=j.logAnalysis)?void 0:o.topSignatures)||[],K=(null==j||null==(i=j.logAnalysis)?void 0:i.byNode)||[],W=(0,t.useMemo)(function(){var e;return((null==j||null==(e=j.pluginDiagnostics)?void 0:e.plugins)||[]).filter(function(e){return e.versionDrift||e.loadDrift})},[j]),V=(null==j||null==(c=j.packageDiagnostics)?void 0:c.packageDrifts)||[],H=(null==j?void 0:j.recommendations)||[],Q=[{title:u("Level"),dataIndex:"level",width:90,render:function(e){return n().createElement(r.Tag,{color:"error"===e?"red":"orange"},e)}},{title:u("Count"),dataIndex:"count",width:90},{title:u("Signature"),dataIndex:"signature",render:function(e){return n().createElement(ty,{ellipsis:{tooltip:e}},e)}},{title:u("Nodes"),dataIndex:"nodes",width:220,render:function(e){return(e||[]).slice(0,3).join(", ")}}],J=[{title:u("Node"),dataIndex:"hostname"},{title:u("Role"),dataIndex:"role",width:110},{title:u("Errors"),dataIndex:"levels",width:100,render:function(e){return(null==e?void 0:e.error)||0}},{title:u("Warnings"),dataIndex:"levels",width:110,render:function(e){return(null==e?void 0:e.warn)||0}},{title:u("Log Files"),dataIndex:"files",render:function(e){return(null==e?void 0:e.length)?e.map(function(e){return"".concat(e.file," (").concat(e.lineCount,")")}).join(", "):"-"}}];return n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Card,{size:"small",title:n().createElement(r.Space,null,n().createElement(a.MedicineBoxOutlined,null),u("Doctor")),extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return _(!1)},loading:m,"aria-label":u("Refresh")},u("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement(r.Space,{wrap:!0},n().createElement(r.InputNumber,{min:10,max:120,step:10,value:Math.round(w/1e3),onChange:function(e){return S(1e3*(Number(e)||120))},addonAfter:"s",disabled:N,"aria-label":u("Duration"),style:{width:140}}),n().createElement(r.Button,{type:"primary",icon:n().createElement(a.MedicineBoxOutlined,null),onClick:function(){return tm(function(){var e;return tf(this,function(t){switch(t.label){case 0:h(!0),R(null),t.label=1;case 1:return t.trys.push([1,4,5,6]),[4,s.request({url:"clusterManagerDoctor:start",method:"post",data:{durationMs:w}})];case 2:return x(th(t.sent())),r.message.success(u("Diagnostic session started")),[4,_(!0)];case 3:return t.sent(),[3,6];case 4:return e=t.sent(),r.message.error(tg(e,u("Failed to start diagnostic session"))),[3,6];case 5:return h(!1),[7];case 6:return[2]}})})()},loading:y,disabled:N},u("Start Doctor")),n().createElement(r.Button,{danger:!0,icon:n().createElement(a.StopOutlined,null),onClick:function(){return tm(function(){var e,t;return tf(this,function(n){switch(n.label){case 0:if(!F)return[2];b(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerDoctor:stop",method:"post",data:{runId:F}})];case 2:return e=th(n.sent()),x(null),P(e||null),R((null==e?void 0:e.report)||null),r.message.success(u("Diagnostic report is ready")),[3,5];case 3:return t=n.sent(),r.message.error(tg(t,u("Failed to stop diagnostic session"))),[3,5];case 4:return b(!1),[7];case 5:return[2]}})})()},loading:v,disabled:!N},u("Stop Doctor")),n().createElement(r.Button,{icon:n().createElement(a.DownloadOutlined,null),onClick:function(){return tm(function(){var e,t,n,a;return tf(this,function(l){switch(l.label){case 0:if(!(e=(null==j?void 0:j.runId)||(null==I?void 0:I.runId)))return[2];l.label=1;case 1:return l.trys.push([1,3,,4]),[4,s.request({url:"clusterManagerDoctor:download",params:{runId:e},responseType:"blob"})];case 2:return t=l.sent(),n=window.URL.createObjectURL(new Blob([t.data],{type:"application/json"})),(a=document.createElement("a")).href=n,a.download="doctor-report-".concat(e,".json"),a.click(),a.remove(),window.URL.revokeObjectURL(n),[3,4];case 3:return l.sent(),r.message.error(u("Failed to download diagnostic report")),[3,4];case 4:return[2]}})})()},disabled:!(null==j?void 0:j.runId)&&!(null==I?void 0:I.hasReport),"aria-label":u("Download Report")},u("Download Report"))),N&&n().createElement("div",null,n().createElement(r.Progress,{percent:(null==I?void 0:I.progress)||5,status:"active"}),n().createElement(ty,{type:"secondary"},u("Running")," - ",tv(L))),(null==I?void 0:I.error)&&n().createElement(r.Alert,{type:"error",showIcon:!0,message:I.error}),I&&n().createElement(r.Descriptions,{size:"small",column:3},n().createElement(r.Descriptions.Item,{label:u("Run ID")},I.runId),n().createElement(r.Descriptions.Item,{label:u("Status")},n().createElement(r.Tag,{color:"healthy"===(e=I.status)||"finished"===e?"green":"critical"===e||"failed"===e?"red":"running"===e?"processing":"orange"},u(I.status))),n().createElement(r.Descriptions.Item,{label:u("Started At")},I.startedAt?new Date(I.startedAt).toLocaleString():"-"),n().createElement(r.Descriptions.Item,{label:u("Finished At")},I.finishedAt?new Date(I.finishedAt).toLocaleString():"-"),n().createElement(r.Descriptions.Item,{label:u("Finish Reason")},I.finishReason||"-"),n().createElement(r.Descriptions.Item,{label:u("Duration")},tv((null==j?void 0:j.durationMs)||I.durationMs))))),B&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Report Status"),value:u(B.status),valueStyle:{color:"critical"===B.status?"#cf1322":"warning"===B.status?"#d48806":"#3f8600"}}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Nodes"),value:B.nodes}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Errors"),value:B.errors,valueStyle:{color:B.errors?"#cf1322":void 0}}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Warnings"),value:B.warnings}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Plugin Drift"),value:B.pluginVersionDrifts+B.pluginLoadDrifts}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Package Drift"),value:B.packageDrifts})))),H.length>0&&n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.WarningOutlined,null),u("Findings")),size:"small"},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},H.map(function(e){return n().createElement(r.Alert,{key:e.code,type:"critical"===e.level?"error":"warning",showIcon:!0,message:e.message})}))),j&&n().createElement(n().Fragment,null,n().createElement(r.Card,{title:u("Node Log Distribution"),size:"small"},n().createElement(r.Table,{rowKey:"nodeId",size:"small",pagination:{pageSize:5},dataSource:K,columns:J})),n().createElement(r.Card,{title:u("Top Error Signatures"),size:"small"},n().createElement(r.Table,{rowKey:function(e){return"".concat(e.level,":").concat(e.signature)},size:"small",pagination:{pageSize:5},dataSource:U,columns:Q})),n().createElement(r.Card,{title:u("Plugin Drift"),size:"small"},n().createElement(r.Table,{rowKey:function(e){return e.packageName||e.name},size:"small",pagination:{pageSize:6},dataSource:W,columns:[{title:u("Plugin"),dataIndex:"name"},{title:u("Package"),dataIndex:"packageName"},{title:u("DB Version"),dataIndex:"dbVersion",width:140},{title:u("Runtime Versions"),dataIndex:"runtimeVersions",render:function(e){return(null==e?void 0:e.join(", "))||"-"}},{title:u("Type"),key:"type",width:160,render:function(e,t){return n().createElement(r.Space,{size:4},t.versionDrift&&n().createElement(r.Tag,{color:"orange"},u("Version")),t.loadDrift&&n().createElement(r.Tag,{color:"purple"},u("Loaded")))}}]})),n().createElement(r.Card,{title:u("Package Drift"),size:"small"},n().createElement(r.Table,{rowKey:function(e,t){return e.nodeId||e.hostname||String(t)},size:"small",pagination:{pageSize:6},dataSource:V,columns:[{title:u("Node"),dataIndex:"hostname"},{title:u("Role"),dataIndex:"role",width:110},{title:u("Package Status"),dataIndex:"status",width:140},{title:u("Missing Packages"),dataIndex:"missingPackages",render:function(e){var t,n,r;return((null==e||null==(t=e.apt)?void 0:t.length)||0)+((null==e||null==(n=e.npm)?void 0:n.length)||0)+((null==e||null==(r=e.python)?void 0:r.length)||0)||"-"}}]}))))}function tE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tw(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tS(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tw(l,r,a,o,i,"next",e)}function i(e){tw(l,r,a,o,i,"throw",e)}o(void 0)})}}function tk(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tE(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tC(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var tx=r.Typography.Text;function tO(){var e=T(),o=(0,l.useApp)().apiClient,i=tk((0,t.useState)(!1),2),c=i[0],u=i[1],s=tk((0,t.useState)(!1),2),d=s[0],m=s[1],p=tk((0,t.useState)([]),2),f=p[0],y=p[1],h=tk((0,t.useState)([]),2),g=h[0],v=h[1],b=tk((0,t.useState)([]),2),E=b[0],w=b[1],S=tk((0,t.useState)([]),2),k=S[0],C=S[1],x=(0,t.useCallback)(function(){return tS(function(){var e;return tC(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return C((null==(e=t.sent().data)?void 0:e.data)||[]),[3,3];case 2:return t.sent(),[3,3];case 3:return[2]}})})()},[o]),O=(0,t.useCallback)(function(){return tS(function(){var e;return tC(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"/workerQueueMappings:list",params:{pageSize:200}})];case 1:return v((null==(e=t.sent().data)?void 0:e.data)||[]),[3,3];case 2:return t.sent(),[3,3];case 3:return[2]}})})()},[o]),I=(0,t.useCallback)(function(){return tS(function(){var e,t,n,a;return tC(this,function(l){switch(l.label){case 0:m(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,o.request({url:"/workerQueueMappings:scanQueues"})];case 2:return y((n=(null==(e=(t=l.sent()).data)?void 0:e.data)||t.data).discovered||[]),v(n.registered||[]),w(n.unmapped||[]),[3,5];case 3:return a=l.sent(),r.message.error("Scan failed: ".concat(a.message)),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[o]),P=function(e,t){return tS(function(){var n;return tC(this,function(a){switch(a.label){case 0:u(!0),a.label=1;case 1:return a.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:update",method:"PUT",params:{filterByTk:e},data:t})];case 2:return a.sent(),[4,O()];case 3:return a.sent(),[3,6];case 4:return n=a.sent(),r.message.error("Update failed: ".concat(n.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()};(0,t.useEffect)(function(){I(),x()},[I,x]);var A=k.map(function(e){return{value:e.id,label:e.name}}),j=new Map(g.map(function(e){return[e.queueName,e]})),R=f.map(function(e){var t,n,r,a,l,o=j.get(e.name);return t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({key:e.name},e),n=n={mappingId:null!=(r=null==o?void 0:o.id)?r:null,registered:!!o,stackId:null!=(a=null==o?void 0:o.stackId)?a:null,enabled:null==(l=null==o?void 0:o.enabled)||l},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),z=[{title:e("Queue Name"),dataIndex:"name",render:function(e,t){return n().createElement(r.Space,null,"event-queue"===t.type?n().createElement(a.BranchesOutlined,{style:{color:"#1890ff"}}):n().createElement(a.MinusCircleOutlined,{style:{color:"#52c41a"}}),n().createElement(tx,{code:!0},e))}},{title:e("Label"),dataIndex:"label",render:function(e){return n().createElement(tx,null,e)}},{title:e("Type"),dataIndex:"type",width:110,render:function(e){return n().createElement(r.Tag,{color:"event-queue"===e?"blue":"green"},"event-queue"===e?"EventQueue":"Redis List")}},{title:e("Pending"),dataIndex:"pending",width:80,render:function(e){return null!==e?n().createElement(tx,null,e):n().createElement(tx,{type:"secondary"},"-")}},{title:e("Assigned Stack"),dataIndex:"stackId",width:160,render:function(t,a){return a.registered?n().createElement(r.Select,{style:{width:150},size:"small",allowClear:!0,placeholder:e("All (default)"),value:t,options:A,onChange:function(e){return P(a.mappingId,{stackId:null!=e?e:null})}}):n().createElement(tx,{type:"secondary"},"—")}},{title:e("Enabled"),dataIndex:"enabled",width:80,render:function(e,t){return t.registered?n().createElement(r.Switch,{size:"small",checked:e,onChange:function(e){return P(t.mappingId,{enabled:e})}}):n().createElement(tx,{type:"secondary"},"—")}},{title:e("Actions"),key:"actions",width:200,render:function(t,l){return l.registered?n().createElement(r.Popconfirm,{title:e("Delete this mapping?"),onConfirm:function(){var e;return e=l.mappingId,tS(function(){var t;return tC(this,function(n){switch(n.label){case 0:u(!0),n.label=1;case 1:return n.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:destroy",method:"POST",params:{filterByTk:e}})];case 2:return n.sent(),r.message.success("Mapping deleted"),[4,I()];case 3:return n.sent(),[3,6];case 4:return t=n.sent(),r.message.error("Delete failed: ".concat(t.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()}},n().createElement(r.Button,{size:"small",type:"link",danger:!0},e("Unregister"))):n().createElement(r.Button,{size:"small",type:"link",icon:n().createElement(a.CheckCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return tS(function(){var e;return tC(this,function(t){switch(t.label){case 0:u(!0),t.label=1;case 1:return t.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:create",method:"POST",data:{queueName:l.name,label:l.label,description:l.description,type:l.type,stackId:null,enabled:!0}})];case 2:return t.sent(),r.message.success('Mapping created for "'.concat(l.name,'"')),[4,I()];case 3:return t.sent(),[3,6];case 4:return e=t.sent(),r.message.error("Create failed: ".concat(e.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()}},e("Register"))}}];return n().createElement("div",null,n().createElement(r.Card,{size:"small",style:{marginBottom:16}},n().createElement(r.Row,{justify:"space-between",align:"middle"},n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(tx,{strong:!0},e("Queue Assignment")),n().createElement(tx,{type:"secondary"},e("Map queues to worker stacks. Unassigned queues run on all workers.")))),n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ScanOutlined,null),onClick:I,loading:d},e("Scan Queues")),E.length>0&&n().createElement(r.Button,{onClick:function(){return tS(function(){var e,t,n,a;return tC(this,function(l){switch(l.label){case 0:u(!0),l.label=1;case 1:return l.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:autoMap",method:"POST",data:{}})];case 2:return n=((null==(e=(t=l.sent()).data)?void 0:e.data)||t.data).created,r.message.success("Auto-mapped ".concat(n.length," queue(s)")),[4,I()];case 3:return l.sent(),[3,6];case 4:return a=l.sent(),r.message.error("Auto-map failed: ".concat(a.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()},loading:c},e("Auto-map ({count})",{count:E.length})),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){I(),x()}},e("Refresh")))))),E.length>0&&n().createElement(r.Alert,{type:"info",showIcon:!0,style:{marginBottom:16},message:"".concat(E.length,' queue(s) discovered but not yet registered. Click "Register" on each row or use "Auto-map" to create mappings.')}),n().createElement(r.Table,{dataSource:R,columns:z,rowKey:"key",size:"small",pagination:!1,locale:{emptyText:e('No queues discovered. Click "Scan Queues" to detect registered queues.')}}))}function tI(){var e=T();return n().createElement("div",{style:{padding:24}},n().createElement(r.Tabs,{defaultActiveKey:"cluster",items:[{key:"cluster",label:e("Cluster Nodes"),children:n().createElement(V,null)},{key:"tasks",label:e("Async Tasks"),children:n().createElement(v,null)},{key:"executions",label:e("Workflow Executions"),children:n().createElement(A,null)},{key:"cache",label:e("Cache Monitor"),children:n().createElement(ez,null)},{key:"orchestrator",label:e("Container Orchestrator"),children:n().createElement(eG,null)},{key:"packages",label:e("Packages"),children:n().createElement(tn,null)},{key:"plugins",label:e("Plugins"),children:n().createElement(tu,null)},{key:"doctor",label:e("Doctor"),children:n().createElement(tb,null)},{key:"queues",label:e("Queue Assignment"),children:n().createElement(tO,null)}]}))}function tP(){for(var e=[],t=0;t<sessionStorage.length;t++){var n=sessionStorage.key(t);n&&n.startsWith("nb_cache:")&&e.push(n)}e.forEach(function(e){try{sessionStorage.removeItem(e)}catch(e){}})}function tA(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}var tT=new Map,tj=new WeakSet;function tR(){try{return"u"<typeof sessionStorage?null:sessionStorage}catch(e){return null}}function tz(e){var t,n,r,a=(null==(t=e.app)?void 0:t.getName())||"main",l=(null==(n=e.auth)?void 0:n.role)||"anonymous",o=(null==(r=e.auth)?void 0:r.token)||"anonymous",i="string"==typeof o?o.slice(-8):"anonymous",c="".concat(a,":").concat(i,":").concat(l);return{prefix:"".concat("nb_cache",":").concat(c,":"),versionKey:"".concat("nb_cache_version",":").concat(c)}}function tM(e,t){try{var n=e.getItem(t.versionKey),r=n?Number(n):0;return Number.isFinite(r)?r:0}catch(e){return 0}}function tD(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tN(e,t,n){return(tN=tL()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&tB(a,n.prototype),a}).apply(null,arguments)}function tF(e){return(tF=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function tB(e,t){return(tB=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function tq(e){var t="function"==typeof Map?new Map:void 0;return(tq=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return tN(e,arguments,tF(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),tB(n,e)})(e)}function tL(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(tL=function(){return!!e})()}var t_=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=tF(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,tL()?Reflect.construct(e,t||[],tF(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&tB(n,e),t=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(e){return!function(e){if(null==e?void 0:e.auth){var t,n,r=e.auth.setRole.bind(e.auth);e.auth.setRole=function(e){return tP(),r(e)};var a=e.auth.setToken.bind(e.auth);e.auth.setToken=function(e){return tP(),a(e)},null==(n=e.app)||null==(t=n.eventBus)||t.addEventListener("auth:tokenChanged",function(){tP()})}}(this.app.apiClient),!function(e){if(e&&!tj.has(e)){tj.add(e);var t=e.request.bind(e);e.request=function(n){var r;return(r=function(){var r,a,l,o,i,c,u,s,d,m,p,f,y,h;return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(g){var v,b,E;switch(g.label){case 0:if(a=(r=function(e){if("string"==typeof e)return{url:e,method:"get",params:{}};var t=e.url||"",n=(e.method||"get").toLowerCase(),r=e.params||{};if(e.resource&&e.action){var a=e.resourceOf,l=e.resource.split(".").join(a?"/".concat(encodeURIComponent(String(a)),"/"):"/");l+=":".concat(e.action),t=l,n=["get","list","listMeta","getJsonSchema"].includes(e.action)?"get":"post"}return{url:t,method:n,params:r}}(n)).url,l=r.method,o=r.params,"get"===l)return[3,2];return[4,t(n)];case 1:return("number"!=typeof(b=(v=i=g.sent())&&(void 0===v?"undefined":v&&"u">typeof Symbol&&v.constructor===Symbol?"symbol":typeof v)=="object"&&"status"in v?v.status:void 0)||b>=200&&b<400)&&function(e){var t=tR();if(t)try{var n=tz(e),r=tM(t,n)+1;t.setItem(n.versionKey,String(r)),function(e,t){for(var n=[],r=0;r<e.length;r+=1){var a=e.key(r);(null==a?void 0:a.startsWith(t))&&n.push(a)}var l=!0,o=!1,i=void 0;try{for(var c,u=n[Symbol.iterator]();!(l=(c=u.next()).done);l=!0){var s=c.value;e.removeItem(s)}}catch(e){o=!0,i=e}finally{try{l||null==u.return||u.return()}finally{if(o)throw i}}}(t,n.prefix)}catch(e){}}(e),[2,i];case 2:if(!a||!((E=a).includes("collections:listMeta")||E.includes("uiSchemas:getJsonSchema")))return[2,t(n)];if(c=tR(),u=tz(e),s=c?tM(c,u):0,d=function(e){try{return JSON.stringify(e||{})}catch(e){return"[unserializable]"}}(o),m="".concat(u.prefix,"v").concat(s,":").concat(a,":").concat(d),c)try{if(p=c.getItem(m)){if((f=JSON.parse(p)).expiresAt>Date.now()&&f.scopeVersion===s)return[2,f.response];c.removeItem(m)}}catch(e){}if(y="".concat(u.prefix,"v").concat(s,":").concat(a,":").concat(d),tT.has(y))return[2,tT.get(y)];return h=t(n).then(function(e){if(tT.delete(y),c&&e&&200===e.status&&e.data)try{var t={expiresAt:Date.now()+6e4,scopeVersion:s,response:e};c.setItem(m,JSON.stringify(t))}catch(e){}return e},function(e){throw tT.delete(y),e}),tT.set(y,h),[2,h]}})},function(){var e=this,t=arguments;return new Promise(function(n,a){var l=r.apply(e,t);function o(e){tA(l,n,a,o,i,"next",e)}function i(e){tA(l,n,a,o,i,"throw",e)}o(void 0)})})()}}}(this.app.apiClient),this.app.pluginSettingsManager.add("plugin-cluster-manager",{title:'{{t("Cluster Manager")}}',icon:"DashboardOutlined",Component:tI}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tD(l,r,a,o,i,"next",e)}function i(e){tD(l,r,a,o,i,"throw",e)}o(void 0)})}).call(this)}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(tq(e.Plugin)),tU=t_}(),p}()});
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-cluster-manager",["@nocobase/client-v2","dayjs","react","antd","@nocobase/client","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-cluster-manager"]=t(require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):e["plugin-cluster-manager"]=t(e["@nocobase/client-v2"],e.dayjs,e.react,e.antd,e["@nocobase/client"],e["@ant-design/icons"])}(self,function(e,t,n,r,a,l){return function(){"use strict";var o={375:function(e){e.exports=l},342:function(e){e.exports=a},485:function(t){t.exports=e},59:function(e){e.exports=r},185:function(e){e.exports=t},155:function(e){e.exports=n}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return o[e](n,n.exports,c),n.exports}c.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(t,{a:t}),t},c.d=function(e,t){for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.g.importScripts&&(u=c.g.location+"");var u,s=c.g.document;if(!u&&s&&(s.currentScript&&"SCRIPT"===s.currentScript.tagName.toUpperCase()&&(u=s.currentScript.src),!u)){var d=s.getElementsByTagName("script");if(d.length)for(var m=d.length-1;m>-1&&(!u||!/^http(s?):/.test(u));)u=d[m--].src}if(!u)throw Error("Automatic publicPath is not supported in this browser");c.p=u.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var p={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var n=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");n.indexOf("/static/plugins/plugin-cluster-manager/dist/client/")>=0&&(e=n.replace(/\/[^\/]+$/,"/"))}if(!e){var r=window.__webpack_public_path__||"";r&&("/"!==r.charAt(r.length-1)&&(r+="/"),e=r+"static/plugins/plugin-cluster-manager/dist/client/")}if(!e){var a=window.__nocobase_modern_client_prefix__||"v",l="/"+(a=String(a).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var o=window.location.pathname||"/",i=o.indexOf(l);e=i>=0?o.slice(0,i+1):"/"}e&&(e=e.replace(RegExp("/"+a+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-cluster-manager/dist/client/"}c.p=e}(),!function(){c.r(p),c.d(p,{PluginClusterManagerClient:function(){return nt},default:function(){return nn}});var e=c(342),t=c(155),n=c.n(t),r=c(59),a=c(375),l=c(485),o=c(185),i=c.n(o);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function d(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){s(l,r,a,o,i,"next",e)}function i(e){s(l,r,a,o,i,"throw",e)}o(void 0)})}}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var h={null:{label:"Pending",color:"default"},0:{label:"Running",color:"processing"},1:{label:"Succeeded",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Canceled",color:"warning"}};function v(){var e=(0,l.useApp)().apiClient,o=y((0,t.useState)([]),2),c=o[0],u=o[1],s=y((0,t.useState)(!1),2),p=s[0],v=s[1],b=y((0,t.useState)({current:1,pageSize:20,total:0}),2),E=b[0],w=b[1],S=y((0,t.useState)(void 0),2),k=S[0],C=S[1],x=(0,t.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:E.current,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:E.pageSize;return d(function(){var a,l;return g(this,function(o){switch(o.label){case 0:v(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,e.request({url:"clusterManager:list",params:{page:t,pageSize:n,statusFilter:void 0===k?"":k}})];case 2:return u(Array.isArray(null==(l=o.sent().data)||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:Array.isArray(l)?l:[]),w(function(e){var n,r;return f(m({},e),{current:(null==(n=l.meta)?void 0:n.page)||t,total:(null==(r=l.meta)?void 0:r.count)||0})}),[3,5];case 3:return o.sent(),r.message.error("Failed to load tasks"),[3,5];case 4:return v(!1),[7];case 5:return[2]}})})()},[e,E.current,E.pageSize,k]);(0,t.useEffect)(function(){x()},[k]);var O=function(t){return d(function(){var n,a;return g(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,e.request({url:"clusterManager:purge",method:"post",data:{days:t}})];case 1:return a=l.sent(),r.message.success("Purged ".concat((null==a||null==(n=a.data)?void 0:n.deletedCount)||0," tasks")),x(),[3,3];case 2:return l.sent(),r.message.error("Failed to purge tasks"),[3,3];case 3:return[2]}})})()},I=[{title:"Title",dataIndex:"title",width:200,ellipsis:!0},{title:"Type",dataIndex:"type",width:120},{title:"Status",dataIndex:"status",width:100,render:function(e){var t=h[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Progress",key:"progress",width:150,render:function(e,t){if(0!==t.status||!t.progressTotal)return"-";var a=Math.round(t.progressCurrent/t.progressTotal*100);return n().createElement(r.Progress,{percent:a,size:"small"})}},{title:"User",key:"user",width:120,render:function(e,t){var n;return(null==(n=t.createdBy)?void 0:n.nickname)||"-"}},{title:"Created",dataIndex:"createdAt",width:160,render:function(e){return e?i()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Duration",key:"duration",width:100,render:function(e,t){if(!t.startedAt)return"-";var n=t.doneAt||new Date().toISOString(),r=i()(n).diff(i()(t.startedAt),"second");return r<60?"".concat(r,"s"):"".concat(Math.floor(r/60),"m ").concat(r%60,"s")}},{title:"Actions",key:"actions",width:120,render:function(t,l){return n().createElement(r.Space,null,(0===l.status||null===l.status)&&n().createElement(r.Popconfirm,{title:"Cancel this task?",onConfirm:function(){var t;return t=l.id,d(function(){return g(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManager:cancel",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Task canceled"),x(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})),(-1===l.status||-2===l.status)&&n().createElement(r.Popconfirm,{title:"Retry this task?",onConfirm:function(){var t;return t=l.id,d(function(){return g(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManager:retry",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Task re-queued"),x(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.RedoOutlined,null)})))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Select,{placeholder:"Filter by status",allowClear:!0,style:{width:160},value:k,onChange:C,options:Object.entries(h).map(function(e){var t=y(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return x()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return O(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return O(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return O(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Purge Tasks"))),n().createElement(r.Table,{rowKey:"id",columns:I,dataSource:c,loading:p,size:"small",scroll:{x:"max-content"},pagination:f(m({},E),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return x(e,t)}})}))}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function w(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){E(l,r,a,o,i,"next",e)}function i(e){E(l,r,a,o,i,"throw",e)}o(void 0)})}}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){S(e,t,n[t])})}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var I={null:{label:"Queueing",color:"default"},0:{label:"Started",color:"processing"},1:{label:"Resolved",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Error",color:"error"},"-3":{label:"Aborted",color:"warning"},"-4":{label:"Canceled",color:"warning"},"-5":{label:"Rejected",color:"warning"},"-6":{label:"Retry Needed",color:"orange"}},P={0:{label:"Pending",color:"default"},1:{label:"Resolved",color:"success"},"-1":{label:"Failed",color:"error"},"-2":{label:"Error",color:"error"},"-3":{label:"Aborted",color:"warning"},"-4":{label:"Canceled",color:"warning"}};function A(){var e=(0,l.useApp)().apiClient,o=x((0,t.useState)([]),2),c=o[0],u=o[1],s=x((0,t.useState)(!1),2),d=s[0],m=s[1],p=x((0,t.useState)({current:1,pageSize:20,total:0}),2),f=p[0],y=p[1],g=x((0,t.useState)(void 0),2),h=g[0],v=g[1],b=x((0,t.useState)({}),2),E=b[0],A=b[1],T=x((0,t.useState)({}),2),R=T[0],j=T[1],z=(0,t.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f.current,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.pageSize;return w(function(){var a,l;return O(this,function(o){switch(o.label){case 0:m(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,e.request({url:"clusterManagerWorkflow:list",params:{page:t,pageSize:n,statusFilter:void 0===h?"":h}})];case 2:return u(Array.isArray(null==(l=o.sent().data)||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:Array.isArray(l)?l:[]),y(function(e){var n,r;return C(k({},e),{current:(null==(n=l.meta)?void 0:n.page)||t,total:(null==(r=l.meta)?void 0:r.count)||0})}),[3,5];case 3:return o.sent(),r.message.error("Failed to load executions"),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[e,f.current,f.pageSize,h]);(0,t.useEffect)(function(){z()},[h]);var M=function(t){return w(function(){var n,a;return O(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,e.request({url:"clusterManagerWorkflow:purge",method:"post",data:{days:t}})];case 1:return a=l.sent(),r.message.success("Purged ".concat((null==a||null==(n=a.data)?void 0:n.deletedCount)||0," executions")),z(),[3,3];case 2:return l.sent(),r.message.error("Failed to purge executions"),[3,3];case 3:return[2]}})})()},D=[{title:"Job ID",dataIndex:"id",width:100},{title:"Node",key:"node",width:200,render:function(e,t){var n;return(null==(n=t.node)?void 0:n.title)||t.nodeKey||"-"}},{title:"Status",dataIndex:"status",width:100,render:function(e){var t=P[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Result",dataIndex:"result",ellipsis:!0,render:function(e){return e?JSON.stringify(e).slice(0,120):"-"}}],N=[{title:"ID",dataIndex:"id",width:100},{title:"Workflow",key:"workflow",width:200,render:function(e,t){var n;return(null==(n=t.workflow)?void 0:n.title)||"-"}},{title:"Status",dataIndex:"status",width:120,render:function(e){var t=I[String(e)]||{label:String(e),color:"default"};return n().createElement(r.Tag,{color:t.color},t.label)}},{title:"Executing Node",dataIndex:"workerNode",width:150,render:function(e){return e&&"-"!==e?n().createElement(r.Tag,{color:"blue"},e):n().createElement(r.Tag,null,e||"-")}},{title:"Manual",dataIndex:"manually",width:80,render:function(e){return e?n().createElement(r.Tag,{color:"blue"},"Yes"):"-"}},{title:"Triggered At",dataIndex:"createdAt",width:160,render:function(e){return e?i()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Actions",key:"actions",width:120,render:function(t,l){return n().createElement(r.Space,null,n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.UnorderedListOutlined,null),onClick:function(){var t;return t=l.id,w(function(){var n,a,l,o,i;return O(this,function(c){switch(c.label){case 0:if(E[t])return[2];j(function(e){return C(k({},e),S({},t,!0))}),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,e.request({url:"clusterManagerWorkflow:getJobs",params:{filterByTk:t}})];case 2:return i=Array.isArray(null==(o=c.sent())||null==(a=o.data)||null==(n=a.data)?void 0:n.data)?o.data.data.data:Array.isArray(null==o||null==(l=o.data)?void 0:l.data)?o.data.data:Array.isArray(null==o?void 0:o.data)?o.data:[],A(function(e){return C(k({},e),S({},t,i))}),[3,5];case 3:return c.sent(),r.message.error("Failed to load jobs"),[3,5];case 4:return j(function(e){return C(k({},e),S({},t,!1))}),[7];case 5:return[2]}})})()},loading:R[l.id]},"Jobs"),(0===l.status||null===l.status)&&n().createElement(r.Popconfirm,{title:"Cancel execution?",onConfirm:function(){var t;return t=l.id,w(function(){return O(this,function(n){switch(n.label){case 0:return[4,e.request({url:"clusterManagerWorkflow:cancel",params:{filterByTk:t}})];case 1:return n.sent(),r.message.success("Execution canceled"),z(),[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Select,{placeholder:"Filter by status",allowClear:!0,style:{width:160},value:h,onChange:v,options:Object.entries(I).map(function(e){var t=x(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return z()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return M(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return M(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return M(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Clear History"))),n().createElement(r.Table,{rowKey:"id",columns:N,dataSource:c,loading:d,size:"small",scroll:{x:"max-content"},expandable:{expandedRowRender:function(e){var t=E[e.id];return t?n().createElement(r.Table,{rowKey:"id",columns:D,dataSource:t,size:"small",pagination:!1}):n().createElement("div",{style:{padding:8}},'Click "Jobs" to load')}},pagination:C(k({},f),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return z(e,t)}})}))}function T(){var e=(0,l.useApp)();return(0,t.useCallback)(function(t){return e.i18n.t(t,{ns:"cluster-manager"})},[e.i18n])}function R(e){if(0===e)return"0 B";var t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(1))+" "+["B","KB","MB","GB"][t]}function j(e){var t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),a=[];return t>0&&a.push("".concat(t,"d")),n>0&&a.push("".concat(n,"h")),a.push("".concat(r,"m")),a.join(" ")}var z=[{name:"workflow:process",label:"Workflow",description:"Process workflow executions",kind:"event-queue",aliases:["workflow.pendingExecution","@nocobase/plugin-workflow.pendingExecution"],common:!0},{name:"async-task:process",label:"Async Tasks",description:"Execute async tasks",kind:"event-queue",aliases:["async-task-manager.task","@nocobase/plugin-async-task-manager.task"],common:!0},{name:"notification:send",label:"Notifications",description:"Send notification messages",kind:"event-queue",aliases:["notification-manager.send","@nocobase/plugin-notification-manager.send"],common:!0},{name:"knowledge-base:document-vectorize",label:"Document Vectorization",description:"Vectorize knowledge base documents",kind:"event-queue",aliases:["knowledge-base:document-vectorize"],pluginName:"plugin-knowledge-base",common:!0},{name:"git-review:process",label:"Git Review",description:"AI code review jobs",kind:"redis-list",aliases:["plugin-git-manager.review"],redisKeySuffixes:[":plugin-git-manager:review:queue"],pluginName:"plugin-git-manager",common:!0},{name:"build-guide:process",label:"Build Guide",description:"Build user guide pages",kind:"redis-list",aliases:["plugin-build-guide-block.build"],redisKeySuffixes:[":plugin-build-guide-block:build:queue"],pluginName:"plugin-build-guide-block",common:!0},{name:"build-visualization:process",label:"Build Visualization",description:"Build visualization blocks",kind:"redis-list",aliases:["plugin-build-visualization-block.build"],redisKeySuffixes:[":plugin-build-visualization-block:build:queue"],pluginName:"plugin-build-visualization-block",common:!0},{name:"build-ui-template:process",label:"Build UI Template",description:"Build UI template pages",kind:"event-queue",aliases:["plugin-build-ui-template.build"],pluginName:"plugin-build-ui-template",common:!0},{name:"file-preview-auth:ocr",label:"File Preview OCR",description:"Run OCR extraction for authenticated file previews",kind:"redis-list",aliases:["file-preview-auth.ocr.queue"],redisKeySuffixes:["file-preview-auth.ocr.queue"],pluginName:"plugin-file-preview-auth",common:!0},{name:"skill-hub:sandbox",label:"Skill Sandbox",description:"Execute Skill Hub sandbox tasks",kind:"pubsub",aliases:["skill-hub.task"],pluginName:"plugin-agent-orchestrator",sandbox:!0}];z.map(function(e){return[e.name,e]});var M=new Map,D=!0,N=!1,F=void 0;try{for(var B,q=z[Symbol.iterator]();!(D=(B=q.next()).done);D=!0){var L=B.value;M.set(L.name,L.name);var _=!0,U=!1,K=void 0;try{for(var W,V=(L.aliases||[])[Symbol.iterator]();!(_=(W=V.next()).done);_=!0){var H=W.value;M.set(H,L.name)}}catch(e){U=!0,K=e}finally{try{_||null==V.return||V.return()}finally{if(U)throw K}}}}catch(e){N=!0,F=e}finally{try{D||null==q.return||q.return()}finally{if(N)throw F}}function Q(e){var t=String(e||"").trim();if(!t||"*"===t||"!"===t||"-"===t)return t;var n=M.get(t);if(n)return n;var r=!0,a=!1,l=void 0;try{for(var o,i,c,u,s=(o=[t],(i=t.indexOf("."))>0&&o.push(t.slice(i+1)),(c=t.indexOf(":"))>0&&o.push(t.slice(c+1)),Array.from(new Set(o)))[Symbol.iterator]();!(r=(u=s.next()).done);r=!0){var d=u.value,m=M.get(d);if(m)return m}}catch(e){a=!0,l=e}finally{try{r||null==s.return||s.return()}finally{if(a)throw l}}var p=!0,f=!1,y=void 0;try{for(var g,h=z[Symbol.iterator]();!(p=(g=h.next()).done);p=!0){var v=g.value;if((v.redisKeySuffixes||[]).some(function(e){return t.endsWith(e)}))return v.name}}catch(e){f=!0,y=e}finally{try{p||null==h.return||h.return()}finally{if(f)throw y}}return t}function G(e){var t=(Array.isArray(e)?e:String(e||"").split(",")).map(function(e){return String(e).trim()}).filter(Boolean).map(Q);if(t.includes("*"))return"*";var n=Array.from(new Set(t.filter(Boolean)));return n.length?n.join(","):void 0}function J(e){var t=G(e);return!!t&&"main"!==t&&"app"!==t&&"-"!==t&&!t.split(",").includes("!")}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Y(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function X(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){Y(l,r,a,o,i,"next",e)}function i(e){Y(l,r,a,o,i,"throw",e)}o(void 0)})}}function Z(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function et(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||er(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function en(e){return function(e){if(Array.isArray(e))return $(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||er(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function er(e,t){if(e){if("string"==typeof e)return $(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $(e,t)}}function ea(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function el(e){var o=e.open,i=e.node,c=e.onClose,u=T(),s=(0,l.useApp)().apiClient,d=et((0,t.useState)([]),2),m=d[0],p=d[1],f=et((0,t.useState)(null),2),y=f[0],g=f[1],h=et((0,t.useState)(!1),2),v=h[0],b=h[1],E=et((0,t.useState)(!0),2),w=E[0],S=E[1],k=et((0,t.useState)(""),2),C=k[0],x=k[1],O=(0,t.useRef)(null),I=(0,t.useCallback)(function(){return X(function(){var e,t,n;return ea(this,function(a){switch(a.label){case 0:if(!o)return[2];b(!0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerCluster:logs",params:{lines:200,targetNodeId:null==i?void 0:i.id}})];case 2:return(n=null==(t=a.sent())||null==(e=t.data)?void 0:e.data)&&(n._error&&r.message.warning(n._error),p(n.lines||[]),g(n.node)),[3,5];case 3:return a.sent(),r.message.error("Failed to load logs"),[3,5];case 4:return b(!1),[7];case 5:return[2]}})})()},[s,o,i]);(0,t.useEffect)(function(){o&&(p([]),x(""),S(!0),I())},[o,I]),(0,t.useEffect)(function(){if(o&&w){var e=setInterval(I,5e3);return function(){return clearInterval(e)}}},[o,w,I]),(0,t.useEffect)(function(){O.current&&!C&&O.current.scrollIntoView({behavior:"smooth"})},[m,C]);var P=C?m.filter(function(e){return e.toLowerCase().includes(C.toLowerCase())}):m;return n().createElement(r.Modal,{title:n().createElement(r.Space,null,n().createElement(a.FileTextOutlined,null),u("Instance Logs")," — ",(null==i?void 0:i.name)||"",y&&n().createElement(r.Tag,null,y.hostname,":",y.pid," (",y.workerMode,")")),open:o,onCancel:c,footer:null,width:"80vw",styles:{body:{height:"70vh",display:"flex",flexDirection:"column",padding:"12px 24px"}},destroyOnClose:!0},n().createElement(r.Space,{style:{marginBottom:8,flexShrink:0}},n().createElement(r.Input,{placeholder:u("Search logs..."),prefix:n().createElement(a.SearchOutlined,null),value:C,onChange:function(e){return x(e.target.value)},allowClear:!0,style:{width:300}}),n().createElement(r.Switch,{checked:w,onChange:S,checkedChildren:u("Auto 5s"),unCheckedChildren:u("Paused")}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:I,loading:v,size:"small"},u("Refresh")),n().createElement("span",{style:{fontSize:12,color:"#888"}},P.length," / ",m.length," ",u("lines"))),n().createElement("div",{style:{flex:1,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",fontFamily:'Consolas, Monaco, "Courier New", monospace',fontSize:12,lineHeight:1.5,padding:12,borderRadius:6,whiteSpace:"pre-wrap",wordBreak:"break-all"}},0===P.length&&!v&&n().createElement("div",{style:{color:"#888",textAlign:"center",paddingTop:40}},u(0===m.length?"No logs available":"No matching logs")),P.map(function(e,t){var r="#d4d4d4";return/\berror\b/i.test(e)?r="#f5222d":/\bwarn(ing)?\b/i.test(e)?r="#faad14":/\bdebug\b/i.test(e)&&(r="#8c8c8c"),n().createElement("div",{key:t,style:{padding:"1px 0",color:r}},e)}),n().createElement("div",{ref:O})))}var eo={ok:"green",connected:"green",online:"green",warning:"orange",disconnected:"red",offline:"red",error:"red",not_configured:"default"};function ei(e){return(null==e?void 0:e.length)?n().createElement(r.Space,{wrap:!0,size:[4,2]},e.map(function(e){return n().createElement(r.Tag,{key:e},e)})):n().createElement(r.Typography.Text,{type:"secondary"},"-")}function ec(){var e,o,i=T(),c=(0,l.useApp)().apiClient,u=et((0,t.useState)(!1),2),s=u[0],d=u[1],m=et((0,t.useState)(null),2),p=m[0],f=m[1],y=et((0,t.useState)([]),2),g=y[0],h=y[1],v=et((0,t.useState)(null),2),b=v[0],E=v[1],w=et((0,t.useState)(null),2),S=w[0],k=w[1],C=et((0,t.useState)(null),2),x=C[0],O=C[1],I=et((0,t.useState)(null),2),P=I[0],A=I[1],z=et((0,t.useState)(null),2),M=z[0],D=z[1],N=et((0,t.useState)(null),2),F=N[0],B=N[1],q=et((0,t.useState)("worker"),2),L=q[0],_=q[1],U=et((0,t.useState)("soft"),2),K=U[0],W=U[1],V=et((0,t.useState)(5e3),2),H=V[0],Q=V[1],G=et((0,t.useState)(!1),2),$=G[0],Y=G[1],er=(0,t.useCallback)(function(){return X(function(){var e,t,n,r,a,l,o,i,u,s,m;return ea(this,function(p){switch(p.label){case 0:d(!0),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,Promise.all([c.request({url:"clusterManagerCluster:current"}),c.request({url:"clusterManagerCluster:list"}),c.request({url:"clusterManagerCluster:health"}),c.request({url:"clusterManagerCluster:drift"}),c.request({url:"clusterManagerCluster:legacyDiagnostics"})])];case 2:var y,g;return l=(a=et.apply(void 0,[p.sent(),5]))[0],o=a[1],i=a[2],u=a[3],s=a[4],m=Array.isArray(g=null==(y=null==o?void 0:o.data)?void 0:y.data)?{rows:g,meta:(null==y?void 0:y.meta)||{}}:Array.isArray(null==g?void 0:g.data)?{rows:g.data,meta:g.meta||{}}:Array.isArray(null==y?void 0:y.rows)?{rows:y.rows,meta:(null==y?void 0:y.meta)||{}}:{rows:[],meta:{}},f(null==l||null==(e=l.data)?void 0:e.data),h(m.rows),E(m.meta),k(null==i||null==(t=i.data)?void 0:t.data),O(null==u||null==(n=u.data)?void 0:n.data),A(null==s||null==(r=s.data)?void 0:r.data),[3,5];case 3:return p.sent(),[3,5];case 4:return d(!1),[7];case 5:return[2]}})})()},[c]),ec=function(e,t){return X(function(){return ea(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerCluster:restart",method:"POST",data:{hostname:e,mode:t}})];case 1:return n.sent(),r.message.success("[".concat(t,"] Restart signal sent to ").concat("*"===e?"all nodes":e)),setTimeout(er,3e3),[3,3];case 2:return n.sent(),r.message.error("Failed to send restart signal to ".concat(e)),[3,3];case 3:return[2]}})})()};(0,t.useEffect)(function(){er()},[er]),(0,t.useEffect)(function(){if(M){var e=setInterval(er,1e3*M);return function(){return clearInterval(e)}}},[M,er]);var eu=g.filter(function(e){return"online"===e.status}).length,es=[{title:i("Name"),dataIndex:"name",key:"name",width:200},{title:i("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:eo[e]||"default",icon:"online"===e?n().createElement(a.CheckCircleOutlined,null):"warning"===e?n().createElement(a.WarningOutlined,null):n().createElement(a.CloseCircleOutlined,null)},e.toUpperCase())}},{title:i("Type"),dataIndex:"workerMode",key:"workerMode",width:150,render:function(e,t){var a=(null==t?void 0:t.appRole)==="app"||(null==t?void 0:t.appRole)==="worker"||(null==t?void 0:t.appRole)==="sandbox"?t.appRole:(null==t?void 0:t.isSandbox)?"sandbox":J(null==t?void 0:t.workerMode)?"worker":"app";return"sandbox"===a?n().createElement(r.Tag,{color:"purple"},"SANDBOX"):"app"===a&&J(e)?n().createElement(r.Space,{size:4},n().createElement(r.Tag,{color:"green"},"APP"),n().createElement(r.Tag,{color:"blue"},"QUEUES")):n().createElement(r.Tag,{color:"worker"===a?"blue":"green"},"worker"===a?"WORKER":"APP")}},{title:i("PID"),dataIndex:"pid",key:"pid",width:80},{title:i("Version"),dataIndex:"appVersion",key:"appVersion",width:120},{title:i("Last Heartbeat"),dataIndex:"lastHeartbeatAt",key:"lastHeartbeatAt",width:200},{title:"Action",key:"action",width:100,render:function(e,t){return n().createElement(r.Space,{size:"small"},n().createElement(r.Button,{type:"link",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){return B(t)},disabled:"offline"===t.status},i("Logs")))}}],ed=(null==S?void 0:S.checks)||{},em=(null==x?void 0:x.summary)||{},ep=(null==x?void 0:x.packageDrifts)||[],ef=(null==x?void 0:x.versionDrifts)||[],ey=(null==x?void 0:x.runtimeDrifts)||[],eg=(null==P?void 0:P.findings)||[],eh=(null==b?void 0:b.registry)||{},ev=!!((null==b?void 0:b.fallback)||eh.lastHeartbeatError||eh.lastReadError),eb=function(e){var t=e.messageKey?i(e.messageKey):e.message;return e.messageArgs?Object.entries(e.messageArgs).reduce(function(e,t){var n=et(t,2),r=n[0],a=n[1];return e.replace("{".concat(r,"}"),String(a))},t):t};return n().createElement(r.Spin,{spinning:s},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:er},i("Refresh")),n().createElement(r.Select,{placeholder:i("Auto Refresh"),allowClear:!0,value:M,onChange:D,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:"Soft Restart ALL Nodes?",description:"Sends a soft reload signal to all active Nodes simultaneously.",onConfirm:function(){return ec("*","soft")}},n().createElement(r.Button,{style:{color:"#faad14",borderColor:"#ffe58f"},icon:n().createElement(a.ReloadOutlined,null)},i("Soft Restart Cluster"))),n().createElement(r.Popconfirm,{title:"Hard Restart ALL Nodes?",description:"Sends a lethal signal. Docker will reboot ALL container infrastructure.",onConfirm:function(){return ec("*","hard")}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.ReloadOutlined,null)},i("Hard Restart Cluster"))))),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Nodes Online"),value:eu,suffix:"/ ".concat(g.length),prefix:n().createElement(a.ClusterOutlined,null),valueStyle:{color:eu===g.length?"#3f8600":"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Worker Nodes"),value:g.filter(function(e){return(null==e?void 0:e.appRole)==="worker"||J(null==e?void 0:e.workerMode)}).length,prefix:n().createElement(a.ClusterOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Process Uptime"),value:p?j(p.node.uptime):"-"}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Memory (Heap)"),value:p?R(p.memory.heapUsed):"-",suffix:p?"/ ".concat(R(p.memory.heapTotal)):""})))),n().createElement(r.Card,{title:i("Rolling Restart"),size:"small"},n().createElement(r.Space,{wrap:!0},n().createElement(r.Select,{value:L,onChange:_,style:{width:180},options:[{value:"worker",label:i("Worker nodes only")},{value:"app",label:i("App nodes only")},{value:"sandbox",label:i("Sandbox nodes only")},{value:"all",label:i("All nodes")}]}),n().createElement(r.Select,{value:K,onChange:W,style:{width:150},options:[{value:"soft",label:i("Soft restart")},{value:"hard",label:i("Hard restart")}]}),n().createElement(r.InputNumber,{min:1e3,max:6e4,step:1e3,value:H,onChange:function(e){return Q(Number(e)||5e3)},addonAfter:"ms",style:{width:150}}),n().createElement(r.Popconfirm,{title:i("Start rolling restart?"),description:i("Nodes will receive restart commands one-by-one with the configured delay."),onConfirm:function(){return X(function(){var e,t,n,a,l,o,u,s,d,m;return ea(this,function(p){switch(p.label){case 0:Y(!0),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,c.request({url:"clusterManagerCluster:rollingRestart",method:"POST",data:{role:L,mode:K,delayMs:H}})];case 2:return l=(null==(a=p.sent())||null==(n=a.data)||null==(t=n.data)||null==(e=t.published)?void 0:e.length)||0,r.message.success(i("Rolling restart dispatched for {count} node(s)").replace("{count}",String(l))),setTimeout(er,3e3),[3,5];case 3:return o=p.sent(),r.message.error((null==o||null==(m=o.response)||null==(d=m.data)||null==(s=d.errors)||null==(u=s[0])?void 0:u.message)||i("Failed to dispatch rolling restart")),[3,5];case 4:return Y(!1),[7];case 5:return[2]}})})()},okText:i("Start"),cancelText:i("Cancel")},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),loading:$},i("Rolling Restart"))))),n().createElement(r.Card,{title:i("Health Checks"),size:"small"},S&&!S.healthy&&n().createElement(r.Alert,{type:"warning",message:i("Some subsystems are unhealthy"),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Row,{gutter:[16,8]},Object.entries(ed).map(function(e){var t=et(e,2),a=t[0],l=t[1];return n().createElement(r.Col,{span:4,key:a},n().createElement(r.Card,{size:"small",style:{textAlign:"center"}},n().createElement(r.Tag,{color:eo[l.status]||"default"},l.status),n().createElement("div",{style:{marginTop:4,fontWeight:500}},a),void 0!==l.latency&&n().createElement("div",{style:{fontSize:11,color:"#888"}},l.latency,"ms"),l.detail&&n().createElement("div",{style:{fontSize:11,color:"#888"}},l.detail)))}))),n().createElement(r.Card,{title:i("Cluster Drift"),size:"small",extra:(null==x?void 0:x.checkedAt)?n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},new Date(x.checkedAt).toLocaleString()):null},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:(null==x?void 0:x.healthy)?"success":"warning",showIcon:!0,message:(null==x?void 0:x.healthy)?i("No cluster drift detected"):i("Cluster drift detected"),description:(null==x?void 0:x.referenceVersion)?"".concat(i("Reference version"),": ").concat(x.referenceVersion):i("No reference version available")}),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Checked Nodes"),value:em.nodes||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Version Drift"),value:em.versionDrifts||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Runtime Drift"),value:em.runtimeDrifts||0})),n().createElement(r.Col,{span:6},n().createElement(r.Statistic,{title:i("Package Drift"),value:em.packageDrifts||0}))),(ef.length>0||ey.length>0)&&n().createElement(r.Table,{size:"small",rowKey:function(e){var t;return"".concat(e.id||e.name,":").concat(e.actualVersion||(null==(t=e.actual)?void 0:t.nodeVersion))},pagination:!1,dataSource:en(ef.map(function(e){return ee(Z({},e),{driftType:i("Version")})})).concat(en(ey.map(function(e){var t,n;return ee(Z({},e),{driftType:i("Runtime"),expectedVersion:null==(t=e.expected)?void 0:t.nodeVersion,actualVersion:null==(n=e.actual)?void 0:n.nodeVersion})}))),columns:[{title:i("Type"),dataIndex:"driftType",width:120},{title:i("Name"),dataIndex:"name"},{title:i("Role"),dataIndex:"role",width:120},{title:i("Expected"),dataIndex:"expectedVersion"},{title:i("Actual"),dataIndex:"actualVersion"}]}),ep.length>0&&n().createElement(r.Table,{size:"small",rowKey:function(e){return e.id||e.name},pagination:{pageSize:5},dataSource:ep,columns:[{title:i("Name"),dataIndex:"name"},{title:i("Role"),dataIndex:"role",width:110},{title:i("Package Status"),dataIndex:"status",width:130,render:function(e){return n().createElement(r.Tag,{color:"succeeded"===e?"green":"orange"},e)}},{title:i("Missing Packages"),dataIndex:"missingPackages",render:function(e){var t,a,l;return 0===((null==e||null==(t=e.apt)?void 0:t.length)||0)+((null==e||null==(a=e.npm)?void 0:a.length)||0)+((null==e||null==(l=e.python)?void 0:l.length)||0)?n().createElement(r.Typography.Text,{type:"secondary"},i("No missing packages")):n().createElement(r.Space,{direction:"vertical",size:2},n().createElement("div",null,"APT: ",ei(null==e?void 0:e.apt)),n().createElement("div",null,"NPM: ",ei(null==e?void 0:e.npm)),n().createElement("div",null,"Python: ",ei(null==e?void 0:e.python)))}}]}))),n().createElement(r.Card,{title:i("Legacy Multi-app Diagnostics"),size:"small"},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement(r.Alert,{type:(null==P?void 0:P.healthy)?"success":"warning",showIcon:!0,message:(null==P?void 0:P.healthy)?i("No legacy multi-app risk detected"):i("Legacy multi-app risk detected")}),eg.map(function(e){return n().createElement(r.Alert,{key:e.code,type:"warning"===e.level?"warning":"info",showIcon:!0,message:eb(e)})}),n().createElement(r.Space,{wrap:!0},((null==P?void 0:P.plugins)||[]).map(function(e){return n().createElement(r.Tag,{key:e.name,color:e.enabled||e.loaded?"orange":"default"},e.name,": ",e.enabled?i("Enabled"):i("Disabled"))}),n().createElement(r.Tag,{color:(null==P||null==(e=P.appSupervisor)?void 0:e.enabled)?"green":"default"},"app-supervisor: ",(null==P||null==(o=P.appSupervisor)?void 0:o.enabled)?i("Enabled"):i("Disabled")),n().createElement(r.Tag,null,i("Legacy app records"),": ",(null==P?void 0:P.legacyApplicationCount)||0)))),n().createElement(r.Card,{title:i("Cluster Nodes"),size:"small"},ev&&n().createElement(r.Alert,{type:eh.configured?"warning":"info",showIcon:!0,style:{marginBottom:12},message:eh.configured?i("Cluster registry has no worker heartbeats"):i("Cluster registry Redis is not configured"),description:eh.configured?i("Cluster Nodes reads Redis heartbeats, not the container runtime. Check worker boot, plugin-cluster-manager, and shared Redis configuration."):i("Set REDIS_URL or CLUSTER_MANAGER_REDIS_URL on every app and worker to enable cluster node discovery.")}),n().createElement(r.Table,{dataSource:g,columns:es,rowKey:"id",size:"small",pagination:!1,scroll:{x:"max-content"}})),p&&n().createElement(r.Card,{title:n().createElement(r.Space,null,i("Current Node Details"),n().createElement(r.Tag,{color:"green"},"APP")),size:"small"},p._fallback&&n().createElement(r.Alert,{type:"warning",message:i("APP node not found in cluster registry. Showing data from the responding worker node."),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Descriptions,{size:"small",column:3},n().createElement(r.Descriptions.Item,{label:i("Hostname")},p.node.hostname),n().createElement(r.Descriptions.Item,{label:"PID"},p.node.pid),n().createElement(r.Descriptions.Item,{label:"Node.js"},p.node.nodeVersion),n().createElement(r.Descriptions.Item,{label:i("Worker Mode")},p.node.workerMode||"(default)"),n().createElement(r.Descriptions.Item,{label:i("App Port")},p.node.appPort),n().createElement(r.Descriptions.Item,{label:i("Cluster Mode")},p.node.clusterMode||"(disabled)"),n().createElement(r.Descriptions.Item,{label:i("RSS Memory")},R(p.memory.rss)),n().createElement(r.Descriptions.Item,{label:i("OS Memory")},R(p.os.freeMemory)," free / ",R(p.os.totalMemory)),n().createElement(r.Descriptions.Item,{label:i("CPU Cores")},p.os.cpuCount))),n().createElement(el,{open:!!F,node:F,onClose:function(){return B(null)}})))}function eu(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function es(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ed(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){es(l,r,a,o,i,"next",e)}function i(e){es(l,r,a,o,i,"throw",e)}o(void 0)})}}function em(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||ep(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ep(e,t){if(e){if("string"==typeof e)return eu(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eu(e,t)}}function ef(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var ey=r.Typography.Text;function eg(){var e,o=(0,l.useApp)().apiClient,i=T(),c=em((0,t.useState)(null),2),u=c[0],s=c[1],d=em((0,t.useState)([]),2),m=d[0],p=d[1],f=em((0,t.useState)(!1),2),y=f[0],g=f[1],h=em((0,t.useState)(null),2),v=h[0],b=h[1],E=(0,t.useCallback)(function(){return ed(function(){var e,t,n,a,l,i,c;return ef(this,function(u){switch(u.label){case 0:g(!0),u.label=1;case 1:return u.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerAclCache:stats"}),o.request({url:"clusterManagerAclCache:listKeys"})])];case 2:return i=(l=em.apply(void 0,[u.sent(),2]))[0],c=l[1],s((null==i||null==(e=i.data)?void 0:e.data)||(null==i?void 0:i.data)||{}),p(Array.isArray(null==c||null==(n=c.data)||null==(t=n.data)?void 0:t.data)?c.data.data.data:Array.isArray(null==c||null==(a=c.data)?void 0:a.data)?c.data.data:Array.isArray(null==c?void 0:c.data)?c.data:[]),[3,5];case 3:return u.sent(),r.message.error("Failed to load ACL cache data"),[3,5];case 4:return g(!1),[7];case 5:return[2]}})})()},[o]);if((0,t.useEffect)(function(){E()},[]),(0,t.useEffect)(function(){if(v){var e=setInterval(E,1e3*v);return function(){return clearInterval(e)}}},[v,E]),!u)return null;var w=Object.entries(u.detailByRole||{}).map(function(e){var t,n,r=em(e,2),a=r[0],l=r[1];return t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({role:a},l),n=n={hitRate:l.checks>0?Math.round(l.hits/l.checks*1e4)/100:0},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),S=[{title:i("Role"),dataIndex:"role",width:120,filters:((function(e){if(Array.isArray(e))return eu(e)})(e=new Set(m.map(function(e){return e.role})))||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ep(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){return{text:e,value:e}}),onFilter:function(e,t){return t.role===e}},{title:i("Resource"),dataIndex:"resource",width:200},{title:i("Action"),dataIndex:"action",width:120},{title:i("Cache Key"),dataIndex:"key",ellipsis:!0,render:function(e){return n().createElement(ey,{code:!0,style:{fontSize:11}},e)}}],k=[{title:i("Role"),dataIndex:"role",width:150},{title:i("Checks"),dataIndex:"checks",width:100,sorter:function(e,t){return e.checks-t.checks}},{title:i("Hits"),dataIndex:"hits",width:100,render:function(e){return n().createElement(ey,{type:"success"},e)}},{title:i("Misses"),dataIndex:"misses",width:100,render:function(e){return n().createElement(ey,{type:"danger"},e)}},{title:i("Hit Rate"),dataIndex:"hitRate",width:100,render:function(e){return n().createElement(r.Tag,{color:e>80?"green":e>50?"orange":"red"},e,"%")},sorter:function(e,t){return e.hitRate-t.hitRate}},{title:i("Actions"),width:80,render:function(e,t){return n().createElement(r.Popconfirm,{title:"".concat(i("Clear cache for role"),' "').concat(t.role,'"?'),onConfirm:function(){var e;return e=t.role,ed(function(){var t,n;return ef(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:clearRole",method:"post",data:{roleName:e}})];case 1:return n=a.sent(),r.message.success("Cleared ".concat((null==(t=n.data)?void 0:t.deletedCount)||0,' entries for role "').concat(e,'"')),E(),[3,3];case 2:return a.sent(),r.message.error("Failed to clear role cache"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.DeleteOutlined,null),danger:!0}))}}];return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:E,loading:y},i("Refresh")),n().createElement(r.Select,{placeholder:i("Auto refresh"),allowClear:!0,style:{width:160},value:v,onChange:b,options:[{value:5,label:i("Every 5s")},{value:10,label:i("Every 10s")},{value:30,label:i("Every 30s")}]}),n().createElement(r.Popconfirm,{title:i("Clear all ACL cache entries?"),onConfirm:function(){return ed(function(){var e,t;return ef(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:clear",method:"post"})];case 1:return t=n.sent(),r.message.success("Cleared ".concat((null==(e=t.data)?void 0:e.deletedCount)||0," cache entries")),E(),[3,3];case 2:return n.sent(),r.message.error("Failed to clear cache"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{icon:n().createElement(a.DeleteOutlined,null),danger:!0},i("Clear All Cache"))),n().createElement(r.Popconfirm,{title:i("Reset ACL stats counters?"),onConfirm:function(){return ed(function(){return ef(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerAclCache:resetStats",method:"post"})];case 1:return e.sent(),r.message.success("Stats reset"),E(),[3,3];case 2:return e.sent(),r.message.error("Failed to reset stats"),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,null,i("Reset Stats"))),n().createElement(r.Tag,null,"TTL: ",u.ttlSeconds,"s"),n().createElement(r.Tag,null,i("Since"),": ",new Date(u.startedAt).toLocaleString())),n().createElement(r.Row,{gutter:[16,16]},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Total ACL Checks"),value:u.totalChecks,prefix:n().createElement(a.SafetyCertificateOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Cache Hits"),value:u.cacheHits,prefix:n().createElement(a.CheckCircleOutlined,null),valueStyle:{color:"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Cache Misses"),value:u.cacheMisses,prefix:n().createElement(a.CloseCircleOutlined,null),valueStyle:{color:"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:i("Hit Rate"),value:u.hitRate,suffix:"%",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:u.hitRate>80?"#3f8600":u.hitRate>50?"#faad14":"#cf1322"}}),n().createElement(ey,{type:"secondary"},i("Cached keys"),": ",u.cachedKeys)))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:i("Stats by Role"),size:"small"},0===w.length?n().createElement(ey,{type:"secondary"},i("No ACL checks recorded yet")):n().createElement(r.Table,{rowKey:"role",size:"small",pagination:!1,dataSource:w,columns:k,scroll:{x:"max-content"}}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"".concat(i("Cached Permission Keys")," (").concat(m.length,")"),size:"small"},0===m.length?n().createElement(ey,{type:"secondary"},i("No cached keys")):n().createElement(r.Table,{rowKey:"key",size:"small",pagination:{pageSize:10,size:"small"},dataSource:m,columns:S})))))}function eh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ev(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eb(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eh(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eE=r.Typography.Text;function ew(){var e=(0,l.useApp)().apiClient,o=eb((0,t.useState)(null),2),i=o[0],c=o[1],u=eb((0,t.useState)({}),2),s=u[0],d=u[1],m=eb((0,t.useState)(0),2),p=m[0],f=m[1],y=eb((0,t.useState)([]),2),g=y[0],h=y[1],v=eb((0,t.useState)([]),2),b=v[0],E=v[1],w=eb((0,t.useState)(!1),2),S=w[0],k=w[1],C=eb((0,t.useState)(null),2),x=C[0],O=C[1],I=eb((0,t.useState)(null),2),P=I[0],A=I[1],T=(0,t.useCallback)(function(){var t;return(t=function(){var t,n,r,a,l,o,i,u,s,m,p,y,g,v,b,w,S,C,x;return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(O){switch(O.label){case 0:k(!0),A(null),O.label=1;case 1:return O.trys.push([1,3,4,5]),[4,Promise.all([e.request({url:"clusterManagerRedis:info"}),e.request({url:"clusterManagerRedis:pubsub"}),e.request({url:"clusterManagerRedis:clients"}),e.request({url:"clusterManagerRedis:slowlog",params:{count:10}})])];case 2:return m=(s=eb.apply(void 0,[O.sent(),4]))[0],p=s[1],y=s[2],g=s[3],c((null==m||null==(t=m.data)?void 0:t.data)||(null==m?void 0:m.data)||{}),d((v=(null==p||null==(n=p.data)?void 0:n.data)||(null==p?void 0:p.data)||{}).channels||{}),f(v.total_channels||0),h(Array.isArray(null==y||null==(a=y.data)||null==(r=a.data)?void 0:r.data)?y.data.data.data:Array.isArray(null==y||null==(l=y.data)?void 0:l.data)?y.data.data:Array.isArray(null==y?void 0:y.data)?y.data:[]),E(Array.isArray(null==g||null==(i=g.data)||null==(o=i.data)?void 0:o.data)?g.data.data.data:Array.isArray(null==g||null==(u=g.data)?void 0:u.data)?g.data.data:Array.isArray(null==g?void 0:g.data)?g.data:[]),[3,5];case 3:return A((null==(b=O.sent())||null==(x=b.response)||null==(C=x.data)||null==(S=C.errors)||null==(w=S[0])?void 0:w.message)||"Failed to connect to Redis"),[3,5];case 4:return k(!1),[7];case 5:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var l=t.apply(e,n);function o(e){ev(l,r,a,o,i,"next",e)}function i(e){ev(l,r,a,o,i,"throw",e)}o(void 0)})})()},[e]);if((0,t.useEffect)(function(){T()},[]),(0,t.useEffect)(function(){if(x){var e=setInterval(T,1e3*x);return function(){return clearInterval(e)}}},[x,T]),P)return n().createElement(r.Card,null,n().createElement(eE,{type:"danger"},P),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:T},"Retry"));if(!i)return null;var R="unlimited"!==i.memory.max_memory&&i.memory.peak_bytes>0?Math.round(i.memory.used_bytes/i.memory.peak_bytes*100):null;return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:T,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:x,onChange:O,options:[{value:5,label:"Every 5s"},{value:10,label:"Every 10s"},{value:30,label:"Every 30s"}]}),n().createElement(r.Tag,{color:"blue"},"Redis ",i.server.version),n().createElement(r.Tag,null,"Uptime: ",j(i.server.uptime_seconds))),n().createElement(r.Row,{gutter:[16,16]},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Memory Used",value:i.memory.used,prefix:n().createElement(a.DatabaseOutlined,null),suffix:null!==R?"(".concat(R,"%)"):void 0}),n().createElement(eE,{type:"secondary"},"Peak: ",i.memory.peak),n().createElement("br",null),n().createElement(eE,{type:"secondary"},"Max: ",i.memory.max_memory),n().createElement("br",null),n().createElement(eE,{type:"secondary"},"Policy: ",i.memory.max_memory_policy))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Ops/sec",value:i.stats.ops_per_sec,prefix:n().createElement(a.ThunderboltOutlined,null)}),n().createElement(eE,{type:"secondary"},"Total commands: ",i.stats.total_commands.toLocaleString()))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Connected Clients",value:i.clients.connected,prefix:n().createElement(a.CloudServerOutlined,null)}),n().createElement(eE,{type:"secondary"},"Blocked: ",i.clients.blocked))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Cache Hit Rate",value:i.stats.hit_rate,suffix:"%",prefix:n().createElement(a.FieldTimeOutlined,null),valueStyle:{color:i.stats.hit_rate>90?"#3f8600":i.stats.hit_rate>50?"#faad14":"#cf1322"}}),n().createElement(eE,{type:"secondary"},"Hits: ",i.stats.keyspace_hits.toLocaleString()," / Misses:"," ",i.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(eE,{type:"secondary"},"Expired: ",i.stats.expired_keys.toLocaleString()," / Evicted:"," ",i.stats.evicted_keys.toLocaleString())))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Keyspace",size:"small"},0===Object.keys(i.keyspace).length?n().createElement(eE,{type:"secondary"},"No databases in use"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(i.keyspace).map(function(e){var t=eb(e,2),n=t[0],r=t[1];return{db:n,keys:r.keys,expires:r.expires,avg_ttl:r.avg_ttl}}),columns:[{title:"Database",dataIndex:"db",width:80},{title:"Keys",dataIndex:"keys",width:80},{title:"Expires",dataIndex:"expires",width:80},{title:"Avg TTL",dataIndex:"avg_ttl",render:function(e){return e?"".concat((Number(e)/1e3).toFixed(1),"s"):"-"}}]}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Pub/Sub Channels (".concat(p,")"),size:"small"},0===p?n().createElement(eE,{type:"secondary"},"No active channels"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(s).map(function(e){var t=eb(e,2);return{name:t[0],subs:t[1]}}),columns:[{title:"Channel",dataIndex:"name",ellipsis:!0},{title:"Subscribers",dataIndex:"subs",width:100}]})))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Slow Log (recent)",size:"small"},0===b.length?n().createElement(eE,{type:"secondary"},"No slow queries"):n().createElement(r.Table,{rowKey:"id",size:"small",pagination:!1,dataSource:b,columns:[{title:"ID",dataIndex:"id",width:60},{title:"Duration",dataIndex:"duration_us",width:100,render:function(e){return"".concat((e/1e3).toFixed(1),"ms")}},{title:"Command",dataIndex:"command",ellipsis:!0}]}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"Connected Clients (".concat(g.length,")"),size:"small"},n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:{pageSize:5,size:"small"},dataSource:g,columns:[{title:"Addr",dataIndex:"addr",width:140},{title:"Age",dataIndex:"age",width:60,render:function(e){return"".concat(e,"s")}},{title:"Idle",dataIndex:"idle",width:60,render:function(e){return"".concat(e,"s")}},{title:"DB",dataIndex:"db",width:40},{title:"Cmd",dataIndex:"cmd",width:80},{title:"Flags",dataIndex:"flags",width:60,render:function(e){return n().createElement(r.Tag,null,e)}}]})))),n().createElement(r.Row,{gutter:16,style:{marginTop:16}},n().createElement(r.Col,{span:24},n().createElement(eS,null))))}function eS(){var e=(0,l.useApp)().apiClient,a=eb((0,t.useState)(null),2),o=a[0],i=a[1];return((0,t.useEffect)(function(){e.request({url:"clusterManagerRedis:syncMessages"}).then(function(e){var t;return i(null==e||null==(t=e.data)?void 0:t.data)}).catch(function(){})},[e]),o)?n().createElement(r.Card,{title:"Sync Messages (PubSub ".concat(o.pubSubConnected?"Connected":"Disconnected",")"),size:"small"},n().createElement(r.Table,{rowKey:"channel",size:"small",pagination:!1,dataSource:o.channels||[],columns:[{title:"Channel",dataIndex:"channel",key:"channel"}]})):null}function ek(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eC(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ex(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eC(l,r,a,o,i,"next",e)}function i(e){eC(l,r,a,o,i,"throw",e)}o(void 0)})}}function eO(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ek(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ek(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eI(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function eP(){var e,o=T(),i=(0,l.useApp)().apiClient,c=eO((0,t.useState)(!1),2),u=c[0],s=c[1],d=eO((0,t.useState)(null),2),m=d[0],p=d[1],f=eO((0,t.useState)([]),2),y=f[0],g=f[1],h=eO((0,t.useState)(null),2),v=h[0],b=h[1],E=(0,t.useCallback)(function(){return ex(function(){var e,t,n,r,a,l;return eI(this,function(o){switch(o.label){case 0:s(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,Promise.all([i.request({url:"clusterManagerLock:info"}),i.request({url:"clusterManagerLock:list"})])];case 2:return a=(r=eO.apply(void 0,[o.sent(),2]))[0],l=r[1],p(null==a||null==(e=a.data)?void 0:e.data),g((null==l||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),[3,5];case 3:return o.sent(),[3,5];case 4:return s(!1),[7];case 5:return[2]}})})()},[i]);(0,t.useEffect)(function(){E()},[E]),(0,t.useEffect)(function(){if(v){var e=setInterval(E,1e3*v);return function(){return clearInterval(e)}}},[v,E]);var w=[{title:o("Lock Key"),dataIndex:"key",key:"key",render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:o("Adapter"),dataIndex:"adapter",key:"adapter",width:100,render:function(e){return n().createElement(r.Tag,null,e)}},{title:o("TTL"),dataIndex:"ttl",key:"ttl",width:120,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:o("Actions"),key:"actions",width:120,render:function(e,t){return n().createElement(r.Popconfirm,{title:o("Force release this lock?"),description:o("This may cause data inconsistency. Use with caution."),onConfirm:function(){var e;return e=t.key,ex(function(){return eI(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,i.request({url:"clusterManagerLock:release",method:"post",data:{key:e}})];case 1:return t.sent(),r.message.success(o("Lock released")),E(),[3,3];case 2:return t.sent(),r.message.error(o("Failed to release lock")),[3,3];case 3:return[2]}})})()},okText:o("Release"),cancelText:o("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.UnlockOutlined,null)},o("Release")))}}];return n().createElement(r.Spin,{spinning:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:E},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:v,onChange:b,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]})),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Adapter Type"),value:(null==m?void 0:m.adapter)||"-",prefix:n().createElement(a.LockOutlined,null),valueStyle:{fontSize:16}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Active Locks"),value:null!=(e=null==m?void 0:m.activeLocks)?e:0,prefix:n().createElement(a.LockOutlined,null),valueStyle:{color:((null==m?void 0:m.activeLocks)||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Total Listed"),value:y.length})))),n().createElement(r.Card,{title:o("Active Locks"),size:"small"},0===y.length?n().createElement("div",{style:{textAlign:"center",padding:24,color:"#999"}},o("No active locks")):n().createElement(r.Table,{dataSource:y,columns:w,rowKey:"key",size:"small",pagination:{pageSize:20}}))))}function eA(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eT(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eR(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eT(l,r,a,o,i,"next",e)}function i(e){eT(l,r,a,o,i,"throw",e)}o(void 0)})}}function ej(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eA(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eA(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ez(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function eM(){var e,o,i,c=T(),u=(0,l.useApp)().apiClient,s=ej((0,t.useState)(!1),2),d=s[0],m=s[1],p=ej((0,t.useState)(null),2),f=p[0],y=p[1],g=ej((0,t.useState)(null),2),h=g[0],v=g[1],b=ej((0,t.useState)(null),2),E=b[0],w=b[1],S=ej((0,t.useState)(null),2),k=S[0],C=S[1],x=ej((0,t.useState)([]),2),O=x[0],I=x[1],P=ej((0,t.useState)({}),2),A=P[0],R=P[1],j=ej((0,t.useState)([]),2),z=j[0],M=j[1],D=ej((0,t.useState)({}),2),N=D[0],F=D[1],B=(0,t.useCallback)(function(){return eR(function(){var e,t;return ez(this,function(n){switch(n.label){case 0:m(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,u.request({url:"clusterManagerQueue:stats"})];case 2:return y(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[u]),q=(0,t.useCallback)(function(e){return eR(function(){var t,n,r,a,l;return ez(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,u.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return I((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),R((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,3];case 2:return o.sent(),[3,3];case 3:return[2]}})})()},[u]),L=(0,t.useCallback)(function(e){return eR(function(){var t,n,r,a,l;return ez(this,function(o){switch(o.label){case 0:if(!(null==e?void 0:e.key))return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,u.request({url:"clusterManagerQueue:messages",params:{source:"redis",key:e.key}})];case 2:return M((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),F((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,4];case 3:return o.sent(),[3,4];case 4:return[2]}})})()},[u]);(0,t.useEffect)(function(){B()},[B]),(0,t.useEffect)(function(){if(h){var e=setInterval(B,1e3*h);return function(){return clearInterval(e)}}},[h,B]);var _=[{title:c("Channel"),dataIndex:"channel",key:"channel"},{title:c("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return null===e?n().createElement(r.Tag,null,"N/A"):n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:c("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:c("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:c("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){w(t.channel),q(t.channel)}},c("Messages"))}}],U=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:c("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:c("Retried"),dataIndex:"retried",key:"retried",width:80},{title:c("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}],K=[{title:c("Queue"),dataIndex:"channel",key:"channel",width:240},{title:c("Redis Key"),dataIndex:"key",key:"key",ellipsis:!0},{title:c("App"),dataIndex:"appName",key:"appName",width:120},{title:c("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:c("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){C(t),L(t)}},c("Items"))}}],W=[{title:"#",dataIndex:"index",key:"index",width:80},{title:c("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:c("Queued At"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];return n().createElement(r.Spin,{spinning:d},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:B},c("Refresh")),n().createElement(r.Select,{placeholder:c("Auto Refresh"),allowClear:!0,value:h,onChange:v,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),f&&n().createElement(r.Tag,{color:f.connected?"green":"red"},f.adapter)),f&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Adapter"),value:f.adapter,prefix:n().createElement(a.ApiOutlined,null),valueStyle:{fontSize:16}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Channels"),value:f.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Pending"),value:f.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:f.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Connected"),value:f.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:f.connected?"#3f8600":"#cf1322"}})))),(null==f?void 0:f.redisQueues)&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Queue Pending"),value:f.redisQueues.totalPending||0,prefix:n().createElement(a.DatabaseOutlined,null),valueStyle:{color:(f.redisQueues.totalPending||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Queues"),value:(null==(e=f.redisQueues.queues)?void 0:e.length)||0,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Redis Connected"),value:f.redisQueues.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:f.redisQueues.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:c("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==f?void 0:f.channels)||[],columns:_,rowKey:"channel",size:"small",pagination:!1})),n().createElement(r.Card,{title:c("Redis Queues"),size:"small"},(null==f||null==(o=f.redisQueues)?void 0:o.note)&&n().createElement(r.Tag,{style:{marginBottom:8}},f.redisQueues.note),n().createElement(r.Table,{dataSource:(null==f||null==(i=f.redisQueues)?void 0:i.queues)||[],columns:K,rowKey:"key",size:"small",pagination:!1})),E&&n().createElement(r.Card,{title:"".concat(c("Messages"),": ").concat(E),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return w(null)}},"Close")},A.note&&n().createElement(r.Tag,{style:{marginBottom:8}},A.note),n().createElement(r.Table,{dataSource:O,columns:U,rowKey:"id",size:"small",pagination:{pageSize:10,total:A.count}})),k&&n().createElement(r.Card,{title:"".concat(c("Redis Queue Items"),": ").concat(k.channel),size:"small",extra:n().createElement(r.Space,null,n().createElement(r.Button,{size:"small",onClick:function(){return L(k)}},c("Refresh")),n().createElement(r.Button,{size:"small",onClick:function(){return C(null)}},c("Close")))},n().createElement(r.Tag,{style:{marginBottom:8}},k.key),N.note&&n().createElement(r.Tag,{style:{marginBottom:8}},N.note),n().createElement(r.Table,{dataSource:z,columns:W,rowKey:"id",size:"small",pagination:{pageSize:10,total:N.count}}))))}function eD(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eN(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eF(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eN(l,r,a,o,i,"next",e)}function i(e){eN(l,r,a,o,i,"throw",e)}o(void 0)})}}function eB(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||eq(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eq(e,t){if(e){if("string"==typeof e)return eD(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eD(e,t)}}function eL(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var e_=r.Input.TextArea,eU=r.Typography.Title,eK=r.Typography.Text;function eW(){var e,o=T(),i=(0,l.useApp)().apiClient,c=eB((0,t.useState)(!1),2),u=c[0],s=c[1],d=eB((0,t.useState)(!1),2),m=d[0],p=d[1],f=eB((0,t.useState)(null),2),y=f[0],g=f[1],h=eB((0,t.useState)("directory"),2),v=h[0],b=h[1],E=eB((0,t.useState)("custom"),2),w=E[0],S=E[1],k=eB((0,t.useState)(""),2),C=k[0],x=k[1],O=eB((0,t.useState)(""),2),I=O[0],P=O[1],A=eB((0,t.useState)("PURGE"),2),R=A[0],j=A[1],z=eB((0,t.useState)('{\n "X-Purge": "1"\n}'),2),M=z[0],D=z[1],N=eB((0,t.useState)(""),2),F=N[0],B=N[1],q=n().useCallback(function(){return eF(function(){var e,t;return eL(this,function(n){switch(n.label){case 0:s(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,i.request({url:"clusterManagerCacheMgr:nginxCacheStatus"})];case 2:return g(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),r.message.error(o("Failed to load Nginx status")),[3,5];case 4:return s(!1),[7];case 5:return[2]}})})()},[i,o]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){var e;(null==y||null==(e=y.detectedPaths)?void 0:e.length)>0?S(y.detectedPaths[0]):S("custom")},[y]);var L=(null==y?void 0:y.detectedPaths)||[],_=(null==y?void 0:y.nginxInstalled)||!1;return n().createElement(r.Card,{bordered:!1,loading:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"large"},n().createElement(r.Alert,{type:_?"success":"warning",showIcon:!0,icon:_?n().createElement(a.CheckCircleOutlined,null):n().createElement(a.CloseCircleOutlined,null),message:n().createElement("span",{style:{fontWeight:600}},o("Nginx Cache Status")),description:n().createElement("div",{style:{marginTop:8}},n().createElement("div",null,n().createElement("span",{style:{fontWeight:500}},o("Status"),":")," ",_?n().createElement(r.Tag,{color:"success"},o("Nginx is installed")):n().createElement(r.Tag,{color:"warning"},o("Nginx is NOT installed"))),(null==y?void 0:y.mainConfigPath)&&n().createElement("div",{style:{marginTop:4}},n().createElement("span",{style:{fontWeight:500}},o("Nginx configuration file found at"),":")," ",n().createElement("code",{style:{fontSize:12}},y.mainConfigPath)),L.length>0&&n().createElement("div",{style:{marginTop:4}},n().createElement("span",{style:{fontWeight:500}},o("Nginx cache paths detected"),":"),n().createElement("div",{style:{marginTop:4,display:"flex",flexWrap:"wrap",gap:6}},L.map(function(e){return n().createElement(r.Tag,{key:e,color:"blue",style:{fontSize:11}},e)}))),!_&&n().createElement("div",{style:{marginTop:4,fontStyle:"italic",opacity:.8}},o("Nginx is not detected on this node. You can still input a custom cache directory."))),action:n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:q},o("Refresh"))}),n().createElement("div",null,n().createElement(eU,{level:5,style:{fontSize:14}},o("Nginx cache clearing method")),n().createElement(r.Radio.Group,{value:v,onChange:function(e){return b(e.target.value)},style:{width:"100%",marginTop:8}},n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:12},n().createElement(r.Radio.Button,{value:"directory",style:{width:"100%",height:"auto",padding:"16px 24px",display:"flex",flexDirection:"column",borderRadius:8,textAlign:"left",boxShadow:"none",lineHeight:"normal",border:"directory"===v?"2px solid #1677ff":"1px solid #d9d9d9"}},n().createElement(r.Space,{align:"start",size:"middle"},n().createElement(a.DeleteOutlined,{style:{fontSize:24,color:"directory"===v?"#1677ff":"inherit",marginTop:4}}),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,fontSize:15,color:"directory"===v?"#1677ff":"inherit"}},o("Physical Files")),n().createElement("div",{style:{fontSize:12,opacity:.65,marginTop:4}},o("Directly deletes all cache files inside the nginx cache directory on this server node.")))))),n().createElement(r.Col,{span:12},n().createElement(r.Radio.Button,{value:"purgeRequest",style:{width:"100%",height:"auto",padding:"16px 24px",display:"flex",flexDirection:"column",borderRadius:8,textAlign:"left",boxShadow:"none",lineHeight:"normal",border:"purgeRequest"===v?"2px solid #1677ff":"1px solid #d9d9d9"}},n().createElement(r.Space,{align:"start",size:"middle"},n().createElement(a.SendOutlined,{style:{fontSize:24,color:"purgeRequest"===v?"#1677ff":"inherit",marginTop:4}}),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,fontSize:15,color:"purgeRequest"===v?"#1677ff":"inherit"}},o("HTTP Purge Request")),n().createElement("div",{style:{fontSize:12,opacity:.65,marginTop:4}},o("Sends a custom HTTP request (like PURGE or bypass headers) to let Nginx clear specific URLs."))))))))),n().createElement(r.Card,{bordered:!0,size:"small",style:{backgroundColor:"#fafafa"}},"directory"===v?n().createElement(r.Form,{layout:"vertical"},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Select Cache Path")),required:!0},n().createElement(r.Select,{value:w,onChange:function(e){return S(e)},style:{width:"100%"},options:((function(e){if(Array.isArray(e))return eD(e)})(e=L.map(function(e){return{label:e,value:e}}))||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||eq(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([{label:o("Custom Path"),value:"custom"}])})),"custom"===w&&n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Custom Cache Path")),required:!0},n().createElement(r.Input,{placeholder:"/var/cache/nginx",value:C,onChange:function(e){return x(e.target.value)}}),n().createElement(eK,{type:"secondary",style:{fontSize:11,display:"block",marginTop:4}},o("Provide the full absolute path of the directory. Restricted system paths will be rejected for safety.")))):n().createElement(r.Form,{layout:"vertical"},n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:18},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Purge URL")),required:!0},n().createElement(r.Input,{placeholder:"http://127.0.0.1/purge/*",value:I,onChange:function(e){return P(e.target.value)}}))),n().createElement(r.Col,{span:6},n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("HTTP Method")),required:!0},n().createElement(r.Select,{value:R,onChange:function(e){return j(e)},options:[{label:"PURGE",value:"PURGE"},{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"DELETE",value:"DELETE"}]})))),n().createElement(r.Form.Item,{label:n().createElement("span",{style:{fontWeight:500}},o("Headers (JSON)"))},n().createElement(e_,{rows:4,value:M,onChange:function(e){return D(e.target.value)},placeholder:'{\n "X-Purge": "1"\n}',style:{fontFamily:"monospace",fontSize:12}})))),n().createElement("div",null,n().createElement(r.Popconfirm,{title:o("Clear Nginx Cache?"),description:"directory"===v?o("Are you sure you want to clear Nginx cache? This will permanently delete all files in this directory."):o("Are you sure you want to trigger this HTTP Purge request?"),onConfirm:function(){return eF(function(){var e,t,n,a,l,c,u,s,d,m,f,y;return eL(this,function(g){switch(g.label){case 0:p(!0),B(""),g.label=1;case 1:if(g.trys.push([1,3,4,5]),t={method:v},"directory"===v){if(!(n="custom"===w?C:w))return r.message.error(o("Nginx cache path is required")),p(!1),[2];t.directory=n,B("[INFO] Clearing physical cache files in: ".concat(n,"\n"))}else{if(!I)return r.message.error(o("Please enter a valid Purge URL")),p(!1),[2];t.url=I,t.httpMethod=R,a={};try{M.trim()&&(a=JSON.parse(M))}catch(e){return r.message.error(o("Invalid headers JSON structure")),p(!1),[2]}t.headers=a,B("[INFO] Sending HTTP Purge request:\n[INFO] Method: ".concat(R,"\n[INFO] URL: ").concat(I,"\n[INFO] Headers: ").concat(JSON.stringify(a,null,2),"\n"))}return[4,i.request({url:"clusterManagerCacheMgr:clearNginxCache",method:"post",data:{values:t}})];case 2:return c=null==(l=g.sent())||null==(e=l.data)?void 0:e.data,"directory"===v?(u=o("Cache cleared successfully. Cleared {count} items.").replace("{count}",String((null==c?void 0:c.clearedCount)||0)),r.message.success(u),B(function(e){return e+"[SUCCESS] ".concat(u,"\n")})):(s=o("HTTP Purge request completed. Status: {status}").replace("{status}",String((null==c?void 0:c.status)||200)),r.message.success(s),B(function(e){var t;return e+"[SUCCESS] ".concat(s,"\n[RESPONSE BODY]\n").concat("object"==((t=null==c?void 0:c.data)&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t)?JSON.stringify(c.data,null,2):String((null==c?void 0:c.data)||""),"\n")})),[3,5];case 3:return y=(null==(d=g.sent())||null==(f=d.response)||null==(m=f.data)?void 0:m.message)||(null==d?void 0:d.message)||String(d),r.message.error(y),B(function(e){return e+"[ERROR] Failed: ".concat(y,"\n")}),[3,5];case 4:return p(!1),[7];case 5:return[2]}})})()},okButtonProps:{loading:m}},n().createElement(r.Button,{type:"primary",danger:"directory"===v,size:"large",icon:"directory"===v?n().createElement(a.DeleteOutlined,null):n().createElement(a.SendOutlined,null),loading:m},"directory"===v?o("Clear Nginx Cache"):o("Send Purge Request")))),F&&n().createElement("div",null,n().createElement(eU,{level:5,style:{fontSize:13,marginBottom:8}},o("Execution Logs")),n().createElement("pre",{style:{backgroundColor:"#1e1e1e",color:"#d4d4d4",padding:"12px 16px",borderRadius:6,fontFamily:"monospace",fontSize:12,overflowX:"auto",whiteSpace:"pre-wrap",maxHeight:"300px"}},F))))}function eV(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eH(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eQ(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eH(l,r,a,o,i,"next",e)}function i(e){eH(l,r,a,o,i,"throw",e)}o(void 0)})}}function eG(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eV(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eV(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eJ(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function e$(){var e=T(),o=(0,l.useApp)().apiClient,i=eG((0,t.useState)(!1),2),c=i[0],u=i[1],s=eG((0,t.useState)([]),2),d=s[0],m=s[1],p=eG((0,t.useState)([]),2),f=p[0],y=p[1],g=eG((0,t.useState)(null),2),h=g[0],v=g[1],b=(0,t.useCallback)(function(){return eQ(function(){var e,t,n,r,a,l,i,c,s;return eJ(this,function(d){switch(d.label){case 0:u(!0),d.label=1;case 1:return d.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerCacheMgr:stores"}),o.request({url:"clusterManagerCacheMgr:caches"}),o.request({url:"clusterManagerCacheMgr:redisMemory"})])];case 2:return i=(l=eG.apply(void 0,[d.sent(),3]))[0],c=l[1],s=l[2],m((null==i||null==(t=i.data)||null==(e=t.data)?void 0:e.data)||[]),y((null==c||null==(r=c.data)||null==(n=r.data)?void 0:n.data)||[]),v(null==s||null==(a=s.data)?void 0:a.data),[3,5];case 3:return d.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})})()},[o]);(0,t.useEffect)(function(){b()},[b]);var E=[{title:e("Store Name"),dataIndex:"name",key:"name"},{title:e("Type"),dataIndex:"type",key:"type",width:120,render:function(e){return n().createElement(r.Tag,{color:"redis"===e?"blue":"default"},e)}},{title:e("Default"),dataIndex:"isDefault",key:"isDefault",width:100,render:function(e){return e?n().createElement(r.Tag,{color:"green"},"Yes"):"-"}}],w=[{title:e("Cache Name"),dataIndex:"name",key:"name"},{title:e("Prefix"),dataIndex:"prefix",key:"prefix",render:function(e){return e?n().createElement("code",{style:{fontSize:11}},e):"-"}}];return n().createElement(r.Tabs,{defaultActiveKey:"overview",items:[{key:"overview",label:e("Cache Stores"),children:n().createElement(r.Spin,{spinning:c},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:b},e("Refresh")),n().createElement(r.Popconfirm,{title:e("Flush all caches?"),description:e("This will clear all cached data across all stores."),onConfirm:function(){return eQ(function(){return eJ(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"clusterManagerCacheMgr:flushAll",method:"post"})];case 1:return t.sent(),r.message.success(e("All caches flushed")),b(),[3,3];case 2:return t.sent(),r.message.error(e("Failed to flush caches")),[3,3];case 3:return[2]}})})()}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.DeleteOutlined,null)},e("Flush All")))),n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Cache Stores"),value:d.length,prefix:n().createElement(a.DatabaseOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Named Caches"),value:f.length}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:e("Redis Keys"),value:(null==h?void 0:h.available)?h.totalKeys:"-",suffix:(null==h?void 0:h.available)?"(".concat(h.usedMemory,")"):""})))),n().createElement(r.Card,{title:e("Registered Stores"),size:"small"},n().createElement(r.Table,{dataSource:d,columns:E,rowKey:"name",size:"small",pagination:!1})),n().createElement(r.Card,{title:e("Named Caches"),size:"small"},n().createElement(r.Table,{dataSource:f,columns:w,rowKey:"name",size:"small",pagination:!1}))))},{key:"acl",label:e("ACL Cache"),children:n().createElement(eg,null)},{key:"redis",label:e("Redis Monitor"),children:n().createElement(ew,null)},{key:"locks",label:e("Locks"),children:n().createElement(eP,null)},{key:"queue",label:e("Event Queue"),children:n().createElement(eM,null)},{key:"nginx",label:e("Nginx Cache"),children:n().createElement(eW,null)}]})}function eY(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eX(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eZ(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eX(l,r,a,o,i,"next",e)}function i(e){eX(l,r,a,o,i,"throw",e)}o(void 0)})}}function e0(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function e1(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){e0(e,t,n[t])})}return e}function e2(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function e3(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||e6(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e4(e){return function(e){if(Array.isArray(e))return eY(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||e6(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e6(e,t){if(e){if("string"==typeof e)return eY(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eY(e,t)}}function e5(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var e8=r.Typography.Text;r.Typography.Title;var e7="workflow:process,async-task:process",e9=z.filter(function(e){return e.common&&!e.sandbox}),te={name:"*",label:"All processes",description:"Consume every worker process"},tt={APP_ROLE:"worker",WORKER_MODE:e7,APP_PORT:"13000",SKILL_HUB_SANDBOX:"false"},tn=[{configMapRef:{name:"nocobase-config"}},{secretRef:{name:"nocobase-secret"}}],tr=[{name:"app-storage",mountPath:"/app/nocobase/storage"},{name:"script-volume",mountPath:"/hotfix-license.js",subPath:"hotfix-license.js"}],ta=[{name:"app-storage",persistentVolumeClaim:{claimName:"app-storage"}},{name:"script-volume",configMap:{name:"nocobase-scripts"}}],tl={running:"green",stopped:"orange",exited:"red",pending:"blue",creating:"cyan",error:"red"};function to(e,t){return JSON.stringify(null!=e?e:t,null,2)}function ti(e,t,n){var r=String(e||"").trim();if(!r)return t;try{return JSON.parse(r)}catch(e){throw Error("".concat(n," must be valid JSON"))}}function tc(e){var t;return(t=G(e))?t.split(","):[]}function tu(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"*";return G((null==e?void 0:e.workerMode)||(null==e||null==(t=e.envVars)?void 0:t.WORKER_MODE)||n)||""}function ts(){var e,o=T(),i=(0,l.useApp)().apiClient,c=e3((0,t.useState)(!1),2),u=c[0],s=c[1],d=e3((0,t.useState)([]),2),m=d[0],p=d[1],f=e3((0,t.useState)({}),2),y=f[0],g=f[1],h=e3((0,t.useState)({}),2),v=h[0],b=h[1],E=e3((0,t.useState)({}),2),w=E[0],S=E[1],k=e3((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),C=k[0],x=k[1],O=e3((0,t.useState)({visible:!1,containerName:"",logs:""}),2),I=O[0],P=O[1],A=e3((0,t.useState)(null),2),R=A[0],j=A[1],z=e3((0,t.useState)(!1),2),M=z[0],D=z[1],N=e3((0,t.useState)({visible:!1,stack:null}),2),F=N[0],B=N[1],q=e3(r.Form.useForm(),1)[0],L=e3(r.Form.useForm(),1)[0],_=e3((0,t.useState)([]),2),U=_[0],K=_[1],W=e3((0,t.useState)([]),2),V=W[0],H=W[1],J=e3((0,t.useState)(!1),2),$=J[0],Y=J[1],X=(0,t.useCallback)(function(){return eZ(function(){var e,t,n;return e5(this,function(r){switch(r.label){case 0:Y(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,i.request({url:"/workerQueueMappings:scanQueues"})];case 2:return H(Array.isArray(null==(n=(null==(e=(t=r.sent()).data)?void 0:e.data)||t.data)?void 0:n.discovered)?n.discovered:[]),[3,5];case 3:return r.sent(),H([]),[3,5];case 4:return Y(!1),[7];case 5:return[2]}})})()},[i]),Z=(0,t.useCallback)(function(){return eZ(function(){var e,t,n;return e5(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:networks"})];case 1:return Array.isArray(n=(null==(e=(t=r.sent()).data)?void 0:e.data)||t.data)||(n=[]),K(n),[3,3];case 2:return r.sent(),K([]),[3,3];case 3:return[2]}})})()},[i]),ee=(0,t.useCallback)(function(){return eZ(function(){var e,t;return e5(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:ping"})];case 1:return j((null==(e=(t=n.sent()).data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),j({connected:!1,adapter:"unknown"}),[3,3];case 3:return[2]}})})()},[i]),et=(0,t.useCallback)(function(){return eZ(function(){var e,t,n;return e5(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,i.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return p(t=(null==(e=r.sent().data)?void 0:e.data)||[]),n={},t.forEach(function(e){n[e.id]=e.desiredReplicas}),S(n),[3,3];case 2:return r.sent(),[3,3];case 3:return[2]}})})()},[i]),en=(0,t.useCallback)(function(e){return eZ(function(){var t,n,a,l;return e5(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:containers",params:{stackId:e}})];case 1:return a=(null==(t=(n=o.sent()).data)?void 0:t.data)||n.data,g(function(t){return e2(e1({},t),e0({},e,a.data||[]))}),b(function(t){return e2(e1({},t),e0({},e,a.meta||{}))}),[3,3];case 2:return l=o.sent(),r.message.error("Failed to load containers: ".concat(l.message)),[3,3];case 3:return[2]}})})()},[i]),er=(0,t.useCallback)(function(){return eZ(function(){var e,t;return e5(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:getSettings"})];case 1:return t=n.sent(),q.setFieldsValue((null==(e=t.data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),[3,3];case 3:return[2]}})})()},[i,q]),ea=function(e){B({visible:!0,stack:e||null}),L.setFieldsValue(e?e2(e1({},e),{workerMode:tc(tu(e)),envVars:to(e.envVars,{}),resourceLimits:to(e.resourceLimits,{}),k8sEnv:to(e.k8sEnv,[]),k8sEnvFrom:to(e.k8sEnvFrom,[]),k8sVolumeMounts:to(e.k8sVolumeMounts,[]),k8sVolumes:to(e.k8sVolumes,[])}):{name:"app-workers",adapter:"kubernetes",image:"nocobase/nocobase:2.1.6-full",command:"export NOCOBASE_RUNNING_IN_DOCKER=true\nif ! command -v git >/dev/null; then echo \"Installing git...\"; if command -v apt-get >/dev/null; then apt-get update && apt-get install -y git; elif command -v apk >/dev/null; then apk add git; fi; fi\nif [ ! -d /app/nocobase ]; then mkdir -p /app/nocobase; fi\nif [ ! -f /app/nocobase/package.json ]; then\n echo \"copying...\"\n tar -zxf /app/nocobase.tar.gz --absolute-names -C /app/nocobase\n touch /app/nocobase/node_modules/@nocobase/app/dist/client/index.html\nfi\necho \"Applying license hotfix...\"\ncd /app/nocobase && echo \"module.exports={getEnvAsync:async()=>({sys:'mock',osVer:'mock',db:{id:'mock'}}),getInstanceIdWithPublicKeyAsync:async()=>'mock',getInstanceIdAsync:async()=>'mock',instanceIdDecrypt:()=>'mock',createKeyPair:()=>({publicKey:'mock',privateKey:'mock'}),encryptWithPublicKey:()=>'mock',encrypt:()=>'mock',decryptWithPrivateKey:()=>'mock',createSignature:()=>'mock',verifySignature:()=>true,keyEncrypt:()=>'mock',keyDecrypt:()=>JSON.stringify({licenseKey:{domain:'*'}})}\" > node_modules/@nocobase/license-kit/index.js\ncd /app/nocobase && yarn nocobase postinstall\nPRIMARY_URL=\"http://app-1:13000/api/app:getInfo\"\nMAX_WAIT=900\nWAITED=0\nwhile [ $WAITED -lt $MAX_WAIT ]; do\n if wget -q --spider \"$PRIMARY_URL\" 2>/dev/null; then\n echo \"Primary ready after ${WAITED}s. Waiting an additional 15s...\"\n sleep 15\n break\n fi\n sleep 5\n WAITED=$((WAITED + 5))\ndone\nexec yarn --cwd /app/nocobase start",workerMode:tc(e7),envVars:to(tt,{}),resourceLimits:to({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:to([],[]),k8sEnvFrom:to(tn,[]),k8sVolumeMounts:to(tr,[]),k8sVolumes:to(ta,[]),networkMode:""}),Z(),X()},el=function(){B({visible:!1,stack:null}),L.resetFields()};(0,t.useEffect)(function(){ee(),et(),er(),X()},[ee,et,er,X]),(0,t.useEffect)(function(){var e=function(){m.forEach(function(e){return en(e.id)})};e();var t=setInterval(function(){et(),e()},1e4);return function(){return clearInterval(t)}},[m,en,et]);var eo=function(e,t,n){return eZ(function(){var a,l,o,c,u;return e5(this,function(d){switch(d.label){case 0:s(!0),d.label=1;case 1:return d.trys.push([1,4,5,6]),[4,i.request({url:"/workerOrchestrator:".concat(e),method:"POST",data:{stackId:n,containerId:t}})];case 2:return d.sent(),r.message.success("".concat(e," ").concat(t," successful")),[4,en(n)];case 3:return d.sent(),[3,6];case 4:return a=d.sent(),r.message.error((null==(u=a.response)||null==(c=u.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message),[3,6];case 5:return s(!1),[7];case 6:return[2]}})})()},ei=[{title:o("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(e8,{code:!0,style:{fontSize:11}},t.id),n().createElement(e8,null,e))}},{title:o("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:tl[e]||"default"},e.toUpperCase())}},{title:o("Packages"),key:"packages",width:140,render:function(e,t){var l=t.packageStatus;if(!l)return n().createElement(e8,{type:"secondary"},"-");var o="processing";return"succeeded"===l.initStatus&&(o="success"),"failed"===l.initStatus&&(o="error"),n().createElement(r.Tooltip,{title:l.initProgressLog||"Click to view logs"},n().createElement(r.Tag,{color:o,style:{cursor:"pointer"},onClick:function(){return P({visible:!0,containerName:t.name,logs:l.lastInitLog||""})}},"running"===l.initStatus&&n().createElement(a.ReloadOutlined,{spin:!0,style:{marginRight:4}}),"succeeded"===l.initStatus?"Installed":"failed"===l.initStatus?"Failed":"".concat(l.initProgressPercent||0,"%")))}},{title:o("Image"),dataIndex:"image",key:"image",ellipsis:!0,render:function(e){return n().createElement(e8,{type:"secondary",style:{fontSize:12}},e)}},{title:o("Age"),dataIndex:"createdAt",key:"age",width:80,render:function(e){return e?function(e){var t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<60)return"".concat(t,"m");var n=Math.floor(t/60);if(n<24)return"".concat(n,"h ").concat(t%60,"m");var r=Math.floor(n/24);return"".concat(r,"d ").concat(n%24,"h")}(e):"-"}},{title:o("Actions"),key:"actions",width:160,render:function(e,t){var l=(null==R?void 0:R.adapter)==="kubernetes",c=t._stackId;return c?n().createElement(r.Space,{size:"small"},!l&&("running"===t.status?n().createElement(r.Tooltip,{title:o("Stop")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PauseCircleOutlined,null),onClick:function(){return eo("stop",t.id,c)}})):n().createElement(r.Tooltip,{title:o("Start")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PlayCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return eo("start",t.id,c)}}))),n().createElement(r.Tooltip,{title:o("Logs")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){var e;return e=t.id,eZ(function(){var t,n,a;return e5(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,i.request({url:"/workerOrchestrator:logs",params:{stackId:c,containerId:e,tail:200}})];case 1:return x({visible:!0,containerId:e,logs:((null==(t=(n=l.sent()).data)?void 0:t.data)||n.data).lines||[]}),[3,3];case 2:return a=l.sent(),r.message.error("Failed to get logs: ".concat(a.message)),[3,3];case 3:return[2]}})})()}})),n().createElement(r.Popconfirm,{title:o("Remove this container?"),onConfirm:function(){return eo("remove",t.id,c)}},n().createElement(r.Tooltip,{title:o("Remove")},n().createElement(r.Button,{size:"small",type:"text",danger:!0,icon:n().createElement(a.DeleteOutlined,null)})))):null}}],ec=Array.from(new Map([te].concat(e4(e9),e4(V)).map(function(e){var t=("workerProcessName"in e?e.workerProcessName:void 0)||Q(e.name);return[t,{value:t,label:"".concat(e.label," (").concat(t,")"),title:e.name===t?e.description:"".concat(e.description," - alias: ").concat(e.name)}]})).values());return R?n().createElement("div",null,n().createElement(r.Card,{size:"small",style:{marginBottom:16}},n().createElement(r.Row,{justify:"space-between",align:"middle"},n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(a.ApiOutlined,{style:{fontSize:18}}),n().createElement(e8,{strong:!0},o("Adapter"),": "),n().createElement(r.Tag,{color:"blue"},(null==(e=R.adapter)?void 0:e.toUpperCase())||"NONE"),n().createElement(r.Badge,{status:R.connected?"success":"error",text:R.connected?o("Connected"):o("Disconnected")}),void 0!==R.leader&&n().createElement(n().Fragment,null,n().createElement(e8,{type:"secondary"},"|"),n().createElement(r.Badge,{status:R.leader?"success":"default",text:R.leader?o("Leader (this node)"):o("Follower")})))),n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(r.Button,{type:"primary",icon:n().createElement(a.PlusOutlined,null),onClick:function(){return ea()}},o("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return D(!0)}},o("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){ee(),et()}},o("Refresh")))))),R.connected?n().createElement(n().Fragment,null,0===m.length&&n().createElement(r.Alert,{type:"info",showIcon:!0,message:o("No stacks configured"),description:o("Create a worker stack here, then scale it to start worker pods."),style:{marginBottom:16}}),m.map(function(e){var t,l,c,d,m=(y[e.id]||[]).map(function(t){return e2(e1({},t),{_stackId:e.id})}),p=v[e.id]||{},f=tu(e);return n().createElement(r.Card,{key:e.id,title:n().createElement(r.Space,null,n().createElement(a.CloudServerOutlined,null),n().createElement("span",null,e.name),n().createElement(r.Tag,null,e.adapter),n().createElement(r.Tooltip,{title:f},n().createElement(r.Tag,{color:"*"===f?"orange":"geekblue"},f.length<=46?f:"".concat(f.slice(0,43),"...")))),extra:n().createElement(r.Space,null,n().createElement(e8,{type:"secondary",style:{fontSize:12}},e.image),n().createElement(r.Tooltip,{title:o("Edit worker stack")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.EditOutlined,null),onClick:function(){return ea(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(e8,null,o("Replicas"),":"),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ShrinkOutlined,null),disabled:u||0>=(w[e.id]||0),onClick:function(){return S(function(t){return e2(e1({},t),e0({},e.id,Math.max(0,(t[e.id]||0)-1)))})}}),n().createElement(r.InputNumber,{min:0,max:20,value:null!=(t=w[e.id])?t:e.desiredReplicas,onChange:function(t){return S(function(n){return e2(e1({},n),e0({},e.id,null!=t?t:0))})},style:{width:70}}),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ExpandAltOutlined,null),disabled:u||(w[e.id]||0)>=20,onClick:function(){return S(function(t){return e2(e1({},t),e0({},e.id,Math.min(20,(t[e.id]||0)+1)))})}}),n().createElement(r.Button,{type:"primary",loading:u,onClick:function(){var t;return t=e.id,eZ(function(){var e,n,a,l,o,c,u,d,m;return e5(this,function(p){switch(p.label){case 0:if(void 0===(e=w[t]))return[2];s(!0),p.label=1;case 1:return p.trys.push([1,5,6,7]),[4,i.request({url:"/workerOrchestrator:scale",method:"POST",data:{stackId:t,replicas:e}})];case 2:return l=(null==(n=(a=p.sent()).data)?void 0:n.data)||a.data,r.message.success("Scaled: ".concat(l.previousReplicas," → ").concat(l.currentReplicas," replicas")),[4,en(t)];case 3:return p.sent(),[4,et()];case 4:return p.sent(),[3,7];case 5:return o=p.sent(),r.message.error((null==(m=o.response)||null==(d=m.data)||null==(u=d.errors)||null==(c=u[0])?void 0:c.message)||o.message),[3,7];case 6:return s(!1),[7];case 7:return[2]}})})()},disabled:(null!=(l=w[e.id])?l:e.desiredReplicas)===p.running},o("Scale")),n().createElement(e8,{type:"secondary"},null!=(c=p.running)?c:"?"," / ",null!=(d=w[e.id])?d:e.desiredReplicas," ",o("running")),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return en(e.id)}})),n().createElement(r.Table,{dataSource:m,columns:ei,rowKey:"id",size:"small",pagination:!1,locale:{emptyText:o("No containers")}}))})):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:o("Orchestrator Not Connected"),description:o("Please configure the adapter settings and ensure the container runtime is accessible."),style:{marginBottom:16},action:n().createElement(r.Button,{size:"small",type:"primary",onClick:function(){return D(!0)}},o("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(o("Logs"),": ").concat(C.containerId),open:C.visible,onCancel:function(){return x({visible:!1,containerId:"",logs:[]})},footer:null,width:900},n().createElement("pre",{style:{maxHeight:500,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",padding:12,borderRadius:6,fontSize:11,lineHeight:1.6,fontFamily:"Consolas, Monaco, monospace"}},C.logs.length>0?C.logs.join("\n"):o("No logs available"))),n().createElement(r.Modal,{title:"".concat(o("Package Logs"),": ").concat(I.containerName),open:I.visible,onCancel:function(){return P({visible:!1,containerName:"",logs:""})},footer:null,width:900},n().createElement("pre",{style:{maxHeight:500,overflow:"auto",background:"#1e1e1e",color:"#d4d4d4",padding:12,borderRadius:6,fontSize:11,lineHeight:1.6,fontFamily:"Consolas, Monaco, monospace",whiteSpace:"pre-wrap"}},I.logs||o("No logs available"))),n().createElement(r.Modal,{title:F.stack?o("Edit worker stack"):o("New worker stack"),open:F.visible,onCancel:el,onOk:function(){return L.submit()},okText:o("Save"),confirmLoading:u,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:L,layout:"vertical",onFinish:function(e){return eZ(function(){var t,n,a,l,c,u,d;return e5(this,function(m){switch(m.label){case 0:s(!0),m.label=1;case 1:if(m.trys.push([1,7,8,9]),n=function(e){var t=G(e.workerMode);if(!t)throw Error("Select at least one process or queue");if(t.split(",").includes("!"))throw Error('Container worker stacks cannot include app process "!"');var n=ti(e.envVars,{},"Environment variables");return n.APP_ROLE=n.APP_ROLE||"worker",n.WORKER_MODE=t,void 0===n.SKILL_HUB_SANDBOX&&(n.SKILL_HUB_SANDBOX="false"),e2(e1({},e),{workerMode:t,envVars:n,resourceLimits:ti(e.resourceLimits,{},"Resource limits"),k8sEnv:ti(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:ti(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:ti(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:ti(e.k8sVolumes,[],"Kubernetes volumes"),desiredReplicas:Number(e.desiredReplicas||0),replicas:Number(e.replicas||0)})}(e),!(null==(t=F.stack)?void 0:t.id))return[3,3];return[4,i.request({url:"/orchestratorStacks:update",method:"put",params:{filterByTk:F.stack.id},data:n})];case 2:return m.sent(),r.message.success(o("Worker stack updated")),[3,5];case 3:return[4,i.request({url:"/orchestratorStacks:create",method:"post",data:n})];case 4:m.sent(),r.message.success(o("Worker stack created")),m.label=5;case 5:return el(),[4,et()];case 6:return m.sent(),[3,9];case 7:return a=m.sent(),r.message.error((null==a||null==(d=a.response)||null==(u=d.data)||null==(c=u.errors)||null==(l=c[0])?void 0:l.message)||a.message||o("Failed to save worker stack")),[3,9];case 8:return s(!1),[7];case 9:return[2]}})})()}},n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"name",label:o("Stack name"),rules:[{required:!0,message:o("Stack name is required")},{pattern:/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/,message:o("Use a lowercase Kubernetes-safe name")}]},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"image",label:o("Image"),rules:[{required:!0}]},n().createElement(r.Input,{placeholder:"nocobase/nocobase:2.0.46-full"})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"adapter",label:o("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"kubernetes"},o("Kubernetes")),n().createElement(r.Select.Option,{value:"docker"},o("Docker"))))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"desiredReplicas",label:o("Desired replicas"),rules:[{required:!0}]},n().createElement(r.InputNumber,{min:0,max:20,style:{width:"100%"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"enabled",label:o("Enabled"),valuePropName:"checked"},n().createElement(r.Switch,null)))),n().createElement(r.Form.Item,{name:"workerMode",label:o("Processes / queues"),extra:o("Saved as WORKER_MODE. Use tags for custom process keys that are not discovered yet."),rules:[{validator:function(e,t){return G(t)?Promise.resolve():Promise.reject(Error(o("Select at least one process or queue")))}}]},n().createElement(r.Select,{mode:"tags",loading:$,options:ec,placeholder:e7,tokenSeparators:[","],showSearch:!0})),n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.workerMode!==t.workerMode}},function(){return(G(L.getFieldValue("workerMode"))||"").includes("*")?n().createElement(r.Alert,{type:"warning",showIcon:!0,style:{marginBottom:16},message:o("WORKER_MODE=* makes this stack consume every queue. Prefer explicit queues in HA.")}):null}),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"deploymentName",label:o("Deployment name")},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"serviceAccountName",label:o("Service account")},n().createElement(r.Input,{placeholder:"nocobase-orchestrator"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"imagePullPolicy",label:o("Image pull policy")},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"IfNotPresent"},"IfNotPresent"),n().createElement(r.Select.Option,{value:"Always"},"Always"),n().createElement(r.Select.Option,{value:"Never"},"Never"))))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"k8sContainerName",label:o("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"namespace",label:o("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapter!==t.adapter}},function(){return"docker"===L.getFieldValue("adapter")?n().createElement(r.Form.Item,{name:"networkMode",label:o("Docker Network"),extra:o("Main network. Workers also inherit app networks.")},n().createElement(r.Select,{allowClear:!0,placeholder:o("Default (bridge)")},n().createElement(r.Select.Option,{value:"bridge"},"bridge"),n().createElement(r.Select.Option,{value:"host"},"host"),(Array.isArray(U)?U:[]).map(function(e){return n().createElement(r.Select.Option,{key:e.id,value:e.name},e.name)}))):null}))),n().createElement(r.Form.Item,{name:"command",label:o("Command")},n().createElement(r.Input.TextArea,{rows:10})),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"envVars",label:o("Environment variables JSON"),extra:o("WORKER_MODE is managed by Processes / queues above.")},n().createElement(r.Input.TextArea,{rows:8}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"resourceLimits",label:o("Resource limits JSON")},n().createElement(r.Input.TextArea,{rows:8})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnvFrom",label:o("Kubernetes envFrom JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnv",label:o("Kubernetes env JSON")},n().createElement(r.Input.TextArea,{rows:7})))),n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumeMounts",label:o("Kubernetes volumeMounts JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumes",label:o("Kubernetes volumes JSON")},n().createElement(r.Input.TextArea,{rows:7})))))),n().createElement(r.Modal,{title:o("Orchestrator Settings"),open:M,onCancel:function(){return D(!1)},footer:null,width:600},n().createElement(r.Form,{form:q,layout:"vertical",onFinish:function(e){return eZ(function(){var t;return e5(this,function(n){switch(n.label){case 0:s(!0),n.label=1;case 1:return n.trys.push([1,5,6,7]),[4,i.request({url:"/workerOrchestrator:saveSettings",method:"POST",data:e})];case 2:return n.sent(),r.message.success(o("Settings saved successfully. Reconnecting...")),D(!1),[4,ee()];case 3:return n.sent(),[4,et()];case 4:return n.sent(),[3,7];case 5:return t=n.sent(),r.message.error("Failed to save settings: ".concat(t.message)),[3,7];case 6:return s(!1),[7];case 7:return[2]}})})()},initialValues:{adapterType:"none",k8sNamespace:"nocobase",workerLabelSelector:"role=worker"}},n().createElement(r.Form.Item,{name:"adapterType",label:o("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"none"},o("Disabled")),n().createElement(r.Select.Option,{value:"docker"},o("Docker")),n().createElement(r.Select.Option,{value:"kubernetes"},o("Kubernetes")))),n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapterType!==t.adapterType}},function(){var e=q.getFieldValue("adapterType");return"docker"===e?n().createElement(r.Card,{size:"small",title:o("Docker Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"dockerSocketPath",label:o("Socket Path"),extra:"/var/run/docker.sock"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"dockerHost",label:o("TCP Host"),extra:"e.g. tcp://192.168.1.10:2376 (Overrides socket)"},n().createElement(r.Input,null))):"kubernetes"===e?n().createElement(r.Card,{size:"small",title:o("Kubernetes Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"k8sNamespace",label:o("Namespace"),extra:"nocobase"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"k8sKubeconfig",label:o("Kubeconfig"),extra:"Paste kubeconfig YAML or enter a file path. Leave empty to use in-cluster ServiceAccount."},n().createElement(r.Input.TextArea,{rows:4}))):null}),n().createElement(r.Form.Item,{name:"workerLabelSelector",label:o("Worker Label Selector"),extra:"Only containers with this label will be managed. Example: role=worker"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{style:{marginBottom:0}},n().createElement(r.Button,{type:"primary",htmlType:"submit",icon:n().createElement(a.SaveOutlined,null),loading:u,block:!0},o("Save Settings & Reconnect")))))):n().createElement(r.Spin,{tip:o("Connecting to orchestrator..."),style:{display:"flex",justifyContent:"center",padding:48}})}var td=["python3","python3-pip","python3-venv"],tm=["python-docx","openpyxl","pandas","matplotlib","Pillow","reportlab","jinja2","pyyaml","tabulate","xlsxwriter"],tp=["xlsx","docx","pdfkit","csv-parse","archiver","sharp","lodash","dayjs"];function tf(e){return Array.isArray(e)?Array.from(new Set(e.filter(function(e){return"string"==typeof e}).map(function(e){return e.trim()}).filter(Boolean))):[]}function ty(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Array.isArray(e)?tf(e):"string"!=typeof e?tf(t):tf(e.split(/[\n,]/).map(function(e){return e.trim()}).filter(Boolean))}function tg(e){return tf(e).join("\n")}function th(e){return{apt:ty(e.aptPackages,td),python:ty(e.pythonPackages,tm),npm:ty(e.npmPackages,tp)}}function tv(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tb(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tE(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tb(l,r,a,o,i,"next",e)}function i(e){tb(l,r,a,o,i,"throw",e)}o(void 0)})}}function tw(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tv(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tS(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var tk=r.Typography.Text,tC={pending:{color:"default",text:"Not initialized"},running:{color:"processing",text:"Running..."},succeeded:{color:"success",text:"Succeeded"},failed:{color:"error",text:"Failed"}};function tx(e,t){return e.length?e.map(function(e){return n().createElement(r.Tag,{key:e,color:t,style:{marginBottom:2}},e)}):n().createElement(tk,{type:"secondary"},"-")}var tO=function(){var e,o,i,c,u,s,d=T(),m=(0,l.useApp)().apiClient,p=tw(r.Form.useForm(),1)[0],f=tw((0,t.useState)(!1),2),y=f[0],g=f[1],h=tw((0,t.useState)(!1),2),v=h[0],b=h[1],E=tw((0,t.useState)(!1),2),w=E[0],S=E[1],k=tw((0,t.useState)(null),2),C=k[0],x=k[1],O=tw((0,t.useState)(null),2),I=O[0],P=O[1],A=tw((0,t.useState)("all"),2),R=A[0],j=A[1],z=r.Form.useWatch("aptPackages",p),M=r.Form.useWatch("pythonPackages",p),D=r.Form.useWatch("npmPackages",p),N=(0,t.useRef)(!1),F=(0,t.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return tE(function(){var t,n,r,a;return tS(this,function(l){switch(l.label){case 0:if(N.current)return[2];N.current=!0,e||g(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,m.request({url:"workerPackages:getPackageConfig"})];case 2:if(r=(null==(n=l.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data))try{r.packageWhitelist="string"==typeof r.packageWhitelist?JSON.parse(r.packageWhitelist):r.packageWhitelist}catch(e){r.packageWhitelist={python:[],node:[],apt:[]}}return x(r),r&&(p.setFieldsValue({npmRegistryUrl:r.npmRegistryUrl,npmAuthToken:r.npmAuthToken,pypiIndexUrl:r.pypiIndexUrl,pypiTrustedHost:r.pypiTrustedHost,aptMirrorUrl:r.aptMirrorUrl,aptGpgKeyUrl:r.aptGpgKeyUrl,aptPackages:ty(r.aptPackages,td),pythonPackages:ty(r.pythonPackages,tm),npmPackages:ty(r.npmPackages,tp),retentionHours:null!=(a=r.retentionHours)?a:24}),"running"===r.initStatus?(S(!0),P({percent:r.initProgressPercent||0,log:r.initProgressLog||d("Processing...")})):(S(!1),P(null))),[3,5];case 3:return l.sent(),[3,5];case 4:return e||g(!1),N.current=!1,[7];case 5:return[2]}})})()},[m,p,d]);(0,t.useEffect)(function(){F()},[F]),(0,t.useEffect)(function(){var e=setInterval(function(){return F(!0)},1e4);return function(){return clearInterval(e)}},[F]);var B=function(e){return tE(function(){var t;return tS(this,function(n){switch(n.label){case 0:var r,a;if(r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),a=a={aptPackages:tg(e.aptPackages),pythonPackages:tg(e.pythonPackages),npmPackages:tg(e.npmPackages)},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(a)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(a,e))}),t=r,!(null==C?void 0:C.id))return[3,2];return[4,m.request({url:"workerPackages:savePackageConfig",method:"post",params:{filterByTk:C.id},data:t})];case 1:return n.sent(),[3,4];case 2:return[4,m.request({url:"workerPackages:savePackageConfig",method:"post",data:t})];case 3:n.sent(),n.label=4;case 4:return[2]}})})()},q=tC[null==C?void 0:C.initStatus]||tC.pending,L=(null==C?void 0:C.packageWhitelist)||{},_=(null==L||null==(e=L.python)?void 0:e.length)>0||(null==L||null==(o=L.node)?void 0:o.length)>0||(null==L||null==(i=L.apt)?void 0:i.length)>0,U=th({aptPackages:null!=z?z:td,pythonPackages:null!=M?M:tm,npmPackages:null!=D?D:tp});return n().createElement("div",{style:{padding:16,maxWidth:920}},n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.CloudServerOutlined,null),n().createElement("span",null,d("Cluster Package Installer"))),size:"small",style:{marginBottom:16},extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),size:"small",onClick:function(){return F(!1)},loading:y},d("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement("div",null,n().createElement(tk,{strong:!0},d("Status"),": "),n().createElement(r.Tag,{color:q.color},d(q.text)),(null==C?void 0:C.lastInitAt)&&n().createElement(tk,{type:"secondary",style:{fontSize:12}},"(",new Date(C.lastInitAt).toLocaleString(),")")),n().createElement("div",null,n().createElement(tk,{strong:!0,style:{marginRight:8}},d("Target"),": "),n().createElement(r.Select,{value:R,onChange:j,style:{width:240},options:[{label:d("All app and worker nodes"),value:"all"},{label:d("App nodes only"),value:"app"},{label:d("Worker nodes only"),value:"worker"}]})),n().createElement(r.Alert,{type:"info",showIcon:!0,message:d("Each target node checks whether a package/module is already installed before installing it.")}),n().createElement(r.Space,null,n().createElement(r.Button,{type:"primary",icon:w?n().createElement(a.ReloadOutlined,{spin:!0}):n().createElement(a.CloudServerOutlined,null),onClick:function(){return tE(function(){var e,t;return tS(this,function(n){switch(n.label){case 0:S(!0),P({percent:0,log:d("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,B(e=p.getFieldsValue())];case 2:return n.sent(),[4,m.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:R,packages:th(e||{}),registryConfig:{aptMirrorUrl:e.aptMirrorUrl,npmRegistryUrl:e.npmRegistryUrl,pypiIndexUrl:e.pypiIndexUrl,pypiTrustedHost:e.pypiTrustedHost}}})];case 3:return n.sent(),r.message.info(d("Install task dispatched")),[4,F()];case 4:return n.sent(),[3,6];case 5:return t=n.sent(),r.message.error((null==t?void 0:t.message)||d("Failed to install packages/modules")),S(!1),P(null),[3,6];case 6:return[2]}})})()},size:"large"},w?d("Installing... (Click to Force Run)"):d("Install packages/modules")),w&&n().createElement(r.Button,{danger:!0,onClick:function(){return tE(function(){return tS(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,m.request({url:"workerPackages:resetInitStatus",method:"post"})];case 1:return e.sent(),r.message.success(d("Install status reset to stopped")),[4,F()];case 2:return e.sent(),[3,4];case 3:return e.sent(),r.message.error(d("Failed to stop installation")),[3,4];case 4:return[2]}})})()},size:"large"},d("Stop / Reset Status"))),w&&I&&n().createElement("div",null,n().createElement(r.Progress,{percent:I.percent,status:"active"}),n().createElement(tk,{type:"secondary"},I.log)),(null==C?void 0:C.lastInitLog)&&"running"!==C.initStatus&&n().createElement("div",null,n().createElement(tk,{strong:!0},d("Last Install Log"),":"),n().createElement("pre",{style:{background:"#f5f5f5",padding:8,borderRadius:4,fontSize:11,maxHeight:220,overflow:"auto",whiteSpace:"pre-wrap",marginTop:4}},C.lastInitLog)))),n().createElement(r.Card,{title:d("Package/module settings"),size:"small",style:{marginBottom:16}},n().createElement(r.Form,{form:p,layout:"vertical"},n().createElement(r.Form.Item,{name:"aptPackages",label:d("OS packages (APT)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"python3, python3-pip",tokenSeparators:[",","\n"," "]})),n().createElement(r.Form.Item,{name:"pythonPackages",label:d("Python modules (pip)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"python-docx, openpyxl",tokenSeparators:[",","\n"," "]})),n().createElement(r.Form.Item,{name:"npmPackages",label:d("Node modules (npm global)")},n().createElement(r.Select,{mode:"tags",style:{width:"100%"},placeholder:"xlsx, docx",tokenSeparators:[",","\n"," "]})),n().createElement(r.Divider,{style:{margin:"8px 0 16px"}}),n().createElement(r.Form.Item,{name:"aptMirrorUrl",label:d("APT mirror URL")},n().createElement(r.Input,{placeholder:"https://deb.debian.org/debian"})),n().createElement(r.Form.Item,{name:"npmRegistryUrl",label:d("NPM registry URL")},n().createElement(r.Input,{placeholder:"https://registry.npmjs.org/"})),n().createElement(r.Form.Item,{name:"pypiIndexUrl",label:d("PyPI index URL")},n().createElement(r.Input,{placeholder:"https://pypi.org/simple"})),n().createElement(r.Button,{type:"primary",onClick:function(){return tE(function(){return tS(this,function(e){switch(e.label){case 0:b(!0),e.label=1;case 1:return e.trys.push([1,4,5,6]),[4,B(p.getFieldsValue())];case 2:return e.sent(),r.message.success(d("Config saved")),[4,F()];case 3:return e.sent(),[3,6];case 4:return e.sent(),r.message.error(d("Failed to save config")),[3,6];case 5:return b(!1),[7];case 6:return[2]}})})()},loading:v},d("Save settings"))),n().createElement(r.Divider,{style:{margin:"16px 0"}}),n().createElement(tk,{strong:!0},d("Install plan"),":"),n().createElement("div",{style:{marginTop:8}},n().createElement(tk,{type:"secondary"},"APT: "),tx(U.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(tk,{type:"secondary"},"Python: "),tx(U.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(tk,{type:"secondary"},"Node: "),tx(U.npm||[],"green"))),n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.SafetyOutlined,null),n().createElement("span",null,d("Installed package/module whitelist"))),size:"small"},_?n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},(null==L||null==(c=L.apt)?void 0:c.length)>0&&n().createElement("div",null,n().createElement(tk,{strong:!0},"APT: "),tx(L.apt)),(null==L||null==(u=L.python)?void 0:u.length)>0&&n().createElement("div",null,n().createElement(tk,{strong:!0},"Python: "),tx(L.python,"blue")),(null==L||null==(s=L.node)?void 0:s.length)>0&&n().createElement("div",null,n().createElement(tk,{strong:!0},"Node: "),tx(L.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:d("No successful install has generated a whitelist yet.")})))};function tI(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tP(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tA(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tP(l,r,a,o,i,"next",e)}function i(e){tP(l,r,a,o,i,"throw",e)}o(void 0)})}}function tT(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tI(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tI(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tR(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function tj(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function tz(){var e=T(),o=(0,l.useApp)().apiClient,i=tT((0,t.useState)(!1),2),c=i[0],u=i[1],s=tT((0,t.useState)(null),2),d=s[0],m=s[1],p=tT((0,t.useState)(""),2),f=p[0],y=p[1],g=tT((0,t.useState)([]),2),h=g[0],v=g[1],b=(0,t.useCallback)(function(){return tA(function(){var t,n,a,l,i;return tR(this,function(c){switch(c.label){case 0:u(!0),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,o.request({url:"clusterManagerPlugins:list"})];case 2:return v(Array.isArray(null==(l=c.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)?l.data.data.data:Array.isArray(null==l||null==(a=l.data)?void 0:a.data)?l.data.data:Array.isArray(null==l?void 0:l.data)?l.data:[]),[3,5];case 3:return i=c.sent(),r.message.error(tj(i,e("Failed to load plugins"))),[3,5];case 4:return u(!1),[7];case 5:return[2]}})})()},[o,e]);(0,t.useEffect)(function(){b()},[b]);var E=(0,t.useMemo)(function(){var e=f.trim().toLowerCase(),t=Array.isArray(h)?h:[];return e?t.filter(function(t){return[t.name,t.packageName,t.displayName,t.description].filter(Boolean).some(function(t){return String(t).toLowerCase().includes(e)})}):t},[h,f]),w=[{title:e("Plugin"),dataIndex:"displayName",key:"displayName",render:function(e,t){return n().createElement(r.Space,{direction:"vertical",size:0},n().createElement(r.Typography.Text,{strong:!0},t.displayName||t.name),n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},t.packageName||t.name))}},{title:e("Name"),dataIndex:"name",key:"name",width:220,render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:e("Status"),key:"status",width:260,render:function(t,a){return n().createElement(r.Space,{wrap:!0,size:[4,4]},n().createElement(r.Tag,{color:a.enabled?"green":"default"},a.enabled?e("Enabled"):e("Disabled")),n().createElement(r.Tag,{color:a.installed?"blue":"default"},a.installed?e("Installed"):e("Not installed")),n().createElement(r.Tag,{color:a.loaded?"processing":"default"},a.loaded?e("Loaded"):e("Not loaded")),a.protected&&n().createElement(r.Tag,{color:"red"},e("Protected")))}},{title:e("Version"),dataIndex:"version",key:"version",width:120,render:function(e){return e||"-"}},{title:e("Description"),dataIndex:"description",key:"description",ellipsis:!0,render:function(e){return e||"-"}},{title:e("Actions"),key:"actions",width:250,render:function(t,l){return n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:e("Force disable this plugin?"),description:e("This updates the plugin registry directly. Restart or reload is required to fully unload runtime hooks."),disabled:l.protected||!l.enabled,onConfirm:function(){return tA(function(){var t,n,a,i,c;return tR(this,function(u){switch(u.label){case 0:m("".concat(l.name,":disable")),u.label=1;case 1:return u.trys.push([1,4,5,6]),[4,o.request({url:"clusterManagerPlugins:forceDisable",method:"post",data:{name:l.name}})];case 2:return i=u.sent(),r.message.success((null==i||null==(n=i.data)||null==(t=n.data)?void 0:t.message)||(null==i||null==(a=i.data)?void 0:a.message)||e("Plugin force disabled")),[4,b()];case 3:return u.sent(),[3,6];case 4:return c=u.sent(),r.message.error(tj(c,e("Failed to force disable plugin"))),[3,6];case 5:return m(null),[7];case 6:return[2]}})})()},okText:e("Force disable"),cancelText:e("Cancel")},n().createElement(r.Button,{size:"small",icon:n().createElement(a.StopOutlined,null),disabled:l.protected||!l.enabled,loading:d==="".concat(l.name,":disable")},e("Force disable"))),n().createElement(r.Popconfirm,{title:e("Force remove this plugin?"),description:e("This removes the plugin registry record. Package files are not deleted. Restart or reload is required."),disabled:l.protected,onConfirm:function(){return tA(function(){var t,n,a,i,c;return tR(this,function(u){switch(u.label){case 0:m("".concat(l.name,":remove")),u.label=1;case 1:return u.trys.push([1,4,5,6]),[4,o.request({url:"clusterManagerPlugins:forceRemove",method:"post",data:{name:l.name}})];case 2:return i=u.sent(),r.message.success((null==i||null==(n=i.data)||null==(t=n.data)?void 0:t.message)||(null==i||null==(a=i.data)?void 0:a.message)||e("Plugin force removed")),[4,b()];case 3:return u.sent(),[3,6];case 4:return c=u.sent(),r.message.error(tj(c,e("Failed to force remove plugin"))),[3,6];case 5:return m(null),[7];case 6:return[2]}})})()},okText:e("Force remove"),cancelText:e("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.DeleteOutlined,null),disabled:l.protected,loading:d==="".concat(l.name,":remove")},e("Force remove"))))}}];return n().createElement(r.Spin,{spinning:c},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:"warning",showIcon:!0,icon:n().createElement(a.ExclamationCircleOutlined,null),message:e("Force operations bypass plugin lifecycle hooks"),description:e("Use this only when the normal plugin manager cannot disable or remove a broken plugin. Restart or reload the app after a successful operation.")}),n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:b},e("Refresh")),n().createElement(r.Input.Search,{allowClear:!0,placeholder:e("Search plugins"),value:f,onChange:function(e){return y(e.target.value)},style:{width:320}})),n().createElement(r.Table,{rowKey:"name",size:"small",dataSource:E,columns:w,pagination:{pageSize:20},scroll:{x:1100}})))}function tM(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tD(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tN(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tD(l,r,a,o,i,"next",e)}function i(e){tD(l,r,a,o,i,"throw",e)}o(void 0)})}}function tF(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tM(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tM(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tB(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var tq=r.Typography.Text;function tL(e){var t;return(null==e?void 0:e.data)&&"object"==((t=e.data)&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t)&&"data"in e.data?e.data.data:null==e?void 0:e.data}function t_(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function tU(e){var t=Math.max(0,Math.ceil(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?"".concat(n,"m ").concat(r,"s"):"".concat(r,"s")}function tK(){var e,o,i,c,u=T(),s=(0,l.useApp)().apiClient,d=tF((0,t.useState)(!1),2),m=d[0],p=d[1],f=tF((0,t.useState)(!1),2),y=f[0],g=f[1],h=tF((0,t.useState)(!1),2),v=h[0],b=h[1],E=tF((0,t.useState)(12e4),2),w=E[0],S=E[1],k=tF((0,t.useState)(null),2),C=k[0],x=k[1],O=tF((0,t.useState)(null),2),I=O[0],P=O[1],A=tF((0,t.useState)(null),2),R=A[0],j=A[1],z=tF((0,t.useState)(Date.now()),2),M=z[0],D=z[1],N=!!C||(null==I?void 0:I.status)==="running",F=(null==C?void 0:C.runId)||(null==I?void 0:I.runId),B=(null==R?void 0:R.summary)||(null==I?void 0:I.summary),q=(null==C?void 0:C.deadlineAt)||(null==I?void 0:I.deadlineAt),L=q?Math.max(0,Date.parse(q)-M):0,_=(0,t.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return tN(function(){var t,n,a,l,o;return tB(this,function(i){switch(i.label){case 0:e||p(!0),i.label=1;case 1:return i.trys.push([1,6,7,8]),[4,s.request({url:"clusterManagerDoctor:status"})];case 2:if(x((null==(l=tL(i.sent()))?void 0:l.activeRun)||null),P((null==l?void 0:l.run)||null),!(null==l||null==(t=l.run)?void 0:t.report))return[3,3];return j(l.run.report),[3,5];case 3:if(!(!(null==l?void 0:l.activeRun)&&(null==l||null==(n=l.run)?void 0:n.hasReport)&&(null==l||null==(a=l.run)?void 0:a.runId)))return[3,5];return[4,s.request({url:"clusterManagerDoctor:report",params:{runId:l.run.runId}})];case 4:j((null==(o=tL(i.sent()))?void 0:o.report)||null),i.label=5;case 5:return[3,8];case 6:return i.sent(),r.message.error(u("Failed to load diagnostic status")),[3,8];case 7:return e||p(!1),[7];case 8:return[2]}})})()},[s,u]);(0,t.useEffect)(function(){_()},[_]),(0,t.useEffect)(function(){if(N){var e=setInterval(function(){D(Date.now()),_(!0)},3e3);return function(){return clearInterval(e)}}},[N,_]),(0,t.useEffect)(function(){if(N){var e=setInterval(function(){return D(Date.now())},1e3);return function(){return clearInterval(e)}}},[N]);var U=(null==R||null==(o=R.logAnalysis)?void 0:o.topSignatures)||[],K=(null==R||null==(i=R.logAnalysis)?void 0:i.byNode)||[],W=(0,t.useMemo)(function(){var e;return((null==R||null==(e=R.pluginDiagnostics)?void 0:e.plugins)||[]).filter(function(e){return e.versionDrift||e.loadDrift})},[R]),V=(null==R||null==(c=R.packageDiagnostics)?void 0:c.packageDrifts)||[],H=(null==R?void 0:R.recommendations)||[],Q=[{title:u("Level"),dataIndex:"level",width:90,render:function(e){return n().createElement(r.Tag,{color:"error"===e?"red":"orange"},e)}},{title:u("Count"),dataIndex:"count",width:90},{title:u("Signature"),dataIndex:"signature",render:function(e){return n().createElement(tq,{ellipsis:{tooltip:e}},e)}},{title:u("Nodes"),dataIndex:"nodes",width:220,render:function(e){return(e||[]).slice(0,3).join(", ")}}],G=[{title:u("Node"),dataIndex:"hostname"},{title:u("Role"),dataIndex:"role",width:110},{title:u("Errors"),dataIndex:"levels",width:100,render:function(e){return(null==e?void 0:e.error)||0}},{title:u("Warnings"),dataIndex:"levels",width:110,render:function(e){return(null==e?void 0:e.warn)||0}},{title:u("Log Files"),dataIndex:"files",render:function(e){return(null==e?void 0:e.length)?e.map(function(e){return"".concat(e.file," (").concat(e.lineCount,")")}).join(", "):"-"}}];return n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Card,{size:"small",title:n().createElement(r.Space,null,n().createElement(a.MedicineBoxOutlined,null),u("Doctor")),extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return _(!1)},loading:m,"aria-label":u("Refresh")},u("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement(r.Space,{wrap:!0},n().createElement(r.InputNumber,{min:10,max:120,step:10,value:Math.round(w/1e3),onChange:function(e){return S(1e3*(Number(e)||120))},addonAfter:"s",disabled:N,"aria-label":u("Duration"),style:{width:140}}),n().createElement(r.Button,{type:"primary",icon:n().createElement(a.MedicineBoxOutlined,null),onClick:function(){return tN(function(){var e;return tB(this,function(t){switch(t.label){case 0:g(!0),j(null),t.label=1;case 1:return t.trys.push([1,4,5,6]),[4,s.request({url:"clusterManagerDoctor:start",method:"post",data:{durationMs:w}})];case 2:return x(tL(t.sent())),r.message.success(u("Diagnostic session started")),[4,_(!0)];case 3:return t.sent(),[3,6];case 4:return e=t.sent(),r.message.error(t_(e,u("Failed to start diagnostic session"))),[3,6];case 5:return g(!1),[7];case 6:return[2]}})})()},loading:y,disabled:N},u("Start Doctor")),n().createElement(r.Button,{danger:!0,icon:n().createElement(a.StopOutlined,null),onClick:function(){return tN(function(){var e,t;return tB(this,function(n){switch(n.label){case 0:if(!F)return[2];b(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerDoctor:stop",method:"post",data:{runId:F}})];case 2:return e=tL(n.sent()),x(null),P(e||null),j((null==e?void 0:e.report)||null),r.message.success(u("Diagnostic report is ready")),[3,5];case 3:return t=n.sent(),r.message.error(t_(t,u("Failed to stop diagnostic session"))),[3,5];case 4:return b(!1),[7];case 5:return[2]}})})()},loading:v,disabled:!N},u("Stop Doctor")),n().createElement(r.Button,{icon:n().createElement(a.DownloadOutlined,null),onClick:function(){return tN(function(){var e,t,n,a;return tB(this,function(l){switch(l.label){case 0:if(!(e=(null==R?void 0:R.runId)||(null==I?void 0:I.runId)))return[2];l.label=1;case 1:return l.trys.push([1,3,,4]),[4,s.request({url:"clusterManagerDoctor:download",params:{runId:e},responseType:"blob"})];case 2:return t=l.sent(),n=window.URL.createObjectURL(new Blob([t.data],{type:"application/json"})),(a=document.createElement("a")).href=n,a.download="doctor-report-".concat(e,".json"),a.click(),a.remove(),window.URL.revokeObjectURL(n),[3,4];case 3:return l.sent(),r.message.error(u("Failed to download diagnostic report")),[3,4];case 4:return[2]}})})()},disabled:!(null==R?void 0:R.runId)&&!(null==I?void 0:I.hasReport),"aria-label":u("Download Report")},u("Download Report"))),N&&n().createElement("div",null,n().createElement(r.Progress,{percent:(null==I?void 0:I.progress)||5,status:"active"}),n().createElement(tq,{type:"secondary"},u("Running")," - ",tU(L))),(null==I?void 0:I.error)&&n().createElement(r.Alert,{type:"error",showIcon:!0,message:I.error}),I&&n().createElement(r.Descriptions,{size:"small",column:3},n().createElement(r.Descriptions.Item,{label:u("Run ID")},I.runId),n().createElement(r.Descriptions.Item,{label:u("Status")},n().createElement(r.Tag,{color:"healthy"===(e=I.status)||"finished"===e?"green":"critical"===e||"failed"===e?"red":"running"===e?"processing":"orange"},u(I.status))),n().createElement(r.Descriptions.Item,{label:u("Started At")},I.startedAt?new Date(I.startedAt).toLocaleString():"-"),n().createElement(r.Descriptions.Item,{label:u("Finished At")},I.finishedAt?new Date(I.finishedAt).toLocaleString():"-"),n().createElement(r.Descriptions.Item,{label:u("Finish Reason")},I.finishReason||"-"),n().createElement(r.Descriptions.Item,{label:u("Duration")},tU((null==R?void 0:R.durationMs)||I.durationMs))))),B&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Report Status"),value:u(B.status),valueStyle:{color:"critical"===B.status?"#cf1322":"warning"===B.status?"#d48806":"#3f8600"}}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Nodes"),value:B.nodes}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Errors"),value:B.errors,valueStyle:{color:B.errors?"#cf1322":void 0}}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Warnings"),value:B.warnings}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Plugin Drift"),value:B.pluginVersionDrifts+B.pluginLoadDrifts}))),n().createElement(r.Col,{span:4},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Package Drift"),value:B.packageDrifts})))),H.length>0&&n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.WarningOutlined,null),u("Findings")),size:"small"},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},H.map(function(e){return n().createElement(r.Alert,{key:e.code,type:"critical"===e.level?"error":"warning",showIcon:!0,message:e.message})}))),R&&n().createElement(n().Fragment,null,n().createElement(r.Card,{title:u("Node Log Distribution"),size:"small"},n().createElement(r.Table,{rowKey:"nodeId",size:"small",pagination:{pageSize:5},dataSource:K,columns:G})),n().createElement(r.Card,{title:u("Top Error Signatures"),size:"small"},n().createElement(r.Table,{rowKey:function(e){return"".concat(e.level,":").concat(e.signature)},size:"small",pagination:{pageSize:5},dataSource:U,columns:Q})),n().createElement(r.Card,{title:u("Plugin Drift"),size:"small"},n().createElement(r.Table,{rowKey:function(e){return e.packageName||e.name},size:"small",pagination:{pageSize:6},dataSource:W,columns:[{title:u("Plugin"),dataIndex:"name"},{title:u("Package"),dataIndex:"packageName"},{title:u("DB Version"),dataIndex:"dbVersion",width:140},{title:u("Runtime Versions"),dataIndex:"runtimeVersions",render:function(e){return(null==e?void 0:e.join(", "))||"-"}},{title:u("Type"),key:"type",width:160,render:function(e,t){return n().createElement(r.Space,{size:4},t.versionDrift&&n().createElement(r.Tag,{color:"orange"},u("Version")),t.loadDrift&&n().createElement(r.Tag,{color:"purple"},u("Loaded")))}}]})),n().createElement(r.Card,{title:u("Package Drift"),size:"small"},n().createElement(r.Table,{rowKey:function(e,t){return e.nodeId||e.hostname||String(t)},size:"small",pagination:{pageSize:6},dataSource:V,columns:[{title:u("Node"),dataIndex:"hostname"},{title:u("Role"),dataIndex:"role",width:110},{title:u("Package Status"),dataIndex:"status",width:140},{title:u("Missing Packages"),dataIndex:"missingPackages",render:function(e){var t,n,r;return((null==e||null==(t=e.apt)?void 0:t.length)||0)+((null==e||null==(n=e.npm)?void 0:n.length)||0)+((null==e||null==(r=e.python)?void 0:r.length)||0)||"-"}}]}))))}function tW(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tV(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function tH(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){tV(l,r,a,o,i,"next",e)}function i(e){tV(l,r,a,o,i,"throw",e)}o(void 0)})}}function tQ(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return tW(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tW(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tG(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var tJ=r.Typography.Text;function t$(){var e=T(),o=(0,l.useApp)().apiClient,i=tQ((0,t.useState)(!1),2),c=i[0],u=i[1],s=tQ((0,t.useState)(!1),2),d=s[0],m=s[1],p=tQ((0,t.useState)([]),2),f=p[0],y=p[1],g=tQ((0,t.useState)([]),2),h=g[0],v=g[1],b=tQ((0,t.useState)([]),2),E=b[0],w=b[1],S=tQ((0,t.useState)([]),2),k=S[0],C=S[1],x=(0,t.useCallback)(function(){return tH(function(){var e;return tG(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return C((null==(e=t.sent().data)?void 0:e.data)||[]),[3,3];case 2:return t.sent(),[3,3];case 3:return[2]}})})()},[o]),O=(0,t.useCallback)(function(){return tH(function(){var e;return tG(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.request({url:"/workerQueueMappings:list",params:{pageSize:200}})];case 1:return v((null==(e=t.sent().data)?void 0:e.data)||[]),[3,3];case 2:return t.sent(),[3,3];case 3:return[2]}})})()},[o]),I=(0,t.useCallback)(function(){return tH(function(){var e,t,n,a;return tG(this,function(l){switch(l.label){case 0:m(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,o.request({url:"/workerQueueMappings:scanQueues"})];case 2:return y((n=(null==(e=(t=l.sent()).data)?void 0:e.data)||t.data).discovered||[]),v(n.registered||[]),w(n.unmapped||[]),[3,5];case 3:return a=l.sent(),r.message.error("Scan failed: ".concat(a.message)),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()},[o]),P=function(e,t){return tH(function(){var n;return tG(this,function(a){switch(a.label){case 0:u(!0),a.label=1;case 1:return a.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:update",method:"PUT",params:{filterByTk:e},data:t})];case 2:return a.sent(),[4,O()];case 3:return a.sent(),[3,6];case 4:return n=a.sent(),r.message.error("Update failed: ".concat(n.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()};(0,t.useEffect)(function(){I(),x()},[I,x]);var A=k.map(function(e){return{value:e.id,label:e.name}}),R=new Map(h.map(function(e){return[e.queueName,e]})),j=f.map(function(e){var t,n,r,a,l,o=R.get(e.name);return t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({key:e.name},e),n=n={mappingId:null!=(r=null==o?void 0:o.id)?r:null,registered:!!o,stackId:null!=(a=null==o?void 0:o.stackId)?a:null,enabled:null==(l=null==o?void 0:o.enabled)||l},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),z=[{title:e("Queue Name"),dataIndex:"name",render:function(e,t){return n().createElement(r.Space,null,"event-queue"===t.type?n().createElement(a.BranchesOutlined,{style:{color:"#1890ff"}}):n().createElement(a.MinusCircleOutlined,{style:{color:"#52c41a"}}),n().createElement(r.Space,{direction:"vertical",size:0},n().createElement(tJ,{code:!0},e),t.workerProcessName&&t.workerProcessName!==e?n().createElement(tJ,{type:"secondary"},t.workerProcessName):null))}},{title:e("Label"),dataIndex:"label",render:function(e){return n().createElement(tJ,null,e)}},{title:e("Type"),dataIndex:"type",width:110,render:function(e){return n().createElement(r.Tag,{color:"event-queue"===e?"blue":"green"},"event-queue"===e?"EventQueue":"Redis List")}},{title:e("Pending"),dataIndex:"pending",width:80,render:function(e){return null!==e?n().createElement(tJ,null,e):n().createElement(tJ,{type:"secondary"},"-")}},{title:e("Assigned Stack"),dataIndex:"stackId",width:160,render:function(t,a){return a.registered?n().createElement(r.Select,{style:{width:150},size:"small",allowClear:!0,placeholder:e("All (default)"),value:t,options:A,onChange:function(e){return P(a.mappingId,{stackId:null!=e?e:null})}}):n().createElement(tJ,{type:"secondary"},"—")}},{title:e("Enabled"),dataIndex:"enabled",width:80,render:function(e,t){return t.registered?n().createElement(r.Switch,{size:"small",checked:e,onChange:function(e){return P(t.mappingId,{enabled:e})}}):n().createElement(tJ,{type:"secondary"},"—")}},{title:e("Actions"),key:"actions",width:200,render:function(t,l){return l.registered?n().createElement(r.Popconfirm,{title:e("Delete this mapping?"),onConfirm:function(){var e;return e=l.mappingId,tH(function(){var t;return tG(this,function(n){switch(n.label){case 0:u(!0),n.label=1;case 1:return n.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:destroy",method:"POST",params:{filterByTk:e}})];case 2:return n.sent(),r.message.success("Mapping deleted"),[4,I()];case 3:return n.sent(),[3,6];case 4:return t=n.sent(),r.message.error("Delete failed: ".concat(t.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()}},n().createElement(r.Button,{size:"small",type:"link",danger:!0},e("Unregister"))):n().createElement(r.Button,{size:"small",type:"link",icon:n().createElement(a.CheckCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return tH(function(){var e;return tG(this,function(t){switch(t.label){case 0:u(!0),t.label=1;case 1:return t.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:create",method:"POST",data:{queueName:l.name,label:l.label,description:l.description,type:l.type,stackId:null,enabled:!0}})];case 2:return t.sent(),r.message.success('Mapping created for "'.concat(l.name,'"')),[4,I()];case 3:return t.sent(),[3,6];case 4:return e=t.sent(),r.message.error("Create failed: ".concat(e.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()}},e("Register"))}}];return n().createElement("div",null,n().createElement(r.Card,{size:"small",style:{marginBottom:16}},n().createElement(r.Row,{justify:"space-between",align:"middle"},n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(tJ,{strong:!0},e("Queue Assignment")),n().createElement(tJ,{type:"secondary"},e("Fallback mapping for legacy stacks without explicit Processes / queues.")))),n().createElement(r.Col,null,n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ScanOutlined,null),onClick:I,loading:d},e("Scan Queues")),E.length>0&&n().createElement(r.Button,{onClick:function(){return tH(function(){var e,t,n,a;return tG(this,function(l){switch(l.label){case 0:u(!0),l.label=1;case 1:return l.trys.push([1,4,5,6]),[4,o.request({url:"/workerQueueMappings:autoMap",method:"POST",data:{}})];case 2:return n=((null==(e=(t=l.sent()).data)?void 0:e.data)||t.data).created,r.message.success("Auto-mapped ".concat(n.length," queue(s)")),[4,I()];case 3:return l.sent(),[3,6];case 4:return a=l.sent(),r.message.error("Auto-map failed: ".concat(a.message)),[3,6];case 5:return u(!1),[7];case 6:return[2]}})})()},loading:c},e("Auto-map ({count})",{count:E.length})),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){I(),x()}},e("Refresh")))))),E.length>0&&n().createElement(r.Alert,{type:"info",showIcon:!0,style:{marginBottom:16},message:"".concat(E.length,' queue(s) discovered but not yet registered. Click "Register" on each row or use "Auto-map" to create mappings.')}),n().createElement(r.Table,{dataSource:j,columns:z,rowKey:"key",size:"small",pagination:!1,locale:{emptyText:e('No queues discovered. Click "Scan Queues" to detect registered queues.')}}))}function tY(){var e=T();return n().createElement("div",{style:{padding:24}},n().createElement(r.Tabs,{defaultActiveKey:"cluster",items:[{key:"cluster",label:e("Cluster Nodes"),children:n().createElement(ec,null)},{key:"tasks",label:e("Async Tasks"),children:n().createElement(v,null)},{key:"executions",label:e("Workflow Executions"),children:n().createElement(A,null)},{key:"cache",label:e("Cache Monitor"),children:n().createElement(e$,null)},{key:"orchestrator",label:e("Container Orchestrator"),children:n().createElement(ts,null)},{key:"packages",label:e("Packages"),children:n().createElement(tO,null)},{key:"plugins",label:e("Plugins"),children:n().createElement(tz,null)},{key:"doctor",label:e("Doctor"),children:n().createElement(tK,null)},{key:"queues",label:e("Queue Assignment"),children:n().createElement(t$,null)}]}))}function tX(){for(var e=[],t=0;t<sessionStorage.length;t++){var n=sessionStorage.key(t);n&&n.startsWith("nb_cache:")&&e.push(n)}e.forEach(function(e){try{sessionStorage.removeItem(e)}catch(e){}})}function tZ(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}var t0=new Map,t1=new WeakSet;function t2(){try{return"u"<typeof sessionStorage?null:sessionStorage}catch(e){return null}}function t3(e){var t,n,r,a=(null==(t=e.app)?void 0:t.getName())||"main",l=(null==(n=e.auth)?void 0:n.role)||"anonymous",o=(null==(r=e.auth)?void 0:r.token)||"anonymous",i="string"==typeof o?o.slice(-8):"anonymous",c="".concat(a,":").concat(i,":").concat(l);return{prefix:"".concat("nb_cache",":").concat(c,":"),versionKey:"".concat("nb_cache_version",":").concat(c)}}function t4(e,t){try{var n=e.getItem(t.versionKey),r=n?Number(n):0;return Number.isFinite(r)?r:0}catch(e){return 0}}function t6(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function t5(e,t,n){return(t5=ne()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&t7(a,n.prototype),a}).apply(null,arguments)}function t8(e){return(t8=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function t7(e,t){return(t7=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function t9(e){var t="function"==typeof Map?new Map:void 0;return(t9=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return t5(e,arguments,t8(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t7(n,e)})(e)}function ne(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ne=function(){return!!e})()}var nt=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=t8(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,ne()?Reflect.construct(e,t||[],t8(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&t7(n,e),t=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(e){return!function(e){if(null==e?void 0:e.auth){var t,n,r=e.auth.setRole.bind(e.auth);e.auth.setRole=function(e){return tX(),r(e)};var a=e.auth.setToken.bind(e.auth);e.auth.setToken=function(e){return tX(),a(e)},null==(n=e.app)||null==(t=n.eventBus)||t.addEventListener("auth:tokenChanged",function(){tX()})}}(this.app.apiClient),!function(e){if(e&&!t1.has(e)){t1.add(e);var t=e.request.bind(e);e.request=function(n){var r;return(r=function(){var r,a,l,o,i,c,u,s,d,m,p,f,y,g;return function(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){l.label=u[1];break}if(6===u[0]&&l.label<a[1]){l.label=a[1],a=u;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(u);break}a[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(h){var v,b,E;switch(h.label){case 0:if(a=(r=function(e){if("string"==typeof e)return{url:e,method:"get",params:{}};var t=e.url||"",n=(e.method||"get").toLowerCase(),r=e.params||{};if(e.resource&&e.action){var a=e.resourceOf,l=e.resource.split(".").join(a?"/".concat(encodeURIComponent(String(a)),"/"):"/");l+=":".concat(e.action),t=l,n=["get","list","listMeta","getJsonSchema"].includes(e.action)?"get":"post"}return{url:t,method:n,params:r}}(n)).url,l=r.method,o=r.params,"get"===l)return[3,2];return[4,t(n)];case 1:return("number"!=typeof(b=(v=i=h.sent())&&(void 0===v?"undefined":v&&"u">typeof Symbol&&v.constructor===Symbol?"symbol":typeof v)=="object"&&"status"in v?v.status:void 0)||b>=200&&b<400)&&function(e){var t=t2();if(t)try{var n=t3(e),r=t4(t,n)+1;t.setItem(n.versionKey,String(r)),function(e,t){for(var n=[],r=0;r<e.length;r+=1){var a=e.key(r);(null==a?void 0:a.startsWith(t))&&n.push(a)}var l=!0,o=!1,i=void 0;try{for(var c,u=n[Symbol.iterator]();!(l=(c=u.next()).done);l=!0){var s=c.value;e.removeItem(s)}}catch(e){o=!0,i=e}finally{try{l||null==u.return||u.return()}finally{if(o)throw i}}}(t,n.prefix)}catch(e){}}(e),[2,i];case 2:if(!a||!((E=a).includes("collections:listMeta")||E.includes("uiSchemas:getJsonSchema")))return[2,t(n)];if(c=t2(),u=t3(e),s=c?t4(c,u):0,d=function(e){try{return JSON.stringify(e||{})}catch(e){return"[unserializable]"}}(o),m="".concat(u.prefix,"v").concat(s,":").concat(a,":").concat(d),c)try{if(p=c.getItem(m)){if((f=JSON.parse(p)).expiresAt>Date.now()&&f.scopeVersion===s)return[2,f.response];c.removeItem(m)}}catch(e){}if(y="".concat(u.prefix,"v").concat(s,":").concat(a,":").concat(d),t0.has(y))return[2,t0.get(y)];return g=t(n).then(function(e){if(t0.delete(y),c&&e&&200===e.status&&e.data)try{var t={expiresAt:Date.now()+6e4,scopeVersion:s,response:e};c.setItem(m,JSON.stringify(t))}catch(e){}return e},function(e){throw t0.delete(y),e}),t0.set(y,g),[2,g]}})},function(){var e=this,t=arguments;return new Promise(function(n,a){var l=r.apply(e,t);function o(e){tZ(l,n,a,o,i,"next",e)}function i(e){tZ(l,n,a,o,i,"throw",e)}o(void 0)})})()}}}(this.app.apiClient),this.app.pluginSettingsManager.add("plugin-cluster-manager",{title:'{{t("Cluster Manager")}}',icon:"DashboardOutlined",Component:tY}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){t6(l,r,a,o,i,"next",e)}function i(e){t6(l,r,a,o,i,"throw",e)}o(void 0)})}).call(this)}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(t9(e.Plugin)),nn=nt}(),p}()});
|