plugin-cluster-manager 1.0.13 → 1.1.0
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 +10 -1
- package/dist/externalVersion.js +9 -0
- package/dist/index.js +9 -0
- package/dist/server/actions/acl-cache.js +9 -0
- package/dist/server/actions/cache-monitor.js +9 -0
- package/dist/server/actions/cluster-nodes.js +9 -0
- package/dist/server/actions/event-queue-monitor.js +9 -0
- package/dist/server/actions/lock-monitor.js +9 -0
- package/dist/server/actions/orchestrator.js +9 -0
- package/dist/server/actions/package-manager.js +9 -0
- package/dist/server/actions/redis-monitor.js +9 -0
- package/dist/server/actions/tasks.js +9 -0
- package/dist/server/actions/workflow-executions.js +9 -0
- package/dist/server/adapters/redis-lock-adapter.js +9 -0
- package/dist/server/adapters/redis-node-registry.js +9 -0
- package/dist/server/adapters/redis-pubsub-adapter.js +9 -0
- package/dist/server/collections/orchestrator-settings.js +9 -0
- package/dist/server/collections/orchestrator-stacks.js +9 -0
- package/dist/server/collections/worker-packages-configs.js +9 -0
- package/dist/server/index.js +9 -0
- package/dist/server/orchestrator/PackageManager.js +10 -1
- package/dist/server/orchestrator/docker-adapter.js +9 -0
- package/dist/server/orchestrator/index.js +9 -0
- package/dist/server/orchestrator/k8s-adapter.js +9 -0
- package/dist/server/orchestrator/leader-election.js +9 -0
- package/dist/server/orchestrator/types.js +9 -0
- package/dist/server/plugin.js +9 -0
- package/dist/server/utils/node.js +9 -0
- package/dist/server/utils/redis.js +9 -0
- package/dist/shared/packages.js +9 -0
- package/package.json +1 -1
- package/src/client/PackageInstaller.tsx +1 -1
- package/src/server/orchestrator/PackageManager.ts +2 -2
package/dist/client/index.js
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("dayjs"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-cluster-manager",["dayjs","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-cluster-manager"]=t(require("dayjs"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-cluster-manager"]=t(e.dayjs,e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,a){return function(){"use strict";var l={482:function(e){e.exports=r},772:function(e){e.exports=t},721:function(e){e.exports=a},760:function(t){t.exports=e},156:function(e){e.exports=n}},o={};function c(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return l[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.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return!function(){c.r(i),c.d(i,{PluginClusterManagerClient:function(){return e2},default:function(){return e3}});var e=c(772),t=c(156),n=c.n(t),r=c(721),a=c(482),l=c(760),o=c.n(l);function s(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 u(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){u(l,r,a,o,c,"next",e)}function c(e){u(l,r,a,o,c,"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 p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(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 s(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 y(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[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 g(){var l,c,i,s=(0,e.useAPIClient)(),u=f((0,t.useState)([]),2),g=u[0],b=u[1],v=f((0,t.useState)(!1),2),E=v[0],k=v[1],w=f((0,t.useState)({current:1,pageSize:20,total:0}),2),S=w[0],C=w[1],O=f((0,t.useState)(void 0),2),x=O[0],I=O[1],A=(0,t.useCallback)(d(function(){var e,t,n,a,l=arguments;return y(this,function(o){switch(o.label){case 0:e=l.length>0&&void 0!==l[0]?l[0]:S.current,t=l.length>1&&void 0!==l[1]?l[1]:S.pageSize,k(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,s.request({url:"clusterManager:list",params:{page:e,pageSize:t,statusFilter:void 0===x?"":x}})];case 2:return b(Array.isArray(null==(a=o.sent().data)||null==(n=a.data)?void 0:n.data)?a.data.data:Array.isArray(null==a?void 0:a.data)?a.data:Array.isArray(a)?a:[]),C(function(t){var n,r;return p(m({},t),{current:(null==(n=a.meta)?void 0:n.page)||e,total:(null==(r=a.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 k(!1),[7];case 5:return[2]}})}),[s,S.current,S.pageSize,x]);(0,t.useEffect)(function(){A()},[x]);var P=(l=d(function(e){return y(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManager:cancel",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Task canceled"),A(),[2]}})}),function(e){return l.apply(this,arguments)}),T=(c=d(function(e){return y(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManager:retry",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Task re-queued"),A(),[2]}})}),function(e){return c.apply(this,arguments)}),R=(i=d(function(e){var t,n;return y(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.request({url:"clusterManager:purge",method:"post",data:{days:e}})];case 1:return n=a.sent(),r.message.success("Purged ".concat((null==n||null==(t=n.data)?void 0:t.deletedCount)||0," tasks")),A(),[3,3];case 2:return a.sent(),r.message.error("Failed to purge tasks"),[3,3];case 3:return[2]}})}),function(e){return i.apply(this,arguments)}),j=[{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?o()(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=o()(n).diff(o()(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(e,t){return n().createElement(r.Space,null,(0===t.status||null===t.status)&&n().createElement(r.Popconfirm,{title:"Cancel this task?",onConfirm:function(){return P(t.id)}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})),(-1===t.status||-2===t.status)&&n().createElement(r.Popconfirm,{title:"Retry this task?",onConfirm:function(){return T(t.id)}},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:x,onChange:I,options:Object.entries(h).map(function(e){var t=f(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return A()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return R(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return R(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return R(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Purge Tasks"))),n().createElement(r.Table,{rowKey:"id",columns:j,dataSource:g,loading:E,size:"small",pagination:p(m({},S),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return A(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 v(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function E(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){v(l,r,a,o,c,"next",e)}function c(e){v(l,r,a,o,c,"throw",e)}o(void 0)})}}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(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){k(e,t,n[t])})}return e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var x={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"}},I={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 l,c,i,s=(0,e.useAPIClient)(),u=C((0,t.useState)([]),2),d=u[0],m=u[1],p=C((0,t.useState)(!1),2),f=p[0],y=p[1],h=C((0,t.useState)({current:1,pageSize:20,total:0}),2),g=h[0],b=h[1],v=C((0,t.useState)(void 0),2),A=v[0],P=v[1],T=C((0,t.useState)({}),2),R=T[0],j=T[1],M=C((0,t.useState)({}),2),z=M[0],F=M[1],N=(0,t.useCallback)(E(function(){var e,t,n,a,l=arguments;return O(this,function(o){switch(o.label){case 0:e=l.length>0&&void 0!==l[0]?l[0]:g.current,t=l.length>1&&void 0!==l[1]?l[1]:g.pageSize,y(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerWorkflow:list",params:{page:e,pageSize:t,statusFilter:void 0===A?"":A}})];case 2:return m(Array.isArray(null==(a=o.sent().data)||null==(n=a.data)?void 0:n.data)?a.data.data:Array.isArray(null==a?void 0:a.data)?a.data:Array.isArray(a)?a:[]),b(function(t){var n,r;return S(w({},t),{current:(null==(n=a.meta)?void 0:n.page)||e,total:(null==(r=a.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 y(!1),[7];case 5:return[2]}})}),[s,g.current,g.pageSize,A]);(0,t.useEffect)(function(){N()},[A]);var B=(l=E(function(e){var t,n,a,l,o;return O(this,function(c){switch(c.label){case 0:if(R[e])return[2];F(function(t){return S(w({},t),k({},e,!0))}),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerWorkflow:getJobs",params:{filterByTk:e}})];case 2:return o=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:[],j(function(t){return S(w({},t),k({},e,o))}),[3,5];case 3:return c.sent(),r.message.error("Failed to load jobs"),[3,5];case 4:return F(function(t){return S(w({},t),k({},e,!1))}),[7];case 5:return[2]}})}),function(e){return l.apply(this,arguments)}),D=(c=E(function(e){return O(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManagerWorkflow:cancel",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Execution canceled"),N(),[2]}})}),function(e){return c.apply(this,arguments)}),L=(i=E(function(e){var t,n;return O(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.request({url:"clusterManagerWorkflow:purge",method:"post",data:{days:e}})];case 1:return n=a.sent(),r.message.success("Purged ".concat((null==n||null==(t=n.data)?void 0:t.deletedCount)||0," executions")),N(),[3,3];case 2:return a.sent(),r.message.error("Failed to purge executions"),[3,3];case 3:return[2]}})}),function(e){return i.apply(this,arguments)}),q=[{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=I[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):"-"}}],_=[{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=x[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?o()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Actions",key:"actions",width:120,render:function(e,t){return n().createElement(r.Space,null,n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.UnorderedListOutlined,null),onClick:function(){return B(t.id)},loading:z[t.id]},"Jobs"),(0===t.status||null===t.status)&&n().createElement(r.Popconfirm,{title:"Cancel execution?",onConfirm:function(){return D(t.id)}},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:A,onChange:P,options:Object.entries(x).map(function(e){var t=C(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return N()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return L(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return L(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return L(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Clear History"))),n().createElement(r.Table,{rowKey:"id",columns:_,dataSource:d,loading:f,size:"small",expandable:{expandedRowRender:function(e){var t=R[e.id];return t?n().createElement(r.Table,{rowKey:"id",columns:q,dataSource:t,size:"small",pagination:!1}):n().createElement("div",{style:{padding:8}},'Click "Jobs" to load')}},pagination:S(w({},g),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return N(e,t)}})}))}function P(){var n=(0,e.useApp)();return(0,t.useCallback)(function(e){return n.i18n.t(e,{ns:"cluster-manager"})},[n.i18n])}function T(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 j(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function z(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,c,"next",e)}function c(e){M(l,r,a,o,c,"throw",e)}o(void 0)})}}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return j(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 j(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 N(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function B(l){var o=l.open,c=l.node,i=l.onClose,s=P(),u=(0,e.useAPIClient)(),d=F((0,t.useState)([]),2),m=d[0],p=d[1],f=F((0,t.useState)(null),2),y=f[0],h=f[1],g=F((0,t.useState)(!1),2),b=g[0],v=g[1],E=F((0,t.useState)(!0),2),k=E[0],w=E[1],S=F((0,t.useState)(""),2),C=S[0],O=S[1],x=(0,t.useRef)(null),I=(0,t.useCallback)(z(function(){var e,t,n;return N(this,function(a){switch(a.label){case 0:if(!o)return[2];v(!0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,u.request({url:"clusterManagerCluster:logs",params:{lines:200,targetNodeId:null==c?void 0:c.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 v(!1),[7];case 5:return[2]}})}),[u,o,c]);(0,t.useEffect)(function(){o&&(p([]),O(""),w(!0),I())},[o,I]),(0,t.useEffect)(function(){if(o&&k){var e=setInterval(I,5e3);return function(){return clearInterval(e)}}},[o,k,I]),(0,t.useEffect)(function(){x.current&&!C&&x.current.scrollIntoView({behavior:"smooth"})},[m,C]);var A=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),s("Instance Logs")," — ",(null==c?void 0:c.name)||"",y&&n().createElement(r.Tag,null,y.hostname,":",y.pid," (",y.workerMode,")")),open:o,onCancel:i,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:s("Search logs..."),prefix:n().createElement(a.SearchOutlined,null),value:C,onChange:function(e){return O(e.target.value)},allowClear:!0,style:{width:300}}),n().createElement(r.Switch,{checked:k,onChange:w,checkedChildren:s("Auto 5s"),unCheckedChildren:s("Paused")}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:I,loading:b,size:"small"},s("Refresh")),n().createElement("span",{style:{fontSize:12,color:"#888"}},A.length," / ",m.length," ",s("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===A.length&&!b&&n().createElement("div",{style:{color:"#888",textAlign:"center",paddingTop:40}},s(0===m.length?"No logs available":"No matching logs")),A.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:x})))}var D={ok:"green",connected:"green",online:"green",warning:"orange",disconnected:"red",offline:"red",error:"red",not_configured:"default"};function L(){var l,o=P(),c=(0,e.useAPIClient)(),i=F((0,t.useState)(!1),2),s=i[0],u=i[1],d=F((0,t.useState)(null),2),m=d[0],p=d[1],f=F((0,t.useState)([]),2),y=f[0],h=f[1],g=F((0,t.useState)(null),2),b=g[0],v=g[1],E=F((0,t.useState)(null),2),k=E[0],w=E[1],S=F((0,t.useState)(null),2),C=S[0],O=S[1],x=(0,t.useCallback)(z(function(){var e,t,n,r,a,l,o,i;return N(this,function(s){switch(s.label){case 0:u(!0),s.label=1;case 1:return s.trys.push([1,3,4,5]),[4,Promise.all([c.request({url:"clusterManagerCluster:current"}),c.request({url:"clusterManagerCluster:list"}),c.request({url:"clusterManagerCluster:health"})])];case 2:return l=(a=F.apply(void 0,[s.sent(),3]))[0],o=a[1],i=a[2],p(null==l||null==(e=l.data)?void 0:e.data),h((null==o||null==(n=o.data)||null==(t=n.data)?void 0:t.data)||[]),v(null==i||null==(r=i.data)?void 0:r.data),[3,5];case 3:return s.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[c]),I=(l=z(function(e,t){return N(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(x,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]}})}),function(e,t){return l.apply(this,arguments)});(0,t.useEffect)(function(){x()},[x]),(0,t.useEffect)(function(){if(k){var e=setInterval(x,1e3*k);return function(){return clearInterval(e)}}},[k,x]);var A=y.filter(function(e){return"online"===e.status}).length,j=[{title:o("Name"),dataIndex:"name",key:"name",width:200},{title:o("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:D[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:o("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:o("PID"),dataIndex:"pid",key:"pid",width:80},{title:o("Version"),dataIndex:"appVersion",key:"appVersion",width:120},{title:o("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 O(t)},disabled:"offline"===t.status},o("Logs")))}}],M=(null==b?void 0:b.checks)||{};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:x},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:k,onChange:w,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 I("*","soft")}},n().createElement(r.Button,{style:{color:"#faad14",borderColor:"#ffe58f"},icon:n().createElement(a.ReloadOutlined,null)},o("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 I("*","hard")}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.ReloadOutlined,null)},o("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:o("Nodes Online"),value:A,suffix:"/ ".concat(y.length),prefix:n().createElement(a.ClusterOutlined,null),valueStyle:{color:A===y.length?"#3f8600":"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Worker Nodes"),value:y.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:o("Process Uptime"),value:m?R(m.node.uptime):"-"}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Memory (Heap)"),value:m?T(m.memory.heapUsed):"-",suffix:m?"/ ".concat(T(m.memory.heapTotal)):""})))),n().createElement(r.Card,{title:o("Health Checks"),size:"small"},b&&!b.healthy&&n().createElement(r.Alert,{type:"warning",message:o("Some subsystems are unhealthy"),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Row,{gutter:[16,8]},Object.entries(M).map(function(e){var t=F(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:D[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:o("Cluster Nodes"),size:"small"},n().createElement(r.Table,{dataSource:y,columns:j,rowKey:"id",size:"small",pagination:!1})),m&&n().createElement(r.Card,{title:n().createElement(r.Space,null,o("Current Node Details"),n().createElement(r.Tag,{color:"green"},"APP")),size:"small"},m._fallback&&n().createElement(r.Alert,{type:"warning",message:o("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:o("Hostname")},m.node.hostname),n().createElement(r.Descriptions.Item,{label:"PID"},m.node.pid),n().createElement(r.Descriptions.Item,{label:"Node.js"},m.node.nodeVersion),n().createElement(r.Descriptions.Item,{label:o("Worker Mode")},m.node.workerMode||"(default)"),n().createElement(r.Descriptions.Item,{label:o("App Port")},m.node.appPort),n().createElement(r.Descriptions.Item,{label:o("Cluster Mode")},m.node.clusterMode||"(disabled)"),n().createElement(r.Descriptions.Item,{label:o("RSS Memory")},T(m.memory.rss)),n().createElement(r.Descriptions.Item,{label:o("OS Memory")},T(m.os.freeMemory)," free / ",T(m.os.totalMemory)),n().createElement(r.Descriptions.Item,{label:o("CPU Cores")},m.os.cpuCount))),n().createElement(B,{open:!!C,node:C,onClose:function(){return O(null)}})))}function q(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,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function K(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){_(l,r,a,o,c,"next",e)}function c(e){_(l,r,a,o,c,"throw",e)}o(void 0)})}}function U(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||W(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 W(e,t){if(e){if("string"==typeof e)return q(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 q(e,t)}}function H(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var V=r.Typography.Text;function J(){var l,o,c,i,s=(0,e.useAPIClient)(),u=P(),d=U((0,t.useState)(null),2),m=d[0],p=d[1],f=U((0,t.useState)([]),2),y=f[0],h=f[1],g=U((0,t.useState)(!1),2),b=g[0],v=g[1],E=U((0,t.useState)(null),2),k=E[0],w=E[1],S=(0,t.useCallback)(K(function(){var e,t,n,a,l,o,c;return H(this,function(i){switch(i.label){case 0:v(!0),i.label=1;case 1:return i.trys.push([1,3,4,5]),[4,Promise.all([s.request({url:"clusterManagerAclCache:stats"}),s.request({url:"clusterManagerAclCache:listKeys"})])];case 2:return o=(l=U.apply(void 0,[i.sent(),2]))[0],c=l[1],p((null==o||null==(e=o.data)?void 0:e.data)||(null==o?void 0:o.data)||{}),h(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 i.sent(),r.message.error("Failed to load ACL cache data"),[3,5];case 4:return v(!1),[7];case 5:return[2]}})}),[s]);(0,t.useEffect)(function(){S()},[]),(0,t.useEffect)(function(){if(k){var e=setInterval(S,1e3*k);return function(){return clearInterval(e)}}},[k,S]);var C=(l=K(function(){var e,t;return H(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,s.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")),S(),[3,3];case 2:return n.sent(),r.message.error("Failed to clear cache"),[3,3];case 3:return[2]}})}),function(){return l.apply(this,arguments)}),O=(o=K(function(){return H(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,s.request({url:"clusterManagerAclCache:resetStats",method:"post"})];case 1:return e.sent(),r.message.success("Stats reset"),S(),[3,3];case 2:return e.sent(),r.message.error("Failed to reset stats"),[3,3];case 3:return[2]}})}),function(){return o.apply(this,arguments)}),x=(c=K(function(e){var t,n;return H(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.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,'"')),S(),[3,3];case 2:return a.sent(),r.message.error("Failed to clear role cache"),[3,3];case 3:return[2]}})}),function(e){return c.apply(this,arguments)});if(!m)return null;var I=Object.entries(m.detailByRole||{}).map(function(e){var t,n,r=U(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,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),A=[{title:u("Role"),dataIndex:"role",width:120,filters:((function(e){if(Array.isArray(e))return q(e)})(i=new Set(y.map(function(e){return e.role})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||W(i)||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:u("Resource"),dataIndex:"resource",width:200},{title:u("Action"),dataIndex:"action",width:120},{title:u("Cache Key"),dataIndex:"key",ellipsis:!0,render:function(e){return n().createElement(V,{code:!0,style:{fontSize:11}},e)}}],T=[{title:u("Role"),dataIndex:"role",width:150},{title:u("Checks"),dataIndex:"checks",width:100,sorter:function(e,t){return e.checks-t.checks}},{title:u("Hits"),dataIndex:"hits",width:100,render:function(e){return n().createElement(V,{type:"success"},e)}},{title:u("Misses"),dataIndex:"misses",width:100,render:function(e){return n().createElement(V,{type:"danger"},e)}},{title:u("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:u("Actions"),width:80,render:function(e,t){return n().createElement(r.Popconfirm,{title:"".concat(u("Clear cache for role"),' "').concat(t.role,'"?'),onConfirm:function(){return x(t.role)}},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:S,loading:b},u("Refresh")),n().createElement(r.Select,{placeholder:u("Auto refresh"),allowClear:!0,style:{width:160},value:k,onChange:w,options:[{value:5,label:u("Every 5s")},{value:10,label:u("Every 10s")},{value:30,label:u("Every 30s")}]}),n().createElement(r.Popconfirm,{title:u("Clear all ACL cache entries?"),onConfirm:C},n().createElement(r.Button,{icon:n().createElement(a.DeleteOutlined,null),danger:!0},u("Clear All Cache"))),n().createElement(r.Popconfirm,{title:u("Reset ACL stats counters?"),onConfirm:O},n().createElement(r.Button,null,u("Reset Stats"))),n().createElement(r.Tag,null,"TTL: ",m.ttlSeconds,"s"),n().createElement(r.Tag,null,u("Since"),": ",new Date(m.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:u("Total ACL Checks"),value:m.totalChecks,prefix:n().createElement(a.SafetyCertificateOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Cache Hits"),value:m.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:u("Cache Misses"),value:m.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:u("Hit Rate"),value:m.hitRate,suffix:"%",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:m.hitRate>80?"#3f8600":m.hitRate>50?"#faad14":"#cf1322"}}),n().createElement(V,{type:"secondary"},u("Cached keys"),": ",m.cachedKeys)))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:u("Stats by Role"),size:"small"},0===I.length?n().createElement(V,{type:"secondary"},u("No ACL checks recorded yet")):n().createElement(r.Table,{rowKey:"role",size:"small",pagination:!1,dataSource:I,columns:T}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"".concat(u("Cached Permission Keys")," (").concat(y.length,")"),size:"small"},0===y.length?n().createElement(V,{type:"secondary"},u("No cached keys")):n().createElement(r.Table,{rowKey:"key",size:"small",pagination:{pageSize:10,size:"small"},dataSource:y,columns:A})))))}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 G(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function Y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(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)}}(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 Q=r.Typography.Text;function X(){var l,o=(0,e.useAPIClient)(),c=Y((0,t.useState)(null),2),i=c[0],s=c[1],u=Y((0,t.useState)({}),2),d=u[0],m=u[1],p=Y((0,t.useState)(0),2),f=p[0],y=p[1],h=Y((0,t.useState)([]),2),g=h[0],b=h[1],v=Y((0,t.useState)([]),2),E=v[0],k=v[1],w=Y((0,t.useState)(!1),2),S=w[0],C=w[1],O=Y((0,t.useState)(null),2),x=O[0],I=O[1],A=Y((0,t.useState)(null),2),P=A[0],T=A[1],j=(0,t.useCallback)((l=function(){var e,t,n,r,a,l,c,i,u,d,p,f,h,g,v,E,w,S,O;return function(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(x){switch(x.label){case 0:C(!0),T(null),x.label=1;case 1:return x.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerRedis:info"}),o.request({url:"clusterManagerRedis:pubsub"}),o.request({url:"clusterManagerRedis:clients"}),o.request({url:"clusterManagerRedis:slowlog",params:{count:10}})])];case 2:return d=(u=Y.apply(void 0,[x.sent(),4]))[0],p=u[1],f=u[2],h=u[3],s((null==d||null==(e=d.data)?void 0:e.data)||(null==d?void 0:d.data)||{}),m((g=(null==p||null==(t=p.data)?void 0:t.data)||(null==p?void 0:p.data)||{}).channels||{}),y(g.total_channels||0),b(Array.isArray(null==f||null==(r=f.data)||null==(n=r.data)?void 0:n.data)?f.data.data.data:Array.isArray(null==f||null==(a=f.data)?void 0:a.data)?f.data.data:Array.isArray(null==f?void 0:f.data)?f.data:[]),k(Array.isArray(null==h||null==(c=h.data)||null==(l=c.data)?void 0:l.data)?h.data.data.data:Array.isArray(null==h||null==(i=h.data)?void 0:i.data)?h.data.data:Array.isArray(null==h?void 0:h.data)?h.data:[]),[3,5];case 3:return T((null==(v=x.sent())||null==(O=v.response)||null==(S=O.data)||null==(w=S.errors)||null==(E=w[0])?void 0:E.message)||"Failed to connect to Redis"),[3,5];case 4:return C(!1),[7];case 5:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,r){var a=l.apply(e,t);function o(e){G(a,n,r,o,c,"next",e)}function c(e){G(a,n,r,o,c,"throw",e)}o(void 0)})}),[o]);if((0,t.useEffect)(function(){j()},[]),(0,t.useEffect)(function(){if(x){var e=setInterval(j,1e3*x);return function(){return clearInterval(e)}}},[x,j]),P)return n().createElement(r.Card,null,n().createElement(Q,{type:"danger"},P),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:j},"Retry"));if(!i)return null;var M="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:j,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:x,onChange:I,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!==M?"(".concat(M,"%)"):void 0}),n().createElement(Q,{type:"secondary"},"Peak: ",i.memory.peak),n().createElement("br",null),n().createElement(Q,{type:"secondary"},"Max: ",i.memory.max_memory),n().createElement("br",null),n().createElement(Q,{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(Q,{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(Q,{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(Q,{type:"secondary"},"Hits: ",i.stats.keyspace_hits.toLocaleString()," / Misses:"," ",i.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(Q,{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(Q,{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=Y(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(f,")"),size:"small"},0===f?n().createElement(Q,{type:"secondary"},"No active channels"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(d).map(function(e){var t=Y(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===E.length?n().createElement(Q,{type:"secondary"},"No slow queries"):n().createElement(r.Table,{rowKey:"id",size:"small",pagination:!1,dataSource:E,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(Z,null))))}function Z(){var a=(0,e.useAPIClient)(),l=Y((0,t.useState)(null),2),o=l[0],c=l[1];return((0,t.useEffect)(function(){a.request({url:"clusterManagerRedis:syncMessages"}).then(function(e){var t;return c(null==e||null==(t=e.data)?void 0:t.data)}).catch(function(){})},[a]),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 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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){et(l,r,a,o,c,"next",e)}function c(e){et(l,r,a,o,c,"throw",e)}o(void 0)})}}function er(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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.")}()}function ea(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function el(){var l,o,c=P(),i=(0,e.useAPIClient)(),s=er((0,t.useState)(!1),2),u=s[0],d=s[1],m=er((0,t.useState)(null),2),p=m[0],f=m[1],y=er((0,t.useState)([]),2),h=y[0],g=y[1],b=er((0,t.useState)(null),2),v=b[0],E=b[1],k=(0,t.useCallback)(en(function(){var e,t,n,r,a,l;return ea(this,function(o){switch(o.label){case 0:d(!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=er.apply(void 0,[o.sent(),2]))[0],l=r[1],f(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 d(!1),[7];case 5:return[2]}})}),[i]);(0,t.useEffect)(function(){k()},[k]),(0,t.useEffect)(function(){if(v){var e=setInterval(k,1e3*v);return function(){return clearInterval(e)}}},[v,k]);var w=(l=en(function(e){return ea(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(c("Lock released")),k(),[3,3];case 2:return t.sent(),r.message.error(c("Failed to release lock")),[3,3];case 3:return[2]}})}),function(e){return l.apply(this,arguments)}),S=[{title:c("Lock Key"),dataIndex:"key",key:"key",render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:c("Adapter"),dataIndex:"adapter",key:"adapter",width:100,render:function(e){return n().createElement(r.Tag,null,e)}},{title:c("TTL"),dataIndex:"ttl",key:"ttl",width:120,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:c("Actions"),key:"actions",width:120,render:function(e,t){return n().createElement(r.Popconfirm,{title:c("Force release this lock?"),description:c("This may cause data inconsistency. Use with caution."),onConfirm:function(){return w(t.key)},okText:c("Release"),cancelText:c("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.UnlockOutlined,null)},c("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:k},c("Refresh")),n().createElement(r.Select,{placeholder:c("Auto Refresh"),allowClear:!0,value:v,onChange:E,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:c("Adapter Type"),value:(null==p?void 0:p.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:c("Active Locks"),value:null!=(o=null==p?void 0:p.activeLocks)?o:0,prefix:n().createElement(a.LockOutlined,null),valueStyle:{color:((null==p?void 0:p.activeLocks)||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Listed"),value:h.length})))),n().createElement(r.Card,{title:c("Active Locks"),size:"small"},0===h.length?n().createElement("div",{style:{textAlign:"center",padding:24,color:"#999"}},c("No active locks")):n().createElement(r.Table,{dataSource:h,columns:S,rowKey:"key",size:"small",pagination:{pageSize:20}}))))}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 ec(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function ei(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,c,"next",e)}function c(e){ec(l,r,a,o,c,"throw",e)}o(void 0)})}}function es(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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 eu(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function ed(){var l,o=P(),c=(0,e.useAPIClient)(),i=es((0,t.useState)(!1),2),s=i[0],u=i[1],d=es((0,t.useState)(null),2),m=d[0],p=d[1],f=es((0,t.useState)(null),2),y=f[0],h=f[1],g=es((0,t.useState)(null),2),b=g[0],v=g[1],E=es((0,t.useState)([]),2),k=E[0],w=E[1],S=es((0,t.useState)({}),2),C=S[0],O=S[1],x=(0,t.useCallback)(ei(function(){var e,t;return eu(this,function(n){switch(n.label){case 0:u(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,c.request({url:"clusterManagerQueue:stats"})];case 2:return p(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[c]),I=(0,t.useCallback)((l=ei(function(e){var t,n,r,a,l;return eu(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return w((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),O((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]}})}),function(e){return l.apply(this,arguments)}),[c]);(0,t.useEffect)(function(){x()},[x]),(0,t.useEffect)(function(){if(y){var e=setInterval(x,1e3*y);return function(){return clearInterval(e)}}},[y,x]);var A=[{title:o("Channel"),dataIndex:"channel",key:"channel"},{title:o("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:o("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:o("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:o("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){v(t.channel),I(t.channel)}},o("Messages"))}}],T=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:o("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:o("Retried"),dataIndex:"retried",key:"retried",width:80},{title:o("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];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:x},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:y,onChange:h,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),m&&n().createElement(r.Tag,{color:m.connected?"green":"red"},m.adapter)),m&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Adapter"),value:m.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:o("Total Channels"),value:m.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Total Pending"),value:m.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:m.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Connected"),value:m.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:m.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:o("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==m?void 0:m.channels)||[],columns:A,rowKey:"channel",size:"small",pagination:!1})),b&&n().createElement(r.Card,{title:"".concat(o("Messages"),": ").concat(b),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return v(null)}},"Close")},C.note&&n().createElement(r.Tag,{style:{marginBottom:8}},C.note),n().createElement(r.Table,{dataSource:k,columns:T,rowKey:"id",size:"small",pagination:{pageSize:10,total:C.count}}))))}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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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,c,"next",e)}function c(e){ep(l,r,a,o,c,"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:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function eg(){var l,o=P(),c=(0,e.useAPIClient)(),i=ey((0,t.useState)(!1),2),s=i[0],u=i[1],d=ey((0,t.useState)([]),2),m=d[0],p=d[1],f=ey((0,t.useState)([]),2),y=f[0],h=f[1],g=ey((0,t.useState)(null),2),b=g[0],v=g[1],E=(0,t.useCallback)(ef(function(){var e,t,n,r,a,l,o,i,s;return eh(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([c.request({url:"clusterManagerCacheMgr:stores"}),c.request({url:"clusterManagerCacheMgr:caches"}),c.request({url:"clusterManagerCacheMgr:redisMemory"})])];case 2:return o=(l=ey.apply(void 0,[d.sent(),3]))[0],i=l[1],s=l[2],p((null==o||null==(t=o.data)||null==(e=t.data)?void 0:e.data)||[]),h((null==i||null==(r=i.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]}})}),[c]);(0,t.useEffect)(function(){E()},[E]);var k=(l=ef(function(){return eh(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerCacheMgr:flushAll",method:"post"})];case 1:return e.sent(),r.message.success(o("All caches flushed")),E(),[3,3];case 2:return e.sent(),r.message.error(o("Failed to flush caches")),[3,3];case 3:return[2]}})}),function(){return l.apply(this,arguments)}),w=[{title:o("Store Name"),dataIndex:"name",key:"name"},{title:o("Type"),dataIndex:"type",key:"type",width:120,render:function(e){return n().createElement(r.Tag,{color:"redis"===e?"blue":"default"},e)}},{title:o("Default"),dataIndex:"isDefault",key:"isDefault",width:100,render:function(e){return e?n().createElement(r.Tag,{color:"green"},"Yes"):"-"}}],S=[{title:o("Cache Name"),dataIndex:"name",key:"name"},{title:o("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:o("Cache Stores"),children: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:E},o("Refresh")),n().createElement(r.Popconfirm,{title:o("Flush all caches?"),description:o("This will clear all cached data across all stores."),onConfirm:k},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.DeleteOutlined,null)},o("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:o("Cache Stores"),value:m.length,prefix:n().createElement(a.DatabaseOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Named Caches"),value:y.length}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Redis Keys"),value:(null==b?void 0:b.available)?b.totalKeys:"-",suffix:(null==b?void 0:b.available)?"(".concat(b.usedMemory,")"):""})))),n().createElement(r.Card,{title:o("Registered Stores"),size:"small"},n().createElement(r.Table,{dataSource:m,columns:w,rowKey:"name",size:"small",pagination:!1})),n().createElement(r.Card,{title:o("Named Caches"),size:"small"},n().createElement(r.Table,{dataSource:y,columns:S,rowKey:"name",size:"small",pagination:!1}))))},{key:"acl",label:o("ACL Cache"),children:n().createElement(J,null)},{key:"redis",label:o("Redis Monitor"),children:n().createElement(X,null)},{key:"locks",label:o("Locks"),children:n().createElement(el,null)},{key:"queue",label:o("Event Queue"),children:n().createElement(ed,null)}]})}function eb(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){ev(l,r,a,o,c,"next",e)}function c(e){ev(l,r,a,o,c,"throw",e)}o(void 0)})}}function ek(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ew(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){ek(e,t,n[t])})}return e}function eS(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function eC(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eb(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 eb(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 eO(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var ex=r.Typography.Text;r.Typography.Title;var eI={APP_ROLE:"worker",WORKER_MODE:"*",APP_PORT:"13000",SKILL_HUB_SANDBOX:"false"},eA=[{configMapRef:{name:"nocobase-config"}},{secretRef:{name:"nocobase-secret"}}],eP=[{name:"app-storage",mountPath:"/app/nocobase/storage"},{name:"script-volume",mountPath:"/hotfix-license.js",subPath:"hotfix-license.js"}],eT=[{name:"app-storage",persistentVolumeClaim:{claimName:"app-storage"}},{name:"script-volume",configMap:{name:"nocobase-scripts"}}],eR={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 eM(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 ez(){var l,o,c,i,s,u,d,m=P(),p=(0,e.useAPIClient)(),f=eC((0,t.useState)(!1),2),y=f[0],h=f[1],g=eC((0,t.useState)([]),2),b=g[0],v=g[1],E=eC((0,t.useState)({}),2),k=E[0],w=E[1],S=eC((0,t.useState)({}),2),C=S[0],O=S[1],x=eC((0,t.useState)({}),2),I=x[0],A=x[1],T=eC((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),R=T[0],j=T[1],M=eC((0,t.useState)({visible:!1,containerName:"",logs:""}),2),z=M[0],F=M[1],N=eC((0,t.useState)(null),2),B=N[0],D=N[1],L=eC((0,t.useState)(!1),2),q=L[0],_=L[1],K=eC((0,t.useState)({visible:!1,stack:null}),2),U=K[0],W=K[1],H=eC(r.Form.useForm(),1)[0],V=eC(r.Form.useForm(),1)[0],J=(0,t.useCallback)(eE(function(){var e,t;return eO(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:ping"})];case 1:return D((null==(e=(t=n.sent()).data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),D({connected:!1,adapter:"unknown"}),[3,3];case 3:return[2]}})}),[p]),$=(0,t.useCallback)(eE(function(){var e,t,n;return eO(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,p.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return v(t=(null==(e=r.sent().data)?void 0:e.data)||[]),n={},t.forEach(function(e){n[e.id]=e.desiredReplicas}),A(n),[3,3];case 2:return r.sent(),[3,3];case 3:return[2]}})}),[p]),G=(0,t.useCallback)((l=eE(function(e){var t,n,a,l;return eO(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:containers",params:{stackId:e}})];case 1:return a=(null==(t=(n=o.sent()).data)?void 0:t.data)||n.data,w(function(t){return eS(ew({},t),ek({},e,a.data||[]))}),O(function(t){return eS(ew({},t),ek({},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]}})}),function(e){return l.apply(this,arguments)}),[p]),Y=(0,t.useCallback)(eE(function(){var e,t;return eO(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:getSettings"})];case 1:return t=n.sent(),H.setFieldsValue((null==(e=t.data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),[3,3];case 3:return[2]}})}),[p,H]),Q=(o=eE(function(e){var t;return eO(this,function(n){switch(n.label){case 0:h(!0),n.label=1;case 1:return n.trys.push([1,5,6,7]),[4,p.request({url:"/workerOrchestrator:saveSettings",method:"POST",data:e})];case 2:return n.sent(),r.message.success(m("Settings saved successfully. Reconnecting...")),_(!1),[4,J()];case 3:return n.sent(),[4,$()];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 h(!1),[7];case 7:return[2]}})}),function(e){return o.apply(this,arguments)}),X=function(e){W({visible:!0,stack:e||null}),V.setFieldsValue(e?eS(ew({},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.0.46-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(eI,{}),resourceLimits:ej({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:ej([],[]),k8sEnvFrom:ej(eA,[]),k8sVolumeMounts:ej(eP,[]),k8sVolumes:ej(eT,[])})},Z=function(){W({visible:!1,stack:null}),V.resetFields()},ee=(c=eE(function(e){var t,n,a,l,o,c,i;return eO(this,function(s){switch(s.label){case 0:h(!0),s.label=1;case 1:if(s.trys.push([1,7,8,9]),n=eS(ew({},e),{envVars:eM(e.envVars,{},"Environment variables"),resourceLimits:eM(e.resourceLimits,{},"Resource limits"),k8sEnv:eM(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:eM(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:eM(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:eM(e.k8sVolumes,[],"Kubernetes volumes"),desiredReplicas:Number(e.desiredReplicas||0),replicas:Number(e.replicas||0)}),!(null==(t=U.stack)?void 0:t.id))return[3,3];return[4,p.request({url:"/orchestratorStacks:update",method:"put",params:{filterByTk:U.stack.id},data:n})];case 2:return s.sent(),r.message.success(m("Worker stack updated")),[3,5];case 3:return[4,p.request({url:"/orchestratorStacks:create",method:"post",data:n})];case 4:s.sent(),r.message.success(m("Worker stack created")),s.label=5;case 5:return Z(),[4,$()];case 6:return s.sent(),[3,9];case 7:return a=s.sent(),r.message.error((null==a||null==(i=a.response)||null==(c=i.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message||m("Failed to save worker stack")),[3,9];case 8:return h(!1),[7];case 9:return[2]}})}),function(e){return c.apply(this,arguments)});(0,t.useEffect)(function(){J(),$(),Y()},[J,$,Y]),(0,t.useEffect)(function(){var e=function(){b.forEach(function(e){return G(e.id)})};e();var t=setInterval(function(){$(),e()},1e4);return function(){return clearInterval(t)}},[b,G,$]);var et=(i=eE(function(e){var t,n,a,l,o,c,i,s,u;return eO(this,function(d){switch(d.label){case 0:if(void 0===(t=I[e]))return[2];h(!0),d.label=1;case 1:return d.trys.push([1,5,6,7]),[4,p.request({url:"/workerOrchestrator:scale",method:"POST",data:{stackId:e,replicas:t}})];case 2:return l=(null==(n=(a=d.sent()).data)?void 0:n.data)||a.data,r.message.success("Scaled: ".concat(l.previousReplicas," → ").concat(l.currentReplicas," replicas")),[4,G(e)];case 3:return d.sent(),[4,$()];case 4:return d.sent(),[3,7];case 5:return o=d.sent(),r.message.error((null==(u=o.response)||null==(s=u.data)||null==(i=s.errors)||null==(c=i[0])?void 0:c.message)||o.message),[3,7];case 6:return h(!1),[7];case 7:return[2]}})}),function(e){return i.apply(this,arguments)}),en=(s=eE(function(e,t,n){var a,l,o,c,i;return eO(this,function(s){switch(s.label){case 0:h(!0),s.label=1;case 1:return s.trys.push([1,4,5,6]),[4,p.request({url:"/workerOrchestrator:".concat(e),method:"POST",data:{stackId:n,containerId:t}})];case 2:return s.sent(),r.message.success("".concat(e," ").concat(t," successful")),[4,G(n)];case 3:return s.sent(),[3,6];case 4:return a=s.sent(),r.message.error((null==(i=a.response)||null==(c=i.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message),[3,6];case 5:return h(!1),[7];case 6:return[2]}})}),function(e,t,n){return s.apply(this,arguments)}),er=(u=eE(function(e,t){var n,a,l;return eO(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:logs",params:{stackId:t,containerId:e,tail:200}})];case 1:return j({visible:!0,containerId:e,logs:((null==(n=(a=o.sent()).data)?void 0:n.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]}})}),function(e,t){return u.apply(this,arguments)}),ea=[{title:m("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(ex,{code:!0,style:{fontSize:11}},t.id),n().createElement(ex,null,e))}},{title:m("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:eR[e]||"default"},e.toUpperCase())}},{title:m("Packages"),key:"packages",width:140,render:function(e,t){var l=t.packageStatus;if(!l)return n().createElement(ex,{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 F({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:m("Image"),dataIndex:"image",key:"image",ellipsis:!0,render:function(e){return n().createElement(ex,{type:"secondary",style:{fontSize:12}},e)}},{title:m("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:m("Actions"),key:"actions",width:160,render:function(e,t){var l=(null==B?void 0:B.adapter)==="kubernetes";return n().createElement(r.Space,{size:"small"},!l&&("running"===t.status?n().createElement(r.Tooltip,{title:m("Stop")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PauseCircleOutlined,null),onClick:function(){return en("stop",t.id,t._stackId)}})):n().createElement(r.Tooltip,{title:m("Start")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PlayCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return en("start",t.id,t._stackId)}}))),n().createElement(r.Tooltip,{title:m("Logs")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){return er(t.id,t._stackId)}})),n().createElement(r.Popconfirm,{title:m("Remove this container?"),onConfirm:function(){return en("remove",t.id,t._stackId)}},n().createElement(r.Tooltip,{title:m("Remove")},n().createElement(r.Button,{size:"small",type:"text",danger:!0,icon:n().createElement(a.DeleteOutlined,null)}))))}}];return B?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(ex,{strong:!0},m("Adapter"),": "),n().createElement(r.Tag,{color:"blue"},(null==(d=B.adapter)?void 0:d.toUpperCase())||"NONE"),n().createElement(r.Badge,{status:B.connected?"success":"error",text:B.connected?m("Connected"):m("Disconnected")}),void 0!==B.leader&&n().createElement(n().Fragment,null,n().createElement(ex,{type:"secondary"},"|"),n().createElement(r.Badge,{status:B.leader?"success":"default",text:B.leader?m("Leader (this node)"):m("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 X()}},m("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return _(!0)}},m("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){J(),$()}},m("Refresh")))))),B.connected?n().createElement(n().Fragment,null,0===b.length&&n().createElement(r.Alert,{type:"info",showIcon:!0,message:m("No stacks configured"),description:m("Create a worker stack here, then scale it to start worker pods."),style:{marginBottom:16}}),b.map(function(e){var t,l,o,c,i=(k[e.id]||[]).map(function(t){return eS(ew({},t),{_stackId:e.id})}),s=C[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(ex,{type:"secondary",style:{fontSize:12}},e.image),n().createElement(r.Tooltip,{title:m("Edit worker stack")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.EditOutlined,null),onClick:function(){return X(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(ex,null,m("Replicas"),":"),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ShrinkOutlined,null),disabled:y||0>=(I[e.id]||0),onClick:function(){return A(function(t){return eS(ew({},t),ek({},e.id,Math.max(0,(t[e.id]||0)-1)))})}}),n().createElement(r.InputNumber,{min:0,max:20,value:null!=(t=I[e.id])?t:e.desiredReplicas,onChange:function(t){return A(function(n){return eS(ew({},n),ek({},e.id,null!=t?t:0))})},style:{width:70}}),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ExpandAltOutlined,null),disabled:y||(I[e.id]||0)>=20,onClick:function(){return A(function(t){return eS(ew({},t),ek({},e.id,Math.min(20,(t[e.id]||0)+1)))})}}),n().createElement(r.Button,{type:"primary",loading:y,onClick:function(){return et(e.id)},disabled:(null!=(l=I[e.id])?l:e.desiredReplicas)===s.running},m("Scale")),n().createElement(ex,{type:"secondary"},null!=(o=s.running)?o:"?"," / ",null!=(c=I[e.id])?c:e.desiredReplicas," ",m("running")),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return G(e.id)}})),n().createElement(r.Table,{dataSource:i,columns:ea,rowKey:"id",size:"small",pagination:!1,locale:{emptyText:m("No containers")}}))})):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:m("Orchestrator Not Connected"),description:m("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 _(!0)}},m("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(m("Logs"),": ").concat(R.containerId),open:R.visible,onCancel:function(){return j({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"}},R.logs.length>0?R.logs.join("\n"):m("No logs available"))),n().createElement(r.Modal,{title:"".concat(m("Package Logs"),": ").concat(z.containerName),open:z.visible,onCancel:function(){return F({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"}},z.logs||m("No logs available"))),n().createElement(r.Modal,{title:U.stack?m("Edit worker stack"):m("New worker stack"),open:U.visible,onCancel:Z,onOk:function(){return V.submit()},okText:m("Save"),confirmLoading:y,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:V,layout:"vertical",onFinish:ee},n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"name",label:m("Stack name"),rules:[{required:!0,message:m("Stack name is required")},{pattern:/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/,message:m("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:m("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:m("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"kubernetes"},m("Kubernetes")),n().createElement(r.Select.Option,{value:"docker"},m("Docker"))))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"desiredReplicas",label:m("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:m("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:m("Deployment name")},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"serviceAccountName",label:m("Service account")},n().createElement(r.Input,{placeholder:"nocobase-orchestrator"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"imagePullPolicy",label:m("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:12},n().createElement(r.Form.Item,{name:"k8sContainerName",label:m("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"namespace",label:m("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"})))),n().createElement(r.Form.Item,{name:"command",label:m("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:m("Environment variables JSON")},n().createElement(r.Input.TextArea,{rows:8}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"resourceLimits",label:m("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:m("Kubernetes envFrom JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnv",label:m("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:m("Kubernetes volumeMounts JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumes",label:m("Kubernetes volumes JSON")},n().createElement(r.Input.TextArea,{rows:7})))))),n().createElement(r.Modal,{title:m("Orchestrator Settings"),open:q,onCancel:function(){return _(!1)},footer:null,width:600},n().createElement(r.Form,{form:H,layout:"vertical",onFinish:Q,initialValues:{adapterType:"none",k8sNamespace:"nocobase",workerLabelSelector:"role=worker"}},n().createElement(r.Form.Item,{name:"adapterType",label:m("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"none"},m("Disabled")),n().createElement(r.Select.Option,{value:"docker"},m("Docker")),n().createElement(r.Select.Option,{value:"kubernetes"},m("Kubernetes")))),n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapterType!==t.adapterType}},function(){var e=H.getFieldValue("adapterType");return"docker"===e?n().createElement(r.Card,{size:"small",title:m("Docker Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"dockerSocketPath",label:m("Socket Path"),extra:"/var/run/docker.sock"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"dockerHost",label:m("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:m("Kubernetes Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"k8sNamespace",label:m("Namespace"),extra:"nocobase"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"k8sKubeconfig",label:m("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:m("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:y,block:!0},m("Save Settings & Reconnect")))))):n().createElement(r.Spin,{tip:m("Connecting to orchestrator..."),style:{display:"flex",justifyContent:"center",padding:48}})}var eF={apt:["python3","python3-pip","python3-venv"],python:["python-docx","openpyxl","pandas","matplotlib","Pillow","reportlab","jinja2","pyyaml","tabulate","xlsxwriter"],npm:["xlsx","docx","pdfkit","csv-parse","archiver","sharp","lodash","dayjs"]};function eN(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 eB(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Array.isArray(e)?eN(e):"string"!=typeof e?eN(t):eN(e.split(/[\n,]/).map(function(e){return e.trim()}).filter(Boolean))}function eD(e){return eN(e).join("\n")}function eL(e){return{apt:eB(e.aptPackages,eF.apt),python:eB(e.pythonPackages,eF.python),npm:eB(e.npmPackages,eF.npm)}}function eq(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function eK(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,c,"next",e)}function c(e){e_(l,r,a,o,c,"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:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eq(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 eq(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 eW(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var eH=r.Typography.Text,eV={pending:{color:"default",text:"Not initialized"},running:{color:"processing",text:"Running..."},succeeded:{color:"success",text:"Succeeded"},failed:{color:"error",text:"Failed"}};function eJ(e,t){return e.length?e.map(function(e){return n().createElement(r.Tag,{key:e,color:t,style:{marginBottom:2}},e)}):n().createElement(eH,{type:"secondary"},"-")}var e$=function(){var l,o,c,i,s,u,d,m,p,f=P(),y=(0,e.useAPIClient)(),h=eU(r.Form.useForm(),1)[0],g=eU((0,t.useState)(!1),2),b=g[0],v=g[1],E=eU((0,t.useState)(!1),2),k=E[0],w=E[1],S=eU((0,t.useState)(!1),2),C=S[0],O=S[1],x=eU((0,t.useState)(null),2),I=x[0],A=x[1],T=eU((0,t.useState)(null),2),R=T[0],j=T[1],M=eU((0,t.useState)("all"),2),z=M[0],F=M[1],N=r.Form.useWatch("aptPackages",h),B=r.Form.useWatch("pythonPackages",h),D=r.Form.useWatch("npmPackages",h),L=(0,t.useRef)(!1),q=(0,t.useCallback)(eK(function(){var e,t,n,r,a,l=arguments;return eW(this,function(o){switch(o.label){case 0:if(e=l.length>0&&void 0!==l[0]&&l[0],L.current)return[2];L.current=!0,e||v(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,y.request({url:"workerPackages:getPackageConfig"})];case 2:if(r=(null==(n=o.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 A(r),r&&(h.setFieldsValue({npmRegistryUrl:r.npmRegistryUrl,npmAuthToken:r.npmAuthToken,pypiIndexUrl:r.pypiIndexUrl,pypiTrustedHost:r.pypiTrustedHost,aptMirrorUrl:r.aptMirrorUrl,aptGpgKeyUrl:r.aptGpgKeyUrl,aptPackages:eB(r.aptPackages,eF.apt),pythonPackages:eB(r.pythonPackages,eF.python),npmPackages:eB(r.npmPackages,eF.npm),retentionHours:null!=(a=r.retentionHours)?a:24}),"running"===r.initStatus?(O(!0),j({percent:r.initProgressPercent||0,log:r.initProgressLog||f("Processing...")})):(O(!1),j(null))),[3,5];case 3:return o.sent(),[3,5];case 4:return e||v(!1),L.current=!1,[7];case 5:return[2]}})}),[y,h,f]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){var e=setInterval(function(){return q(!0)},1e4);return function(){return clearInterval(e)}},[q]);var _=(l=eK(function(e){var t;return eW(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:eD(e.aptPackages),pythonPackages:eD(e.pythonPackages),npmPackages:eD(e.npmPackages)},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(a)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(a,e))}),t=r,!(null==I?void 0:I.id))return[3,2];return[4,y.request({url:"workerPackages:savePackageConfig",method:"post",params:{filterByTk:I.id},data:t})];case 1:return n.sent(),[3,4];case 2:return[4,y.request({url:"workerPackages:savePackageConfig",method:"post",data:t})];case 3:n.sent(),n.label=4;case 4:return[2]}})}),function(e){return l.apply(this,arguments)}),K=(o=eK(function(){return eW(this,function(e){switch(e.label){case 0:w(!0),e.label=1;case 1:return e.trys.push([1,4,5,6]),[4,_(h.getFieldsValue())];case 2:return e.sent(),r.message.success(f("Config saved")),[4,q()];case 3:return e.sent(),[3,6];case 4:return e.sent(),r.message.error(f("Failed to save config")),[3,6];case 5:return w(!1),[7];case 6:return[2]}})}),function(){return o.apply(this,arguments)}),U=(c=eK(function(){var e,t;return eW(this,function(n){switch(n.label){case 0:O(!0),j({percent:0,log:f("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,_(e=h.getFieldsValue())];case 2:return n.sent(),[4,y.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:z,packages:eL(e||{}),registryConfig:{aptMirrorUrl:e.aptMirrorUrl,npmRegistryUrl:e.npmRegistryUrl,pypiIndexUrl:e.pypiIndexUrl,pypiTrustedHost:e.pypiTrustedHost}}})];case 3:return n.sent(),r.message.info(f("Install task dispatched")),[4,q()];case 4:return n.sent(),[3,6];case 5:return t=n.sent(),r.message.error((null==t?void 0:t.message)||f("Failed to install packages/modules")),O(!1),j(null),[3,6];case 6:return[2]}})}),function(){return c.apply(this,arguments)}),W=eV[null==I?void 0:I.initStatus]||eV.pending,H=(null==I?void 0:I.packageWhitelist)||{},V=(null==H||null==(i=H.python)?void 0:i.length)>0||(null==H||null==(s=H.node)?void 0:s.length)>0||(null==H||null==(u=H.apt)?void 0:u.length)>0,J=eL({aptPackages:null!=N?N:eF.apt,pythonPackages:null!=B?B:eF.python,npmPackages:null!=D?D:eF.npm});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,f("Cluster Package Installer"))),size:"small",style:{marginBottom:16},extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),size:"small",onClick:q,loading:b},f("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement("div",null,n().createElement(eH,{strong:!0},f("Status"),": "),n().createElement(r.Tag,{color:W.color},f(W.text)),(null==I?void 0:I.lastInitAt)&&n().createElement(eH,{type:"secondary",style:{fontSize:12}},"(",new Date(I.lastInitAt).toLocaleString(),")")),n().createElement("div",null,n().createElement(eH,{strong:!0,style:{marginRight:8}},f("Target"),": "),n().createElement(r.Select,{value:z,onChange:F,style:{width:240},options:[{label:f("All app and worker nodes"),value:"all"},{label:f("App nodes only"),value:"app"},{label:f("Worker nodes only"),value:"worker"}]})),n().createElement(r.Alert,{type:"info",showIcon:!0,message:f("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:C?n().createElement(a.ReloadOutlined,{spin:!0}):n().createElement(a.CloudServerOutlined,null),onClick:function(){return U()},size:"large"},C?f("Installing... (Click to Force Run)"):f("Install packages/modules")),C&&n().createElement(r.Button,{danger:!0,onClick:eK(function(){return eW(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,y.request({url:"workerPackages:resetInitStatus",method:"post"})];case 1:return e.sent(),r.message.success(f("Install status reset to stopped")),[4,q()];case 2:return e.sent(),[3,4];case 3:return e.sent(),r.message.error(f("Failed to stop installation")),[3,4];case 4:return[2]}})}),size:"large"},f("Stop / Reset Status"))),C&&R&&n().createElement("div",null,n().createElement(r.Progress,{percent:R.percent,status:"active"}),n().createElement(eH,{type:"secondary"},R.log)),(null==I?void 0:I.lastInitLog)&&"running"!==I.initStatus&&n().createElement("div",null,n().createElement(eH,{strong:!0},f("Last Install Log"),":"),n().createElement("pre",{style:{background:"#f5f5f5",padding:8,borderRadius:4,fontSize:11,maxHeight:220,overflow:"auto",whiteSpace:"pre-wrap",marginTop:4}},I.lastInitLog)))),n().createElement(r.Card,{title:f("Package/module settings"),size:"small",style:{marginBottom:16}},n().createElement(r.Form,{form:h,layout:"vertical"},n().createElement(r.Form.Item,{name:"aptPackages",label:f("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:f("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:f("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:f("APT mirror URL")},n().createElement(r.Input,{placeholder:"https://deb.debian.org/debian"})),n().createElement(r.Form.Item,{name:"npmRegistryUrl",label:f("NPM registry URL")},n().createElement(r.Input,{placeholder:"https://registry.npmjs.org/"})),n().createElement(r.Form.Item,{name:"pypiIndexUrl",label:f("PyPI index URL")},n().createElement(r.Input,{placeholder:"https://pypi.org/simple"})),n().createElement(r.Button,{type:"primary",onClick:K,loading:k},f("Save settings"))),n().createElement(r.Divider,{style:{margin:"16px 0"}}),n().createElement(eH,{strong:!0},f("Install plan"),":"),n().createElement("div",{style:{marginTop:8}},n().createElement(eH,{type:"secondary"},"APT: "),eJ(J.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Python: "),eJ(J.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Node: "),eJ(J.npm||[],"green"))),n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.SafetyOutlined,null),n().createElement("span",null,f("Installed package/module whitelist"))),size:"small"},V?n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},(null==H||null==(d=H.apt)?void 0:d.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"APT: "),eJ(H.apt)),(null==H||null==(m=H.python)?void 0:m.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Python: "),eJ(H.python,"blue")),(null==H||null==(p=H.node)?void 0:p.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Node: "),eJ(H.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:f("No successful install has generated a whitelist yet.")})))};function eG(){var e=P();return n().createElement("div",{style:{padding:24}},n().createElement(r.Tabs,{defaultActiveKey:"cluster",items:[{key:"cluster",label:e("Cluster Nodes"),children:n().createElement(L,null)},{key:"tasks",label:e("Async Tasks"),children:n().createElement(g,null)},{key:"executions",label:e("Workflow Executions"),children:n().createElement(A,null)},{key:"cache",label:e("Cache Monitor"),children:n().createElement(eg,null)},{key:"orchestrator",label:e("Container Orchestrator"),children:n().createElement(ez,null)},{key:"packages",label:e("Packages"),children:n().createElement(e$,null)}]}))}function eY(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function eQ(e,t,n){return(eQ=e1()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&eZ(a,n.prototype),a}).apply(null,arguments)}function eX(e){return(eX=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function eZ(e,t){return(eZ=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function e0(e){var t="function"==typeof Map?new Map:void 0;return(e0=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 eQ(e,arguments,eX(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),eZ(n,e)})(e)}function e1(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(e1=function(){return!!e})()}var e2=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=eX(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,e1()?Reflect.construct(e,t||[],eX(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&eZ(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(e){return t.app.pluginSettingsManager.add("plugin-cluster-manager",{title:'{{t("Cluster Manager")}}',icon:"DashboardOutlined",Component:eG}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eY(l,r,a,o,c,"next",e)}function c(e){eY(l,r,a,o,c,"throw",e)}o(void 0)})})()}}],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}(e0(e.Plugin)),e3=e2}(),i}()});
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("dayjs"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-cluster-manager",["dayjs","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-cluster-manager"]=t(require("dayjs"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-cluster-manager"]=t(e.dayjs,e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,a){return function(){"use strict";var l={482:function(e){e.exports=r},772:function(e){e.exports=t},721:function(e){e.exports=a},760:function(t){t.exports=e},156:function(e){e.exports=n}},o={};function c(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return l[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.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return!function(){c.r(i),c.d(i,{PluginClusterManagerClient:function(){return e2},default:function(){return e3}});var e=c(772),t=c(156),n=c.n(t),r=c(721),a=c(482),l=c(760),o=c.n(l);function s(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 u(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){u(l,r,a,o,c,"next",e)}function c(e){u(l,r,a,o,c,"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 p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(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 s(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 y(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[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 g(){var l,c,i,s=(0,e.useAPIClient)(),u=f((0,t.useState)([]),2),g=u[0],b=u[1],v=f((0,t.useState)(!1),2),E=v[0],k=v[1],w=f((0,t.useState)({current:1,pageSize:20,total:0}),2),S=w[0],C=w[1],O=f((0,t.useState)(void 0),2),x=O[0],I=O[1],A=(0,t.useCallback)(d(function(){var e,t,n,a,l=arguments;return y(this,function(o){switch(o.label){case 0:e=l.length>0&&void 0!==l[0]?l[0]:S.current,t=l.length>1&&void 0!==l[1]?l[1]:S.pageSize,k(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,s.request({url:"clusterManager:list",params:{page:e,pageSize:t,statusFilter:void 0===x?"":x}})];case 2:return b(Array.isArray(null==(a=o.sent().data)||null==(n=a.data)?void 0:n.data)?a.data.data:Array.isArray(null==a?void 0:a.data)?a.data:Array.isArray(a)?a:[]),C(function(t){var n,r;return p(m({},t),{current:(null==(n=a.meta)?void 0:n.page)||e,total:(null==(r=a.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 k(!1),[7];case 5:return[2]}})}),[s,S.current,S.pageSize,x]);(0,t.useEffect)(function(){A()},[x]);var P=(l=d(function(e){return y(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManager:cancel",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Task canceled"),A(),[2]}})}),function(e){return l.apply(this,arguments)}),T=(c=d(function(e){return y(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManager:retry",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Task re-queued"),A(),[2]}})}),function(e){return c.apply(this,arguments)}),R=(i=d(function(e){var t,n;return y(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.request({url:"clusterManager:purge",method:"post",data:{days:e}})];case 1:return n=a.sent(),r.message.success("Purged ".concat((null==n||null==(t=n.data)?void 0:t.deletedCount)||0," tasks")),A(),[3,3];case 2:return a.sent(),r.message.error("Failed to purge tasks"),[3,3];case 3:return[2]}})}),function(e){return i.apply(this,arguments)}),j=[{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?o()(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=o()(n).diff(o()(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(e,t){return n().createElement(r.Space,null,(0===t.status||null===t.status)&&n().createElement(r.Popconfirm,{title:"Cancel this task?",onConfirm:function(){return P(t.id)}},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.StopOutlined,null),danger:!0})),(-1===t.status||-2===t.status)&&n().createElement(r.Popconfirm,{title:"Retry this task?",onConfirm:function(){return T(t.id)}},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:x,onChange:I,options:Object.entries(h).map(function(e){var t=f(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return A()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return R(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return R(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return R(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Purge Tasks"))),n().createElement(r.Table,{rowKey:"id",columns:j,dataSource:g,loading:E,size:"small",pagination:p(m({},S),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return A(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 v(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function E(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){v(l,r,a,o,c,"next",e)}function c(e){v(l,r,a,o,c,"throw",e)}o(void 0)})}}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(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){k(e,t,n[t])})}return e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var x={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"}},I={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 l,c,i,s=(0,e.useAPIClient)(),u=C((0,t.useState)([]),2),d=u[0],m=u[1],p=C((0,t.useState)(!1),2),f=p[0],y=p[1],h=C((0,t.useState)({current:1,pageSize:20,total:0}),2),g=h[0],b=h[1],v=C((0,t.useState)(void 0),2),A=v[0],P=v[1],T=C((0,t.useState)({}),2),R=T[0],j=T[1],M=C((0,t.useState)({}),2),z=M[0],F=M[1],N=(0,t.useCallback)(E(function(){var e,t,n,a,l=arguments;return O(this,function(o){switch(o.label){case 0:e=l.length>0&&void 0!==l[0]?l[0]:g.current,t=l.length>1&&void 0!==l[1]?l[1]:g.pageSize,y(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerWorkflow:list",params:{page:e,pageSize:t,statusFilter:void 0===A?"":A}})];case 2:return m(Array.isArray(null==(a=o.sent().data)||null==(n=a.data)?void 0:n.data)?a.data.data:Array.isArray(null==a?void 0:a.data)?a.data:Array.isArray(a)?a:[]),b(function(t){var n,r;return S(w({},t),{current:(null==(n=a.meta)?void 0:n.page)||e,total:(null==(r=a.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 y(!1),[7];case 5:return[2]}})}),[s,g.current,g.pageSize,A]);(0,t.useEffect)(function(){N()},[A]);var B=(l=E(function(e){var t,n,a,l,o;return O(this,function(c){switch(c.label){case 0:if(R[e])return[2];F(function(t){return S(w({},t),k({},e,!0))}),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerWorkflow:getJobs",params:{filterByTk:e}})];case 2:return o=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:[],j(function(t){return S(w({},t),k({},e,o))}),[3,5];case 3:return c.sent(),r.message.error("Failed to load jobs"),[3,5];case 4:return F(function(t){return S(w({},t),k({},e,!1))}),[7];case 5:return[2]}})}),function(e){return l.apply(this,arguments)}),D=(c=E(function(e){return O(this,function(t){switch(t.label){case 0:return[4,s.request({url:"clusterManagerWorkflow:cancel",params:{filterByTk:e}})];case 1:return t.sent(),r.message.success("Execution canceled"),N(),[2]}})}),function(e){return c.apply(this,arguments)}),L=(i=E(function(e){var t,n;return O(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.request({url:"clusterManagerWorkflow:purge",method:"post",data:{days:e}})];case 1:return n=a.sent(),r.message.success("Purged ".concat((null==n||null==(t=n.data)?void 0:t.deletedCount)||0," executions")),N(),[3,3];case 2:return a.sent(),r.message.error("Failed to purge executions"),[3,3];case 3:return[2]}})}),function(e){return i.apply(this,arguments)}),q=[{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=I[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):"-"}}],_=[{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=x[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?o()(e).format("YYYY-MM-DD HH:mm:ss"):"-"}},{title:"Actions",key:"actions",width:120,render:function(e,t){return n().createElement(r.Space,null,n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(a.UnorderedListOutlined,null),onClick:function(){return B(t.id)},loading:z[t.id]},"Jobs"),(0===t.status||null===t.status)&&n().createElement(r.Popconfirm,{title:"Cancel execution?",onConfirm:function(){return D(t.id)}},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:A,onChange:P,options:Object.entries(x).map(function(e){var t=C(e,2);return{value:t[0],label:t[1].label}})}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return N()}},"Refresh"),n().createElement(r.Dropdown,{menu:{items:[{key:"7",label:"Older than 7 days",onClick:function(){return L(7)}},{key:"30",label:"Older than 30 days",onClick:function(){return L(30)}},{key:"0",label:"All completed/failed",danger:!0,onClick:function(){return L(0)}}]},trigger:["click"]},n().createElement(r.Button,{danger:!0},"Clear History"))),n().createElement(r.Table,{rowKey:"id",columns:_,dataSource:d,loading:f,size:"small",expandable:{expandedRowRender:function(e){var t=R[e.id];return t?n().createElement(r.Table,{rowKey:"id",columns:q,dataSource:t,size:"small",pagination:!1}):n().createElement("div",{style:{padding:8}},'Click "Jobs" to load')}},pagination:S(w({},g),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return N(e,t)}})}))}function P(){var n=(0,e.useApp)();return(0,t.useCallback)(function(e){return n.i18n.t(e,{ns:"cluster-manager"})},[n.i18n])}function T(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 j(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function z(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,c,"next",e)}function c(e){M(l,r,a,o,c,"throw",e)}o(void 0)})}}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return j(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 j(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 N(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function B(l){var o=l.open,c=l.node,i=l.onClose,s=P(),u=(0,e.useAPIClient)(),d=F((0,t.useState)([]),2),m=d[0],p=d[1],f=F((0,t.useState)(null),2),y=f[0],h=f[1],g=F((0,t.useState)(!1),2),b=g[0],v=g[1],E=F((0,t.useState)(!0),2),k=E[0],w=E[1],S=F((0,t.useState)(""),2),C=S[0],O=S[1],x=(0,t.useRef)(null),I=(0,t.useCallback)(z(function(){var e,t,n;return N(this,function(a){switch(a.label){case 0:if(!o)return[2];v(!0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,u.request({url:"clusterManagerCluster:logs",params:{lines:200,targetNodeId:null==c?void 0:c.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 v(!1),[7];case 5:return[2]}})}),[u,o,c]);(0,t.useEffect)(function(){o&&(p([]),O(""),w(!0),I())},[o,I]),(0,t.useEffect)(function(){if(o&&k){var e=setInterval(I,5e3);return function(){return clearInterval(e)}}},[o,k,I]),(0,t.useEffect)(function(){x.current&&!C&&x.current.scrollIntoView({behavior:"smooth"})},[m,C]);var A=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),s("Instance Logs")," — ",(null==c?void 0:c.name)||"",y&&n().createElement(r.Tag,null,y.hostname,":",y.pid," (",y.workerMode,")")),open:o,onCancel:i,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:s("Search logs..."),prefix:n().createElement(a.SearchOutlined,null),value:C,onChange:function(e){return O(e.target.value)},allowClear:!0,style:{width:300}}),n().createElement(r.Switch,{checked:k,onChange:w,checkedChildren:s("Auto 5s"),unCheckedChildren:s("Paused")}),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:I,loading:b,size:"small"},s("Refresh")),n().createElement("span",{style:{fontSize:12,color:"#888"}},A.length," / ",m.length," ",s("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===A.length&&!b&&n().createElement("div",{style:{color:"#888",textAlign:"center",paddingTop:40}},s(0===m.length?"No logs available":"No matching logs")),A.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:x})))}var D={ok:"green",connected:"green",online:"green",warning:"orange",disconnected:"red",offline:"red",error:"red",not_configured:"default"};function L(){var l,o=P(),c=(0,e.useAPIClient)(),i=F((0,t.useState)(!1),2),s=i[0],u=i[1],d=F((0,t.useState)(null),2),m=d[0],p=d[1],f=F((0,t.useState)([]),2),y=f[0],h=f[1],g=F((0,t.useState)(null),2),b=g[0],v=g[1],E=F((0,t.useState)(null),2),k=E[0],w=E[1],S=F((0,t.useState)(null),2),C=S[0],O=S[1],x=(0,t.useCallback)(z(function(){var e,t,n,r,a,l,o,i;return N(this,function(s){switch(s.label){case 0:u(!0),s.label=1;case 1:return s.trys.push([1,3,4,5]),[4,Promise.all([c.request({url:"clusterManagerCluster:current"}),c.request({url:"clusterManagerCluster:list"}),c.request({url:"clusterManagerCluster:health"})])];case 2:return l=(a=F.apply(void 0,[s.sent(),3]))[0],o=a[1],i=a[2],p(null==l||null==(e=l.data)?void 0:e.data),h((null==o||null==(n=o.data)||null==(t=n.data)?void 0:t.data)||[]),v(null==i||null==(r=i.data)?void 0:r.data),[3,5];case 3:return s.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[c]),I=(l=z(function(e,t){return N(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(x,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]}})}),function(e,t){return l.apply(this,arguments)});(0,t.useEffect)(function(){x()},[x]),(0,t.useEffect)(function(){if(k){var e=setInterval(x,1e3*k);return function(){return clearInterval(e)}}},[k,x]);var A=y.filter(function(e){return"online"===e.status}).length,j=[{title:o("Name"),dataIndex:"name",key:"name",width:200},{title:o("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:D[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:o("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:o("PID"),dataIndex:"pid",key:"pid",width:80},{title:o("Version"),dataIndex:"appVersion",key:"appVersion",width:120},{title:o("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 O(t)},disabled:"offline"===t.status},o("Logs")))}}],M=(null==b?void 0:b.checks)||{};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:x},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:k,onChange:w,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 I("*","soft")}},n().createElement(r.Button,{style:{color:"#faad14",borderColor:"#ffe58f"},icon:n().createElement(a.ReloadOutlined,null)},o("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 I("*","hard")}},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.ReloadOutlined,null)},o("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:o("Nodes Online"),value:A,suffix:"/ ".concat(y.length),prefix:n().createElement(a.ClusterOutlined,null),valueStyle:{color:A===y.length?"#3f8600":"#cf1322"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Worker Nodes"),value:y.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:o("Process Uptime"),value:m?R(m.node.uptime):"-"}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Memory (Heap)"),value:m?T(m.memory.heapUsed):"-",suffix:m?"/ ".concat(T(m.memory.heapTotal)):""})))),n().createElement(r.Card,{title:o("Health Checks"),size:"small"},b&&!b.healthy&&n().createElement(r.Alert,{type:"warning",message:o("Some subsystems are unhealthy"),showIcon:!0,style:{marginBottom:12}}),n().createElement(r.Row,{gutter:[16,8]},Object.entries(M).map(function(e){var t=F(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:D[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:o("Cluster Nodes"),size:"small"},n().createElement(r.Table,{dataSource:y,columns:j,rowKey:"id",size:"small",pagination:!1})),m&&n().createElement(r.Card,{title:n().createElement(r.Space,null,o("Current Node Details"),n().createElement(r.Tag,{color:"green"},"APP")),size:"small"},m._fallback&&n().createElement(r.Alert,{type:"warning",message:o("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:o("Hostname")},m.node.hostname),n().createElement(r.Descriptions.Item,{label:"PID"},m.node.pid),n().createElement(r.Descriptions.Item,{label:"Node.js"},m.node.nodeVersion),n().createElement(r.Descriptions.Item,{label:o("Worker Mode")},m.node.workerMode||"(default)"),n().createElement(r.Descriptions.Item,{label:o("App Port")},m.node.appPort),n().createElement(r.Descriptions.Item,{label:o("Cluster Mode")},m.node.clusterMode||"(disabled)"),n().createElement(r.Descriptions.Item,{label:o("RSS Memory")},T(m.memory.rss)),n().createElement(r.Descriptions.Item,{label:o("OS Memory")},T(m.os.freeMemory)," free / ",T(m.os.totalMemory)),n().createElement(r.Descriptions.Item,{label:o("CPU Cores")},m.os.cpuCount))),n().createElement(B,{open:!!C,node:C,onClose:function(){return O(null)}})))}function q(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,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function K(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){_(l,r,a,o,c,"next",e)}function c(e){_(l,r,a,o,c,"throw",e)}o(void 0)})}}function U(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||W(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 W(e,t){if(e){if("string"==typeof e)return q(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 q(e,t)}}function H(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var V=r.Typography.Text;function J(){var l,o,c,i,s=(0,e.useAPIClient)(),u=P(),d=U((0,t.useState)(null),2),m=d[0],p=d[1],f=U((0,t.useState)([]),2),y=f[0],h=f[1],g=U((0,t.useState)(!1),2),b=g[0],v=g[1],E=U((0,t.useState)(null),2),k=E[0],w=E[1],S=(0,t.useCallback)(K(function(){var e,t,n,a,l,o,c;return H(this,function(i){switch(i.label){case 0:v(!0),i.label=1;case 1:return i.trys.push([1,3,4,5]),[4,Promise.all([s.request({url:"clusterManagerAclCache:stats"}),s.request({url:"clusterManagerAclCache:listKeys"})])];case 2:return o=(l=U.apply(void 0,[i.sent(),2]))[0],c=l[1],p((null==o||null==(e=o.data)?void 0:e.data)||(null==o?void 0:o.data)||{}),h(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 i.sent(),r.message.error("Failed to load ACL cache data"),[3,5];case 4:return v(!1),[7];case 5:return[2]}})}),[s]);(0,t.useEffect)(function(){S()},[]),(0,t.useEffect)(function(){if(k){var e=setInterval(S,1e3*k);return function(){return clearInterval(e)}}},[k,S]);var C=(l=K(function(){var e,t;return H(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,s.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")),S(),[3,3];case 2:return n.sent(),r.message.error("Failed to clear cache"),[3,3];case 3:return[2]}})}),function(){return l.apply(this,arguments)}),O=(o=K(function(){return H(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,s.request({url:"clusterManagerAclCache:resetStats",method:"post"})];case 1:return e.sent(),r.message.success("Stats reset"),S(),[3,3];case 2:return e.sent(),r.message.error("Failed to reset stats"),[3,3];case 3:return[2]}})}),function(){return o.apply(this,arguments)}),x=(c=K(function(e){var t,n;return H(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,s.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,'"')),S(),[3,3];case 2:return a.sent(),r.message.error("Failed to clear role cache"),[3,3];case 3:return[2]}})}),function(e){return c.apply(this,arguments)});if(!m)return null;var I=Object.entries(m.detailByRole||{}).map(function(e){var t,n,r=U(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,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}),A=[{title:u("Role"),dataIndex:"role",width:120,filters:((function(e){if(Array.isArray(e))return q(e)})(i=new Set(y.map(function(e){return e.role})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||W(i)||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:u("Resource"),dataIndex:"resource",width:200},{title:u("Action"),dataIndex:"action",width:120},{title:u("Cache Key"),dataIndex:"key",ellipsis:!0,render:function(e){return n().createElement(V,{code:!0,style:{fontSize:11}},e)}}],T=[{title:u("Role"),dataIndex:"role",width:150},{title:u("Checks"),dataIndex:"checks",width:100,sorter:function(e,t){return e.checks-t.checks}},{title:u("Hits"),dataIndex:"hits",width:100,render:function(e){return n().createElement(V,{type:"success"},e)}},{title:u("Misses"),dataIndex:"misses",width:100,render:function(e){return n().createElement(V,{type:"danger"},e)}},{title:u("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:u("Actions"),width:80,render:function(e,t){return n().createElement(r.Popconfirm,{title:"".concat(u("Clear cache for role"),' "').concat(t.role,'"?'),onConfirm:function(){return x(t.role)}},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:S,loading:b},u("Refresh")),n().createElement(r.Select,{placeholder:u("Auto refresh"),allowClear:!0,style:{width:160},value:k,onChange:w,options:[{value:5,label:u("Every 5s")},{value:10,label:u("Every 10s")},{value:30,label:u("Every 30s")}]}),n().createElement(r.Popconfirm,{title:u("Clear all ACL cache entries?"),onConfirm:C},n().createElement(r.Button,{icon:n().createElement(a.DeleteOutlined,null),danger:!0},u("Clear All Cache"))),n().createElement(r.Popconfirm,{title:u("Reset ACL stats counters?"),onConfirm:O},n().createElement(r.Button,null,u("Reset Stats"))),n().createElement(r.Tag,null,"TTL: ",m.ttlSeconds,"s"),n().createElement(r.Tag,null,u("Since"),": ",new Date(m.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:u("Total ACL Checks"),value:m.totalChecks,prefix:n().createElement(a.SafetyCertificateOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Cache Hits"),value:m.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:u("Cache Misses"),value:m.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:u("Hit Rate"),value:m.hitRate,suffix:"%",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:m.hitRate>80?"#3f8600":m.hitRate>50?"#faad14":"#cf1322"}}),n().createElement(V,{type:"secondary"},u("Cached keys"),": ",m.cachedKeys)))),n().createElement(r.Row,{gutter:[16,16],style:{marginTop:16}},n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:u("Stats by Role"),size:"small"},0===I.length?n().createElement(V,{type:"secondary"},u("No ACL checks recorded yet")):n().createElement(r.Table,{rowKey:"role",size:"small",pagination:!1,dataSource:I,columns:T}))),n().createElement(r.Col,{span:12},n().createElement(r.Card,{title:"".concat(u("Cached Permission Keys")," (").concat(y.length,")"),size:"small"},0===y.length?n().createElement(V,{type:"secondary"},u("No cached keys")):n().createElement(r.Table,{rowKey:"key",size:"small",pagination:{pageSize:10,size:"small"},dataSource:y,columns:A})))))}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 G(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function Y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(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)}}(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 Q=r.Typography.Text;function X(){var l,o=(0,e.useAPIClient)(),c=Y((0,t.useState)(null),2),i=c[0],s=c[1],u=Y((0,t.useState)({}),2),d=u[0],m=u[1],p=Y((0,t.useState)(0),2),f=p[0],y=p[1],h=Y((0,t.useState)([]),2),g=h[0],b=h[1],v=Y((0,t.useState)([]),2),E=v[0],k=v[1],w=Y((0,t.useState)(!1),2),S=w[0],C=w[1],O=Y((0,t.useState)(null),2),x=O[0],I=O[1],A=Y((0,t.useState)(null),2),P=A[0],T=A[1],j=(0,t.useCallback)((l=function(){var e,t,n,r,a,l,c,i,u,d,p,f,h,g,v,E,w,S,O;return function(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(x){switch(x.label){case 0:C(!0),T(null),x.label=1;case 1:return x.trys.push([1,3,4,5]),[4,Promise.all([o.request({url:"clusterManagerRedis:info"}),o.request({url:"clusterManagerRedis:pubsub"}),o.request({url:"clusterManagerRedis:clients"}),o.request({url:"clusterManagerRedis:slowlog",params:{count:10}})])];case 2:return d=(u=Y.apply(void 0,[x.sent(),4]))[0],p=u[1],f=u[2],h=u[3],s((null==d||null==(e=d.data)?void 0:e.data)||(null==d?void 0:d.data)||{}),m((g=(null==p||null==(t=p.data)?void 0:t.data)||(null==p?void 0:p.data)||{}).channels||{}),y(g.total_channels||0),b(Array.isArray(null==f||null==(r=f.data)||null==(n=r.data)?void 0:n.data)?f.data.data.data:Array.isArray(null==f||null==(a=f.data)?void 0:a.data)?f.data.data:Array.isArray(null==f?void 0:f.data)?f.data:[]),k(Array.isArray(null==h||null==(c=h.data)||null==(l=c.data)?void 0:l.data)?h.data.data.data:Array.isArray(null==h||null==(i=h.data)?void 0:i.data)?h.data.data:Array.isArray(null==h?void 0:h.data)?h.data:[]),[3,5];case 3:return T((null==(v=x.sent())||null==(O=v.response)||null==(S=O.data)||null==(w=S.errors)||null==(E=w[0])?void 0:E.message)||"Failed to connect to Redis"),[3,5];case 4:return C(!1),[7];case 5:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,r){var a=l.apply(e,t);function o(e){G(a,n,r,o,c,"next",e)}function c(e){G(a,n,r,o,c,"throw",e)}o(void 0)})}),[o]);if((0,t.useEffect)(function(){j()},[]),(0,t.useEffect)(function(){if(x){var e=setInterval(j,1e3*x);return function(){return clearInterval(e)}}},[x,j]),P)return n().createElement(r.Card,null,n().createElement(Q,{type:"danger"},P),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:j},"Retry"));if(!i)return null;var M="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:j,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:x,onChange:I,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!==M?"(".concat(M,"%)"):void 0}),n().createElement(Q,{type:"secondary"},"Peak: ",i.memory.peak),n().createElement("br",null),n().createElement(Q,{type:"secondary"},"Max: ",i.memory.max_memory),n().createElement("br",null),n().createElement(Q,{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(Q,{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(Q,{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(Q,{type:"secondary"},"Hits: ",i.stats.keyspace_hits.toLocaleString()," / Misses:"," ",i.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(Q,{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(Q,{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=Y(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(f,")"),size:"small"},0===f?n().createElement(Q,{type:"secondary"},"No active channels"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(d).map(function(e){var t=Y(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===E.length?n().createElement(Q,{type:"secondary"},"No slow queries"):n().createElement(r.Table,{rowKey:"id",size:"small",pagination:!1,dataSource:E,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(Z,null))))}function Z(){var a=(0,e.useAPIClient)(),l=Y((0,t.useState)(null),2),o=l[0],c=l[1];return((0,t.useEffect)(function(){a.request({url:"clusterManagerRedis:syncMessages"}).then(function(e){var t;return c(null==e||null==(t=e.data)?void 0:t.data)}).catch(function(){})},[a]),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 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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){et(l,r,a,o,c,"next",e)}function c(e){et(l,r,a,o,c,"throw",e)}o(void 0)})}}function er(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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.")}()}function ea(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function el(){var l,o,c=P(),i=(0,e.useAPIClient)(),s=er((0,t.useState)(!1),2),u=s[0],d=s[1],m=er((0,t.useState)(null),2),p=m[0],f=m[1],y=er((0,t.useState)([]),2),h=y[0],g=y[1],b=er((0,t.useState)(null),2),v=b[0],E=b[1],k=(0,t.useCallback)(en(function(){var e,t,n,r,a,l;return ea(this,function(o){switch(o.label){case 0:d(!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=er.apply(void 0,[o.sent(),2]))[0],l=r[1],f(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 d(!1),[7];case 5:return[2]}})}),[i]);(0,t.useEffect)(function(){k()},[k]),(0,t.useEffect)(function(){if(v){var e=setInterval(k,1e3*v);return function(){return clearInterval(e)}}},[v,k]);var w=(l=en(function(e){return ea(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(c("Lock released")),k(),[3,3];case 2:return t.sent(),r.message.error(c("Failed to release lock")),[3,3];case 3:return[2]}})}),function(e){return l.apply(this,arguments)}),S=[{title:c("Lock Key"),dataIndex:"key",key:"key",render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:c("Adapter"),dataIndex:"adapter",key:"adapter",width:100,render:function(e){return n().createElement(r.Tag,null,e)}},{title:c("TTL"),dataIndex:"ttl",key:"ttl",width:120,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:c("Actions"),key:"actions",width:120,render:function(e,t){return n().createElement(r.Popconfirm,{title:c("Force release this lock?"),description:c("This may cause data inconsistency. Use with caution."),onConfirm:function(){return w(t.key)},okText:c("Release"),cancelText:c("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.UnlockOutlined,null)},c("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:k},c("Refresh")),n().createElement(r.Select,{placeholder:c("Auto Refresh"),allowClear:!0,value:v,onChange:E,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:c("Adapter Type"),value:(null==p?void 0:p.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:c("Active Locks"),value:null!=(o=null==p?void 0:p.activeLocks)?o:0,prefix:n().createElement(a.LockOutlined,null),valueStyle:{color:((null==p?void 0:p.activeLocks)||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:c("Total Listed"),value:h.length})))),n().createElement(r.Card,{title:c("Active Locks"),size:"small"},0===h.length?n().createElement("div",{style:{textAlign:"center",padding:24,color:"#999"}},c("No active locks")):n().createElement(r.Table,{dataSource:h,columns:S,rowKey:"key",size:"small",pagination:{pageSize:20}}))))}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 ec(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function ei(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,c,"next",e)}function c(e){ec(l,r,a,o,c,"throw",e)}o(void 0)})}}function es(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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 eu(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function ed(){var l,o=P(),c=(0,e.useAPIClient)(),i=es((0,t.useState)(!1),2),s=i[0],u=i[1],d=es((0,t.useState)(null),2),m=d[0],p=d[1],f=es((0,t.useState)(null),2),y=f[0],h=f[1],g=es((0,t.useState)(null),2),b=g[0],v=g[1],E=es((0,t.useState)([]),2),k=E[0],w=E[1],S=es((0,t.useState)({}),2),C=S[0],O=S[1],x=(0,t.useCallback)(ei(function(){var e,t;return eu(this,function(n){switch(n.label){case 0:u(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,c.request({url:"clusterManagerQueue:stats"})];case 2:return p(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[c]),I=(0,t.useCallback)((l=ei(function(e){var t,n,r,a,l;return eu(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return w((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),O((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]}})}),function(e){return l.apply(this,arguments)}),[c]);(0,t.useEffect)(function(){x()},[x]),(0,t.useEffect)(function(){if(y){var e=setInterval(x,1e3*y);return function(){return clearInterval(e)}}},[y,x]);var A=[{title:o("Channel"),dataIndex:"channel",key:"channel"},{title:o("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:o("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:o("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:o("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){v(t.channel),I(t.channel)}},o("Messages"))}}],T=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:o("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:o("Retried"),dataIndex:"retried",key:"retried",width:80},{title:o("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];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:x},o("Refresh")),n().createElement(r.Select,{placeholder:o("Auto Refresh"),allowClear:!0,value:y,onChange:h,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),m&&n().createElement(r.Tag,{color:m.connected?"green":"red"},m.adapter)),m&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Adapter"),value:m.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:o("Total Channels"),value:m.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Total Pending"),value:m.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:m.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Connected"),value:m.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:m.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:o("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==m?void 0:m.channels)||[],columns:A,rowKey:"channel",size:"small",pagination:!1})),b&&n().createElement(r.Card,{title:"".concat(o("Messages"),": ").concat(b),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return v(null)}},"Close")},C.note&&n().createElement(r.Tag,{style:{marginBottom:8}},C.note),n().createElement(r.Table,{dataSource:k,columns:T,rowKey:"id",size:"small",pagination:{pageSize:10,total:C.count}}))))}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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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,c,"next",e)}function c(e){ep(l,r,a,o,c,"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:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)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,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function eg(){var l,o=P(),c=(0,e.useAPIClient)(),i=ey((0,t.useState)(!1),2),s=i[0],u=i[1],d=ey((0,t.useState)([]),2),m=d[0],p=d[1],f=ey((0,t.useState)([]),2),y=f[0],h=f[1],g=ey((0,t.useState)(null),2),b=g[0],v=g[1],E=(0,t.useCallback)(ef(function(){var e,t,n,r,a,l,o,i,s;return eh(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([c.request({url:"clusterManagerCacheMgr:stores"}),c.request({url:"clusterManagerCacheMgr:caches"}),c.request({url:"clusterManagerCacheMgr:redisMemory"})])];case 2:return o=(l=ey.apply(void 0,[d.sent(),3]))[0],i=l[1],s=l[2],p((null==o||null==(t=o.data)||null==(e=t.data)?void 0:e.data)||[]),h((null==i||null==(r=i.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]}})}),[c]);(0,t.useEffect)(function(){E()},[E]);var k=(l=ef(function(){return eh(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.request({url:"clusterManagerCacheMgr:flushAll",method:"post"})];case 1:return e.sent(),r.message.success(o("All caches flushed")),E(),[3,3];case 2:return e.sent(),r.message.error(o("Failed to flush caches")),[3,3];case 3:return[2]}})}),function(){return l.apply(this,arguments)}),w=[{title:o("Store Name"),dataIndex:"name",key:"name"},{title:o("Type"),dataIndex:"type",key:"type",width:120,render:function(e){return n().createElement(r.Tag,{color:"redis"===e?"blue":"default"},e)}},{title:o("Default"),dataIndex:"isDefault",key:"isDefault",width:100,render:function(e){return e?n().createElement(r.Tag,{color:"green"},"Yes"):"-"}}],S=[{title:o("Cache Name"),dataIndex:"name",key:"name"},{title:o("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:o("Cache Stores"),children: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:E},o("Refresh")),n().createElement(r.Popconfirm,{title:o("Flush all caches?"),description:o("This will clear all cached data across all stores."),onConfirm:k},n().createElement(r.Button,{danger:!0,icon:n().createElement(a.DeleteOutlined,null)},o("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:o("Cache Stores"),value:m.length,prefix:n().createElement(a.DatabaseOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Named Caches"),value:y.length}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:o("Redis Keys"),value:(null==b?void 0:b.available)?b.totalKeys:"-",suffix:(null==b?void 0:b.available)?"(".concat(b.usedMemory,")"):""})))),n().createElement(r.Card,{title:o("Registered Stores"),size:"small"},n().createElement(r.Table,{dataSource:m,columns:w,rowKey:"name",size:"small",pagination:!1})),n().createElement(r.Card,{title:o("Named Caches"),size:"small"},n().createElement(r.Table,{dataSource:y,columns:S,rowKey:"name",size:"small",pagination:!1}))))},{key:"acl",label:o("ACL Cache"),children:n().createElement(J,null)},{key:"redis",label:o("Redis Monitor"),children:n().createElement(X,null)},{key:"locks",label:o("Locks"),children:n().createElement(el,null)},{key:"queue",label:o("Event Queue"),children:n().createElement(ed,null)}]})}function eb(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).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){ev(l,r,a,o,c,"next",e)}function c(e){ev(l,r,a,o,c,"throw",e)}o(void 0)})}}function ek(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ew(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){ek(e,t,n[t])})}return e}function eS(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function eC(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eb(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 eb(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 eO(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var ex=r.Typography.Text;r.Typography.Title;var eI={APP_ROLE:"worker",WORKER_MODE:"*",APP_PORT:"13000",SKILL_HUB_SANDBOX:"false"},eA=[{configMapRef:{name:"nocobase-config"}},{secretRef:{name:"nocobase-secret"}}],eP=[{name:"app-storage",mountPath:"/app/nocobase/storage"},{name:"script-volume",mountPath:"/hotfix-license.js",subPath:"hotfix-license.js"}],eT=[{name:"app-storage",persistentVolumeClaim:{claimName:"app-storage"}},{name:"script-volume",configMap:{name:"nocobase-scripts"}}],eR={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 eM(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 ez(){var l,o,c,i,s,u,d,m=P(),p=(0,e.useAPIClient)(),f=eC((0,t.useState)(!1),2),y=f[0],h=f[1],g=eC((0,t.useState)([]),2),b=g[0],v=g[1],E=eC((0,t.useState)({}),2),k=E[0],w=E[1],S=eC((0,t.useState)({}),2),C=S[0],O=S[1],x=eC((0,t.useState)({}),2),I=x[0],A=x[1],T=eC((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),R=T[0],j=T[1],M=eC((0,t.useState)({visible:!1,containerName:"",logs:""}),2),z=M[0],F=M[1],N=eC((0,t.useState)(null),2),B=N[0],D=N[1],L=eC((0,t.useState)(!1),2),q=L[0],_=L[1],K=eC((0,t.useState)({visible:!1,stack:null}),2),U=K[0],W=K[1],H=eC(r.Form.useForm(),1)[0],V=eC(r.Form.useForm(),1)[0],J=(0,t.useCallback)(eE(function(){var e,t;return eO(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:ping"})];case 1:return D((null==(e=(t=n.sent()).data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),D({connected:!1,adapter:"unknown"}),[3,3];case 3:return[2]}})}),[p]),$=(0,t.useCallback)(eE(function(){var e,t,n;return eO(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,p.request({url:"/orchestratorStacks:list",params:{pageSize:50}})];case 1:return v(t=(null==(e=r.sent().data)?void 0:e.data)||[]),n={},t.forEach(function(e){n[e.id]=e.desiredReplicas}),A(n),[3,3];case 2:return r.sent(),[3,3];case 3:return[2]}})}),[p]),G=(0,t.useCallback)((l=eE(function(e){var t,n,a,l;return eO(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:containers",params:{stackId:e}})];case 1:return a=(null==(t=(n=o.sent()).data)?void 0:t.data)||n.data,w(function(t){return eS(ew({},t),ek({},e,a.data||[]))}),O(function(t){return eS(ew({},t),ek({},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]}})}),function(e){return l.apply(this,arguments)}),[p]),Y=(0,t.useCallback)(eE(function(){var e,t;return eO(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:getSettings"})];case 1:return t=n.sent(),H.setFieldsValue((null==(e=t.data)?void 0:e.data)||t.data),[3,3];case 2:return n.sent(),[3,3];case 3:return[2]}})}),[p,H]),Q=(o=eE(function(e){var t;return eO(this,function(n){switch(n.label){case 0:h(!0),n.label=1;case 1:return n.trys.push([1,5,6,7]),[4,p.request({url:"/workerOrchestrator:saveSettings",method:"POST",data:e})];case 2:return n.sent(),r.message.success(m("Settings saved successfully. Reconnecting...")),_(!1),[4,J()];case 3:return n.sent(),[4,$()];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 h(!1),[7];case 7:return[2]}})}),function(e){return o.apply(this,arguments)}),X=function(e){W({visible:!0,stack:e||null}),V.setFieldsValue(e?eS(ew({},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.0.46-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(eI,{}),resourceLimits:ej({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:ej([],[]),k8sEnvFrom:ej(eA,[]),k8sVolumeMounts:ej(eP,[]),k8sVolumes:ej(eT,[])})},Z=function(){W({visible:!1,stack:null}),V.resetFields()},ee=(c=eE(function(e){var t,n,a,l,o,c,i;return eO(this,function(s){switch(s.label){case 0:h(!0),s.label=1;case 1:if(s.trys.push([1,7,8,9]),n=eS(ew({},e),{envVars:eM(e.envVars,{},"Environment variables"),resourceLimits:eM(e.resourceLimits,{},"Resource limits"),k8sEnv:eM(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:eM(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:eM(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:eM(e.k8sVolumes,[],"Kubernetes volumes"),desiredReplicas:Number(e.desiredReplicas||0),replicas:Number(e.replicas||0)}),!(null==(t=U.stack)?void 0:t.id))return[3,3];return[4,p.request({url:"/orchestratorStacks:update",method:"put",params:{filterByTk:U.stack.id},data:n})];case 2:return s.sent(),r.message.success(m("Worker stack updated")),[3,5];case 3:return[4,p.request({url:"/orchestratorStacks:create",method:"post",data:n})];case 4:s.sent(),r.message.success(m("Worker stack created")),s.label=5;case 5:return Z(),[4,$()];case 6:return s.sent(),[3,9];case 7:return a=s.sent(),r.message.error((null==a||null==(i=a.response)||null==(c=i.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message||m("Failed to save worker stack")),[3,9];case 8:return h(!1),[7];case 9:return[2]}})}),function(e){return c.apply(this,arguments)});(0,t.useEffect)(function(){J(),$(),Y()},[J,$,Y]),(0,t.useEffect)(function(){var e=function(){b.forEach(function(e){return G(e.id)})};e();var t=setInterval(function(){$(),e()},1e4);return function(){return clearInterval(t)}},[b,G,$]);var et=(i=eE(function(e){var t,n,a,l,o,c,i,s,u;return eO(this,function(d){switch(d.label){case 0:if(void 0===(t=I[e]))return[2];h(!0),d.label=1;case 1:return d.trys.push([1,5,6,7]),[4,p.request({url:"/workerOrchestrator:scale",method:"POST",data:{stackId:e,replicas:t}})];case 2:return l=(null==(n=(a=d.sent()).data)?void 0:n.data)||a.data,r.message.success("Scaled: ".concat(l.previousReplicas," → ").concat(l.currentReplicas," replicas")),[4,G(e)];case 3:return d.sent(),[4,$()];case 4:return d.sent(),[3,7];case 5:return o=d.sent(),r.message.error((null==(u=o.response)||null==(s=u.data)||null==(i=s.errors)||null==(c=i[0])?void 0:c.message)||o.message),[3,7];case 6:return h(!1),[7];case 7:return[2]}})}),function(e){return i.apply(this,arguments)}),en=(s=eE(function(e,t,n){var a,l,o,c,i;return eO(this,function(s){switch(s.label){case 0:h(!0),s.label=1;case 1:return s.trys.push([1,4,5,6]),[4,p.request({url:"/workerOrchestrator:".concat(e),method:"POST",data:{stackId:n,containerId:t}})];case 2:return s.sent(),r.message.success("".concat(e," ").concat(t," successful")),[4,G(n)];case 3:return s.sent(),[3,6];case 4:return a=s.sent(),r.message.error((null==(i=a.response)||null==(c=i.data)||null==(o=c.errors)||null==(l=o[0])?void 0:l.message)||a.message),[3,6];case 5:return h(!1),[7];case 6:return[2]}})}),function(e,t,n){return s.apply(this,arguments)}),er=(u=eE(function(e,t){var n,a,l;return eO(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:logs",params:{stackId:t,containerId:e,tail:200}})];case 1:return j({visible:!0,containerId:e,logs:((null==(n=(a=o.sent()).data)?void 0:n.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]}})}),function(e,t){return u.apply(this,arguments)}),ea=[{title:m("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(ex,{code:!0,style:{fontSize:11}},t.id),n().createElement(ex,null,e))}},{title:m("Status"),dataIndex:"status",key:"status",width:100,render:function(e){return n().createElement(r.Tag,{color:eR[e]||"default"},e.toUpperCase())}},{title:m("Packages"),key:"packages",width:140,render:function(e,t){var l=t.packageStatus;if(!l)return n().createElement(ex,{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 F({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:m("Image"),dataIndex:"image",key:"image",ellipsis:!0,render:function(e){return n().createElement(ex,{type:"secondary",style:{fontSize:12}},e)}},{title:m("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:m("Actions"),key:"actions",width:160,render:function(e,t){var l=(null==B?void 0:B.adapter)==="kubernetes";return n().createElement(r.Space,{size:"small"},!l&&("running"===t.status?n().createElement(r.Tooltip,{title:m("Stop")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PauseCircleOutlined,null),onClick:function(){return en("stop",t.id,t._stackId)}})):n().createElement(r.Tooltip,{title:m("Start")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.PlayCircleOutlined,{style:{color:"#52c41a"}}),onClick:function(){return en("start",t.id,t._stackId)}}))),n().createElement(r.Tooltip,{title:m("Logs")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.FileTextOutlined,null),onClick:function(){return er(t.id,t._stackId)}})),n().createElement(r.Popconfirm,{title:m("Remove this container?"),onConfirm:function(){return en("remove",t.id,t._stackId)}},n().createElement(r.Tooltip,{title:m("Remove")},n().createElement(r.Button,{size:"small",type:"text",danger:!0,icon:n().createElement(a.DeleteOutlined,null)}))))}}];return B?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(ex,{strong:!0},m("Adapter"),": "),n().createElement(r.Tag,{color:"blue"},(null==(d=B.adapter)?void 0:d.toUpperCase())||"NONE"),n().createElement(r.Badge,{status:B.connected?"success":"error",text:B.connected?m("Connected"):m("Disconnected")}),void 0!==B.leader&&n().createElement(n().Fragment,null,n().createElement(ex,{type:"secondary"},"|"),n().createElement(r.Badge,{status:B.leader?"success":"default",text:B.leader?m("Leader (this node)"):m("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 X()}},m("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return _(!0)}},m("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){J(),$()}},m("Refresh")))))),B.connected?n().createElement(n().Fragment,null,0===b.length&&n().createElement(r.Alert,{type:"info",showIcon:!0,message:m("No stacks configured"),description:m("Create a worker stack here, then scale it to start worker pods."),style:{marginBottom:16}}),b.map(function(e){var t,l,o,c,i=(k[e.id]||[]).map(function(t){return eS(ew({},t),{_stackId:e.id})}),s=C[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(ex,{type:"secondary",style:{fontSize:12}},e.image),n().createElement(r.Tooltip,{title:m("Edit worker stack")},n().createElement(r.Button,{size:"small",type:"text",icon:n().createElement(a.EditOutlined,null),onClick:function(){return X(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(ex,null,m("Replicas"),":"),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ShrinkOutlined,null),disabled:y||0>=(I[e.id]||0),onClick:function(){return A(function(t){return eS(ew({},t),ek({},e.id,Math.max(0,(t[e.id]||0)-1)))})}}),n().createElement(r.InputNumber,{min:0,max:20,value:null!=(t=I[e.id])?t:e.desiredReplicas,onChange:function(t){return A(function(n){return eS(ew({},n),ek({},e.id,null!=t?t:0))})},style:{width:70}}),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ExpandAltOutlined,null),disabled:y||(I[e.id]||0)>=20,onClick:function(){return A(function(t){return eS(ew({},t),ek({},e.id,Math.min(20,(t[e.id]||0)+1)))})}}),n().createElement(r.Button,{type:"primary",loading:y,onClick:function(){return et(e.id)},disabled:(null!=(l=I[e.id])?l:e.desiredReplicas)===s.running},m("Scale")),n().createElement(ex,{type:"secondary"},null!=(o=s.running)?o:"?"," / ",null!=(c=I[e.id])?c:e.desiredReplicas," ",m("running")),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return G(e.id)}})),n().createElement(r.Table,{dataSource:i,columns:ea,rowKey:"id",size:"small",pagination:!1,locale:{emptyText:m("No containers")}}))})):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:m("Orchestrator Not Connected"),description:m("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 _(!0)}},m("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(m("Logs"),": ").concat(R.containerId),open:R.visible,onCancel:function(){return j({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"}},R.logs.length>0?R.logs.join("\n"):m("No logs available"))),n().createElement(r.Modal,{title:"".concat(m("Package Logs"),": ").concat(z.containerName),open:z.visible,onCancel:function(){return F({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"}},z.logs||m("No logs available"))),n().createElement(r.Modal,{title:U.stack?m("Edit worker stack"):m("New worker stack"),open:U.visible,onCancel:Z,onOk:function(){return V.submit()},okText:m("Save"),confirmLoading:y,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:V,layout:"vertical",onFinish:ee},n().createElement(r.Row,{gutter:12},n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"name",label:m("Stack name"),rules:[{required:!0,message:m("Stack name is required")},{pattern:/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/,message:m("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:m("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:m("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"kubernetes"},m("Kubernetes")),n().createElement(r.Select.Option,{value:"docker"},m("Docker"))))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"desiredReplicas",label:m("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:m("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:m("Deployment name")},n().createElement(r.Input,{placeholder:"app-workers"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"serviceAccountName",label:m("Service account")},n().createElement(r.Input,{placeholder:"nocobase-orchestrator"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"imagePullPolicy",label:m("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:12},n().createElement(r.Form.Item,{name:"k8sContainerName",label:m("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"namespace",label:m("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"})))),n().createElement(r.Form.Item,{name:"command",label:m("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:m("Environment variables JSON")},n().createElement(r.Input.TextArea,{rows:8}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"resourceLimits",label:m("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:m("Kubernetes envFrom JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sEnv",label:m("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:m("Kubernetes volumeMounts JSON")},n().createElement(r.Input.TextArea,{rows:7}))),n().createElement(r.Col,{span:12},n().createElement(r.Form.Item,{name:"k8sVolumes",label:m("Kubernetes volumes JSON")},n().createElement(r.Input.TextArea,{rows:7})))))),n().createElement(r.Modal,{title:m("Orchestrator Settings"),open:q,onCancel:function(){return _(!1)},footer:null,width:600},n().createElement(r.Form,{form:H,layout:"vertical",onFinish:Q,initialValues:{adapterType:"none",k8sNamespace:"nocobase",workerLabelSelector:"role=worker"}},n().createElement(r.Form.Item,{name:"adapterType",label:m("Adapter"),rules:[{required:!0}]},n().createElement(r.Select,null,n().createElement(r.Select.Option,{value:"none"},m("Disabled")),n().createElement(r.Select.Option,{value:"docker"},m("Docker")),n().createElement(r.Select.Option,{value:"kubernetes"},m("Kubernetes")))),n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapterType!==t.adapterType}},function(){var e=H.getFieldValue("adapterType");return"docker"===e?n().createElement(r.Card,{size:"small",title:m("Docker Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"dockerSocketPath",label:m("Socket Path"),extra:"/var/run/docker.sock"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"dockerHost",label:m("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:m("Kubernetes Configuration"),style:{marginBottom:16}},n().createElement(r.Form.Item,{name:"k8sNamespace",label:m("Namespace"),extra:"nocobase"},n().createElement(r.Input,null)),n().createElement(r.Form.Item,{name:"k8sKubeconfig",label:m("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:m("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:y,block:!0},m("Save Settings & Reconnect")))))):n().createElement(r.Spin,{tip:m("Connecting to orchestrator..."),style:{display:"flex",justifyContent:"center",padding:48}})}var eF={apt:["python3","python3-pip","python3-venv"],python:["python-docx","openpyxl","pandas","matplotlib","Pillow","reportlab","jinja2","pyyaml","tabulate","xlsxwriter"],npm:["xlsx","docx","pdfkit","csv-parse","archiver","sharp","lodash","dayjs"]};function eN(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 eB(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Array.isArray(e)?eN(e):"string"!=typeof e?eN(t):eN(e.split(/[\n,]/).map(function(e){return e.trim()}).filter(Boolean))}function eD(e){return eN(e).join("\n")}function eL(e){return{apt:eB(e.aptPackages,eF.apt),python:eB(e.pythonPackages,eF.python),npm:eB(e.npmPackages,eF.npm)}}function eq(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 c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function eK(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,c,"next",e)}function c(e){e_(l,r,a,o,c,"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:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eq(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 eq(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 eW(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var eH=r.Typography.Text,eV={pending:{color:"default",text:"Not initialized"},running:{color:"processing",text:"Running..."},succeeded:{color:"success",text:"Succeeded"},failed:{color:"error",text:"Failed"}};function eJ(e,t){return e.length?e.map(function(e){return n().createElement(r.Tag,{key:e,color:t,style:{marginBottom:2}},e)}):n().createElement(eH,{type:"secondary"},"-")}var e$=function(){var l,o,c,i,s,u,d,m,p,f=P(),y=(0,e.useAPIClient)(),h=eU(r.Form.useForm(),1)[0],g=eU((0,t.useState)(!1),2),b=g[0],v=g[1],E=eU((0,t.useState)(!1),2),k=E[0],w=E[1],S=eU((0,t.useState)(!1),2),C=S[0],O=S[1],x=eU((0,t.useState)(null),2),I=x[0],A=x[1],T=eU((0,t.useState)(null),2),R=T[0],j=T[1],M=eU((0,t.useState)("all"),2),z=M[0],F=M[1],N=r.Form.useWatch("aptPackages",h),B=r.Form.useWatch("pythonPackages",h),D=r.Form.useWatch("npmPackages",h),L=(0,t.useRef)(!1),q=(0,t.useCallback)(eK(function(){var e,t,n,r,a,l=arguments;return eW(this,function(o){switch(o.label){case 0:if(e=l.length>0&&void 0!==l[0]&&l[0],L.current)return[2];L.current=!0,e||v(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,y.request({url:"workerPackages:getPackageConfig"})];case 2:if(r=(null==(n=o.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 A(r),r&&(h.setFieldsValue({npmRegistryUrl:r.npmRegistryUrl,npmAuthToken:r.npmAuthToken,pypiIndexUrl:r.pypiIndexUrl,pypiTrustedHost:r.pypiTrustedHost,aptMirrorUrl:r.aptMirrorUrl,aptGpgKeyUrl:r.aptGpgKeyUrl,aptPackages:eB(r.aptPackages,eF.apt),pythonPackages:eB(r.pythonPackages,eF.python),npmPackages:eB(r.npmPackages,eF.npm),retentionHours:null!=(a=r.retentionHours)?a:24}),"running"===r.initStatus?(O(!0),j({percent:r.initProgressPercent||0,log:r.initProgressLog||f("Processing...")})):(O(!1),j(null))),[3,5];case 3:return o.sent(),[3,5];case 4:return e||v(!1),L.current=!1,[7];case 5:return[2]}})}),[y,h,f]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){var e=setInterval(function(){return q(!0)},1e4);return function(){return clearInterval(e)}},[q]);var _=(l=eK(function(e){var t;return eW(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:eD(e.aptPackages),pythonPackages:eD(e.pythonPackages),npmPackages:eD(e.npmPackages)},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(a)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(a,e))}),t=r,!(null==I?void 0:I.id))return[3,2];return[4,y.request({url:"workerPackages:savePackageConfig",method:"post",params:{filterByTk:I.id},data:t})];case 1:return n.sent(),[3,4];case 2:return[4,y.request({url:"workerPackages:savePackageConfig",method:"post",data:t})];case 3:n.sent(),n.label=4;case 4:return[2]}})}),function(e){return l.apply(this,arguments)}),K=(o=eK(function(){return eW(this,function(e){switch(e.label){case 0:w(!0),e.label=1;case 1:return e.trys.push([1,4,5,6]),[4,_(h.getFieldsValue())];case 2:return e.sent(),r.message.success(f("Config saved")),[4,q()];case 3:return e.sent(),[3,6];case 4:return e.sent(),r.message.error(f("Failed to save config")),[3,6];case 5:return w(!1),[7];case 6:return[2]}})}),function(){return o.apply(this,arguments)}),U=(c=eK(function(){var e,t;return eW(this,function(n){switch(n.label){case 0:O(!0),j({percent:0,log:f("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,_(e=h.getFieldsValue())];case 2:return n.sent(),[4,y.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:z,packages:eL(e||{}),registryConfig:{aptMirrorUrl:e.aptMirrorUrl,npmRegistryUrl:e.npmRegistryUrl,pypiIndexUrl:e.pypiIndexUrl,pypiTrustedHost:e.pypiTrustedHost}}})];case 3:return n.sent(),r.message.info(f("Install task dispatched")),[4,q()];case 4:return n.sent(),[3,6];case 5:return t=n.sent(),r.message.error((null==t?void 0:t.message)||f("Failed to install packages/modules")),O(!1),j(null),[3,6];case 6:return[2]}})}),function(){return c.apply(this,arguments)}),W=eV[null==I?void 0:I.initStatus]||eV.pending,H=(null==I?void 0:I.packageWhitelist)||{},V=(null==H||null==(i=H.python)?void 0:i.length)>0||(null==H||null==(s=H.node)?void 0:s.length)>0||(null==H||null==(u=H.apt)?void 0:u.length)>0,J=eL({aptPackages:null!=N?N:eF.apt,pythonPackages:null!=B?B:eF.python,npmPackages:null!=D?D:eF.npm});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,f("Cluster Package Installer"))),size:"small",style:{marginBottom:16},extra:n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),size:"small",onClick:function(){return q(!1)},loading:b},f("Refresh"))},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},n().createElement("div",null,n().createElement(eH,{strong:!0},f("Status"),": "),n().createElement(r.Tag,{color:W.color},f(W.text)),(null==I?void 0:I.lastInitAt)&&n().createElement(eH,{type:"secondary",style:{fontSize:12}},"(",new Date(I.lastInitAt).toLocaleString(),")")),n().createElement("div",null,n().createElement(eH,{strong:!0,style:{marginRight:8}},f("Target"),": "),n().createElement(r.Select,{value:z,onChange:F,style:{width:240},options:[{label:f("All app and worker nodes"),value:"all"},{label:f("App nodes only"),value:"app"},{label:f("Worker nodes only"),value:"worker"}]})),n().createElement(r.Alert,{type:"info",showIcon:!0,message:f("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:C?n().createElement(a.ReloadOutlined,{spin:!0}):n().createElement(a.CloudServerOutlined,null),onClick:function(){return U()},size:"large"},C?f("Installing... (Click to Force Run)"):f("Install packages/modules")),C&&n().createElement(r.Button,{danger:!0,onClick:eK(function(){return eW(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,y.request({url:"workerPackages:resetInitStatus",method:"post"})];case 1:return e.sent(),r.message.success(f("Install status reset to stopped")),[4,q()];case 2:return e.sent(),[3,4];case 3:return e.sent(),r.message.error(f("Failed to stop installation")),[3,4];case 4:return[2]}})}),size:"large"},f("Stop / Reset Status"))),C&&R&&n().createElement("div",null,n().createElement(r.Progress,{percent:R.percent,status:"active"}),n().createElement(eH,{type:"secondary"},R.log)),(null==I?void 0:I.lastInitLog)&&"running"!==I.initStatus&&n().createElement("div",null,n().createElement(eH,{strong:!0},f("Last Install Log"),":"),n().createElement("pre",{style:{background:"#f5f5f5",padding:8,borderRadius:4,fontSize:11,maxHeight:220,overflow:"auto",whiteSpace:"pre-wrap",marginTop:4}},I.lastInitLog)))),n().createElement(r.Card,{title:f("Package/module settings"),size:"small",style:{marginBottom:16}},n().createElement(r.Form,{form:h,layout:"vertical"},n().createElement(r.Form.Item,{name:"aptPackages",label:f("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:f("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:f("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:f("APT mirror URL")},n().createElement(r.Input,{placeholder:"https://deb.debian.org/debian"})),n().createElement(r.Form.Item,{name:"npmRegistryUrl",label:f("NPM registry URL")},n().createElement(r.Input,{placeholder:"https://registry.npmjs.org/"})),n().createElement(r.Form.Item,{name:"pypiIndexUrl",label:f("PyPI index URL")},n().createElement(r.Input,{placeholder:"https://pypi.org/simple"})),n().createElement(r.Button,{type:"primary",onClick:K,loading:k},f("Save settings"))),n().createElement(r.Divider,{style:{margin:"16px 0"}}),n().createElement(eH,{strong:!0},f("Install plan"),":"),n().createElement("div",{style:{marginTop:8}},n().createElement(eH,{type:"secondary"},"APT: "),eJ(J.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Python: "),eJ(J.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Node: "),eJ(J.npm||[],"green"))),n().createElement(r.Card,{title:n().createElement(r.Space,null,n().createElement(a.SafetyOutlined,null),n().createElement("span",null,f("Installed package/module whitelist"))),size:"small"},V?n().createElement(r.Space,{direction:"vertical",style:{width:"100%"}},(null==H||null==(d=H.apt)?void 0:d.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"APT: "),eJ(H.apt)),(null==H||null==(m=H.python)?void 0:m.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Python: "),eJ(H.python,"blue")),(null==H||null==(p=H.node)?void 0:p.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Node: "),eJ(H.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:f("No successful install has generated a whitelist yet.")})))};function eG(){var e=P();return n().createElement("div",{style:{padding:24}},n().createElement(r.Tabs,{defaultActiveKey:"cluster",items:[{key:"cluster",label:e("Cluster Nodes"),children:n().createElement(L,null)},{key:"tasks",label:e("Async Tasks"),children:n().createElement(g,null)},{key:"executions",label:e("Workflow Executions"),children:n().createElement(A,null)},{key:"cache",label:e("Cache Monitor"),children:n().createElement(eg,null)},{key:"orchestrator",label:e("Container Orchestrator"),children:n().createElement(ez,null)},{key:"packages",label:e("Packages"),children:n().createElement(e$,null)}]}))}function eY(e,t,n,r,a,l,o){try{var c=e[l](o),i=c.value}catch(e){n(e);return}c.done?t(i):Promise.resolve(i).then(r,a)}function eQ(e,t,n){return(eQ=e1()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&eZ(a,n.prototype),a}).apply(null,arguments)}function eX(e){return(eX=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function eZ(e,t){return(eZ=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function e0(e){var t="function"==typeof Map?new Map:void 0;return(e0=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 eQ(e,arguments,eX(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),eZ(n,e)})(e)}function e1(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(e1=function(){return!!e})()}var e2=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=eX(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,e1()?Reflect.construct(e,t||[],eX(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&eZ(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){var i=[l,c];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(e){return t.app.pluginSettingsManager.add("plugin-cluster-manager",{title:'{{t("Cluster Manager")}}',icon:"DashboardOutlined",Component:eG}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eY(l,r,a,o,c,"next",e)}function c(e){eY(l,r,a,o,c,"throw",e)}o(void 0)})})()}}],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}(e0(e.Plugin)),e3=e2}(),i}()});
|
package/dist/externalVersion.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
module.exports = {
|
|
2
11
|
"react": "18.2.0",
|
|
3
12
|
"antd": "5.24.2",
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
package/dist/server/index.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -34,7 +43,7 @@ var import_child_process = require("child_process");
|
|
|
34
43
|
var import_redis = require("../utils/redis");
|
|
35
44
|
var import_fs = require("fs");
|
|
36
45
|
var import_path = __toESM(require("path"));
|
|
37
|
-
const SAFE_PKG_RE = /^[a-zA-Z0-9_
|
|
46
|
+
const SAFE_PKG_RE = /^[a-zA-Z0-9_\-\.@\/\[\]]+$/;
|
|
38
47
|
const INSTALL_CHANNEL = "cluster-manager.install-packages";
|
|
39
48
|
function sanitizePkg(name) {
|
|
40
49
|
if (typeof name !== "string") {
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
package/dist/server/plugin.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
package/dist/shared/packages.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"displayName": "Cluster Manager",
|
|
4
4
|
"displayName.zh-CN": "Cluster Manager",
|
|
5
5
|
"description": "Cluster node tracking, task orchestration, worker management, and package distribution",
|
|
6
|
-
"version": "1.0
|
|
6
|
+
"version": "1.1.0",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"main": "./dist/server/index.js",
|
|
9
9
|
"keywords": ["Monitoring", "DevOps"],
|
|
@@ -194,7 +194,7 @@ export const PackageInstaller: React.FC = () => {
|
|
|
194
194
|
size="small"
|
|
195
195
|
style={{ marginBottom: 16 }}
|
|
196
196
|
extra={
|
|
197
|
-
<Button icon={<ReloadOutlined />} size="small" onClick={loadConfig} loading={loading}>
|
|
197
|
+
<Button icon={<ReloadOutlined />} size="small" onClick={() => loadConfig(false)} loading={loading}>
|
|
198
198
|
{t('Refresh')}
|
|
199
199
|
</Button>
|
|
200
200
|
}
|
|
@@ -4,8 +4,8 @@ import { promises as fsp } from 'fs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import Application from '@nocobase/server';
|
|
6
6
|
|
|
7
|
-
/** Allow only safe package name characters: letters, digits, dash, underscore, dot, @,
|
|
8
|
-
const SAFE_PKG_RE = /^[a-zA-Z0-9_
|
|
7
|
+
/** Allow only safe package name characters: letters, digits, dash, underscore, dot, @, /, [, ] */
|
|
8
|
+
const SAFE_PKG_RE = /^[a-zA-Z0-9_\-\.@\/\[\]]+$/;
|
|
9
9
|
const INSTALL_CHANNEL = 'cluster-manager.install-packages';
|
|
10
10
|
|
|
11
11
|
type TargetRole = 'app' | 'worker' | 'sandbox' | 'all';
|