plugin-cluster-manager 1.1.6 → 1.1.10

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.
Files changed (65) hide show
  1. package/dist/client/AclCacheManager.d.ts +2 -0
  2. package/dist/client/CacheMonitor.d.ts +2 -0
  3. package/dist/client/ClusterManagerLayout.d.ts +2 -0
  4. package/dist/client/ClusterNodes.d.ts +2 -0
  5. package/dist/client/ContainerOrchestrator.d.ts +2 -0
  6. package/dist/client/EventQueueMonitor.d.ts +2 -0
  7. package/dist/client/LockMonitor.d.ts +2 -0
  8. package/dist/client/PackageInstaller.d.ts +2 -0
  9. package/dist/client/PluginOperations.d.ts +2 -0
  10. package/dist/client/RedisMonitor.d.ts +2 -0
  11. package/dist/client/TaskManager.d.ts +2 -0
  12. package/dist/client/WorkflowExecutions.d.ts +2 -0
  13. package/dist/client/index.d.ts +5 -0
  14. package/dist/client/index.js +1 -1
  15. package/dist/client/utils.d.ts +12 -0
  16. package/dist/externalVersion.js +5 -5
  17. package/dist/index.d.ts +2 -0
  18. package/dist/server/actions/acl-cache.d.ts +53 -0
  19. package/dist/server/actions/acl-cache.js +1 -1
  20. package/dist/server/actions/cache-monitor.d.ts +23 -0
  21. package/dist/server/actions/cluster-nodes.d.ts +49 -0
  22. package/dist/server/actions/event-queue-monitor.d.ts +13 -0
  23. package/dist/server/actions/lock-monitor.d.ts +19 -0
  24. package/dist/server/actions/orchestrator.d.ts +58 -0
  25. package/dist/server/actions/package-manager.d.ts +6 -0
  26. package/dist/server/actions/plugin-operations.d.ts +6 -0
  27. package/dist/server/actions/redis-monitor.d.ts +12 -0
  28. package/dist/server/actions/tasks.d.ts +7 -0
  29. package/dist/server/actions/workflow-executions.d.ts +7 -0
  30. package/dist/server/adapters/redis-lock-adapter.d.ts +15 -0
  31. package/dist/server/adapters/redis-node-registry.d.ts +12 -0
  32. package/dist/server/adapters/redis-pubsub-adapter.d.ts +16 -0
  33. package/dist/server/collections/app.d.ts +8 -0
  34. package/dist/server/collections/cluster-manager-acl-cache.d.ts +22 -0
  35. package/dist/server/collections/cluster-manager-cache-mgr.d.ts +22 -0
  36. package/dist/server/collections/cluster-manager-cluster.d.ts +22 -0
  37. package/dist/server/collections/cluster-manager-lock.d.ts +22 -0
  38. package/dist/server/collections/cluster-manager-plugins.d.ts +18 -0
  39. package/dist/server/collections/cluster-manager-queue.d.ts +22 -0
  40. package/dist/server/collections/cluster-manager-redis.d.ts +22 -0
  41. package/dist/server/collections/cluster-manager-workflow.d.ts +22 -0
  42. package/dist/server/collections/cluster-manager.d.ts +22 -0
  43. package/dist/server/collections/orchestrator-settings.d.ts +59 -0
  44. package/dist/server/collections/orchestrator-stacks.d.ts +102 -0
  45. package/dist/server/collections/worker-orchestrator.d.ts +22 -0
  46. package/dist/server/collections/worker-packages-configs.d.ts +3 -0
  47. package/dist/server/collections/worker-packages.d.ts +22 -0
  48. package/dist/server/index.d.ts +1 -0
  49. package/dist/server/orchestrator/PackageManager.d.ts +39 -0
  50. package/dist/server/orchestrator/PackageManager.js +63 -11
  51. package/dist/server/orchestrator/docker-adapter.d.ts +41 -0
  52. package/dist/server/orchestrator/index.d.ts +4 -0
  53. package/dist/server/orchestrator/k8s-adapter.d.ts +50 -0
  54. package/dist/server/orchestrator/leader-election.d.ts +48 -0
  55. package/dist/server/orchestrator/types.d.ts +84 -0
  56. package/dist/server/plugin.d.ts +26 -0
  57. package/dist/server/plugin.js +9 -0
  58. package/dist/server/utils/node.d.ts +6 -0
  59. package/dist/server/utils/redis.d.ts +29 -0
  60. package/dist/shared/packages.d.ts +23 -0
  61. package/package.json +1 -1
  62. package/src/client/PluginOperations.tsx +13 -5
  63. package/src/server/actions/acl-cache.ts +2 -2
  64. package/src/server/orchestrator/PackageManager.ts +84 -17
  65. package/src/server/plugin.ts +15 -0
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("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 e9},default:function(){return te}});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],x=f((0,t.useState)(void 0),2),O=x[0],I=x[1],P=(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===O?"":O}})];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,O]);(0,t.useEffect)(function(){P()},[O]);var A=(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"),P(),[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"),P(),[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")),P(),[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)}),z=[{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 A(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:O,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 P()}},"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:z,dataSource:g,loading:E,size:"small",pagination:p(m({},S),{showSizeChanger:!0,showTotal:function(e){return"Total ".concat(e)},onChange:function(e,t){return P(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 x(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 O={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 P(){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),P=v[0],A=v[1],T=C((0,t.useState)({}),2),R=T[0],z=T[1],j=C((0,t.useState)({}),2),M=j[0],F=j[1],N=(0,t.useCallback)(E(function(){var e,t,n,a,l=arguments;return x(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===P?"":P}})];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,P]);(0,t.useEffect)(function(){N()},[P]);var B=(l=E(function(e){var t,n,a,l,o;return x(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:[],z(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 x(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 x(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):"-"}}],K=[{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=O[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:M[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:P,onChange:A,options:Object.entries(O).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:K,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 A(){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 z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function j(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 M(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){j(l,r,a,o,c,"next",e)}function c(e){j(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 z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return z(e,t)}}(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=A(),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],x=S[1],O=(0,t.useRef)(null),I=(0,t.useCallback)(M(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([]),x(""),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(){O.current&&!C&&O.current.scrollIntoView({behavior:"smooth"})},[m,C]);var P=C?m.filter(function(e){return e.toLowerCase().includes(C.toLowerCase())}):m;return n().createElement(r.Modal,{title:n().createElement(r.Space,null,n().createElement(a.FileTextOutlined,null),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 x(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"}},P.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===P.length&&!b&&n().createElement("div",{style:{color:"#888",textAlign:"center",paddingTop:40}},s(0===m.length?"No logs available":"No matching logs")),P.map(function(e,t){var r="#d4d4d4";return/\berror\b/i.test(e)?r="#f5222d":/\bwarn(ing)?\b/i.test(e)?r="#faad14":/\bdebug\b/i.test(e)&&(r="#8c8c8c"),n().createElement("div",{key:t,style:{padding:"1px 0",color:r}},e)}),n().createElement("div",{ref:O})))}var D={ok:"green",connected:"green",online:"green",warning:"orange",disconnected:"red",offline:"red",error:"red",not_configured:"default"};function L(){var l,o=A(),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],x=S[1],O=(0,t.useCallback)(M(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=M(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(O,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(){O()},[O]),(0,t.useEffect)(function(){if(k){var e=setInterval(O,1e3*k);return function(){return clearInterval(e)}}},[k,O]);var P=y.filter(function(e){return"online"===e.status}).length,z=[{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 x(t)},disabled:"offline"===t.status},o("Logs")))}}],j=(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:O},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:P,suffix:"/ ".concat(y.length),prefix:n().createElement(a.ClusterOutlined,null),valueStyle:{color:P===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(j).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:z,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 x(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 K(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){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){K(l,r,a,o,c,"next",e)}function c(e){K(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 Q(){var l,o,c,i,s=(0,e.useAPIClient)(),u=A(),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)(_(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=_(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)}),x=(o=_(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)}),O=(c=_(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}),P=[{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 O(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:x},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:P})))))}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 $(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 G(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.")}()}var Y=r.Typography.Text;function X(){var l,o=(0,e.useAPIClient)(),c=G((0,t.useState)(null),2),i=c[0],s=c[1],u=G((0,t.useState)({}),2),d=u[0],m=u[1],p=G((0,t.useState)(0),2),f=p[0],y=p[1],h=G((0,t.useState)([]),2),g=h[0],b=h[1],v=G((0,t.useState)([]),2),E=v[0],k=v[1],w=G((0,t.useState)(!1),2),S=w[0],C=w[1],x=G((0,t.useState)(null),2),O=x[0],I=x[1],P=G((0,t.useState)(null),2),A=P[0],T=P[1],z=(0,t.useCallback)((l=function(){var e,t,n,r,a,l,c,i,u,d,p,f,h,g,v,E,w,S,x;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(O){switch(O.label){case 0:C(!0),T(null),O.label=1;case 1:return O.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=G.apply(void 0,[O.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=O.sent())||null==(x=v.response)||null==(S=x.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){$(a,n,r,o,c,"next",e)}function c(e){$(a,n,r,o,c,"throw",e)}o(void 0)})}),[o]);if((0,t.useEffect)(function(){z()},[]),(0,t.useEffect)(function(){if(O){var e=setInterval(z,1e3*O);return function(){return clearInterval(e)}}},[O,z]),A)return n().createElement(r.Card,null,n().createElement(Y,{type:"danger"},A),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:z},"Retry"));if(!i)return null;var j="unlimited"!==i.memory.max_memory&&i.memory.peak_bytes>0?Math.round(i.memory.used_bytes/i.memory.peak_bytes*100):null;return n().createElement("div",null,n().createElement(r.Space,{style:{marginBottom:16}},n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:z,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:O,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!==j?"(".concat(j,"%)"):void 0}),n().createElement(Y,{type:"secondary"},"Peak: ",i.memory.peak),n().createElement("br",null),n().createElement(Y,{type:"secondary"},"Max: ",i.memory.max_memory),n().createElement("br",null),n().createElement(Y,{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(Y,{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(Y,{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(Y,{type:"secondary"},"Hits: ",i.stats.keyspace_hits.toLocaleString()," / Misses:"," ",i.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(Y,{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(Y,{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=G(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(Y,{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=G(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(Y,{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=G((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=A(),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,c,i,s,u=A(),d=(0,e.useAPIClient)(),m=es((0,t.useState)(!1),2),p=m[0],f=m[1],y=es((0,t.useState)(null),2),h=y[0],g=y[1],b=es((0,t.useState)(null),2),v=b[0],E=b[1],k=es((0,t.useState)(null),2),w=k[0],S=k[1],C=es((0,t.useState)(null),2),x=C[0],O=C[1],I=es((0,t.useState)([]),2),P=I[0],T=I[1],R=es((0,t.useState)({}),2),z=R[0],j=R[1],M=es((0,t.useState)([]),2),F=M[0],N=M[1],B=es((0,t.useState)({}),2),D=B[0],L=B[1],q=(0,t.useCallback)(ei(function(){var e,t;return eu(this,function(n){switch(n.label){case 0:f(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.request({url:"clusterManagerQueue:stats"})];case 2:return g(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return f(!1),[7];case 5:return[2]}})}),[d]),K=(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,d.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return T((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),j((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,3];case 2:return o.sent(),[3,3];case 3:return[2]}})}),function(e){return l.apply(this,arguments)}),[d]),_=(0,t.useCallback)((o=ei(function(e){var t,n,r,a,l;return eu(this,function(o){switch(o.label){case 0:if(!(null==e?void 0:e.key))return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,d.request({url:"clusterManagerQueue:messages",params:{source:"redis",key:e.key}})];case 2:return N((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),L((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,4];case 3:return o.sent(),[3,4];case 4:return[2]}})}),function(e){return o.apply(this,arguments)}),[d]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){if(v){var e=setInterval(q,1e3*v);return function(){return clearInterval(e)}}},[v,q]);var U=[{title:u("Channel"),dataIndex:"channel",key:"channel"},{title:u("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:u("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:u("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:u("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){S(t.channel),K(t.channel)}},u("Messages"))}}],W=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:u("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:u("Retried"),dataIndex:"retried",key:"retried",width:80},{title:u("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}],H=[{title:u("Queue"),dataIndex:"channel",key:"channel",width:240},{title:u("Redis Key"),dataIndex:"key",key:"key",ellipsis:!0},{title:u("App"),dataIndex:"appName",key:"appName",width:120},{title:u("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:u("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){O(t),_(t)}},u("Items"))}}],V=[{title:"#",dataIndex:"index",key:"index",width:80},{title:u("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:u("Queued At"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];return n().createElement(r.Spin,{spinning:p},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:q},u("Refresh")),n().createElement(r.Select,{placeholder:u("Auto Refresh"),allowClear:!0,value:v,onChange:E,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),h&&n().createElement(r.Tag,{color:h.connected?"green":"red"},h.adapter)),h&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Adapter"),value:h.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:u("Total Channels"),value:h.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Total Pending"),value:h.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:h.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Connected"),value:h.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:h.connected?"#3f8600":"#cf1322"}})))),(null==h?void 0:h.redisQueues)&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Queue Pending"),value:h.redisQueues.totalPending||0,prefix:n().createElement(a.DatabaseOutlined,null),valueStyle:{color:(h.redisQueues.totalPending||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Queues"),value:(null==(c=h.redisQueues.queues)?void 0:c.length)||0,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Connected"),value:h.redisQueues.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:h.redisQueues.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:u("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==h?void 0:h.channels)||[],columns:U,rowKey:"channel",size:"small",pagination:!1})),n().createElement(r.Card,{title:u("Redis Queues"),size:"small"},(null==h||null==(i=h.redisQueues)?void 0:i.note)&&n().createElement(r.Tag,{style:{marginBottom:8}},h.redisQueues.note),n().createElement(r.Table,{dataSource:(null==h||null==(s=h.redisQueues)?void 0:s.queues)||[],columns:H,rowKey:"key",size:"small",pagination:!1})),w&&n().createElement(r.Card,{title:"".concat(u("Messages"),": ").concat(w),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return S(null)}},"Close")},z.note&&n().createElement(r.Tag,{style:{marginBottom:8}},z.note),n().createElement(r.Table,{dataSource:P,columns:W,rowKey:"id",size:"small",pagination:{pageSize:10,total:z.count}})),x&&n().createElement(r.Card,{title:"".concat(u("Redis Queue Items"),": ").concat(x.channel),size:"small",extra:n().createElement(r.Space,null,n().createElement(r.Button,{size:"small",onClick:function(){return _(x)}},u("Refresh")),n().createElement(r.Button,{size:"small",onClick:function(){return O(null)}},u("Close")))},n().createElement(r.Tag,{style:{marginBottom:8}},x.key),D.note&&n().createElement(r.Tag,{style:{marginBottom:8}},D.note),n().createElement(r.Table,{dataSource:F,columns:V,rowKey:"id",size:"small",pagination:{pageSize:10,total:D.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=A(),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(Q,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 ex(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 eO=r.Typography.Text;r.Typography.Title;var eI={APP_ROLE:"worker",WORKER_MODE:"*",APP_PORT:"13000",SKILL_HUB_SANDBOX:"false"},eP=[{configMapRef:{name:"nocobase-config"}},{secretRef:{name:"nocobase-secret"}}],eA=[{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 ez(e,t){return JSON.stringify(null!=e?e:t,null,2)}function ej(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 eM(){var l,o,c,i,s,u,d,m=A(),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],x=S[1],O=eC((0,t.useState)({}),2),I=O[0],P=O[1],T=eC((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),R=T[0],z=T[1],j=eC((0,t.useState)({visible:!1,containerName:"",logs:""}),2),M=j[0],F=j[1],N=eC((0,t.useState)(null),2),B=N[0],D=N[1],L=eC((0,t.useState)(!1),2),q=L[0],K=L[1],_=eC((0,t.useState)({visible:!1,stack:null}),2),U=_[0],W=_[1],H=eC(r.Form.useForm(),1)[0],V=eC(r.Form.useForm(),1)[0],Q=eC((0,t.useState)([]),2),J=Q[0],$=Q[1],G=(0,t.useCallback)(eE(function(){var e,t,n;return ex(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:networks"})];case 1:return Array.isArray(n=(null==(e=(t=r.sent()).data)?void 0:e.data)||t.data)||(n=[]),$(n),[3,3];case 2:return r.sent(),$([]),[3,3];case 3:return[2]}})}),[p]),Y=(0,t.useCallback)(eE(function(){var e,t;return ex(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]),X=(0,t.useCallback)(eE(function(){var e,t,n;return ex(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}),P(n),[3,3];case 2:return r.sent(),[3,3];case 3:return[2]}})}),[p]),Z=(0,t.useCallback)((l=eE(function(e){var t,n,a,l;return ex(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||[]))}),x(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]),ee=(0,t.useCallback)(eE(function(){var e,t;return ex(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]),et=(o=eE(function(e){var t;return ex(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...")),K(!1),[4,Y()];case 3:return n.sent(),[4,X()];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)}),en=function(e){W({visible:!0,stack:e||null}),V.setFieldsValue(e?eS(ew({},e),{envVars:ez(e.envVars,{}),resourceLimits:ez(e.resourceLimits,{}),k8sEnv:ez(e.k8sEnv,[]),k8sEnvFrom:ez(e.k8sEnvFrom,[]),k8sVolumeMounts:ez(e.k8sVolumeMounts,[]),k8sVolumes:ez(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:ez(eI,{}),resourceLimits:ez({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:ez([],[]),k8sEnvFrom:ez(eP,[]),k8sVolumeMounts:ez(eA,[]),k8sVolumes:ez(eT,[]),networkMode:""}),G()},er=function(){W({visible:!1,stack:null}),V.resetFields()},ea=(c=eE(function(e){var t,n,a,l,o,c,i;return ex(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:ej(e.envVars,{},"Environment variables"),resourceLimits:ej(e.resourceLimits,{},"Resource limits"),k8sEnv:ej(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:ej(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:ej(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:ej(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 er(),[4,X()];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(){Y(),X(),ee()},[Y,X,ee]),(0,t.useEffect)(function(){var e=function(){b.forEach(function(e){return Z(e.id)})};e();var t=setInterval(function(){X(),e()},1e4);return function(){return clearInterval(t)}},[b,Z,X]);var el=(i=eE(function(e){var t,n,a,l,o,c,i,s,u;return ex(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,Z(e)];case 3:return d.sent(),[4,X()];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)}),eo=(s=eE(function(e,t,n){var a,l,o,c,i;return ex(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,Z(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)}),ec=(u=eE(function(e,t){var n,a,l;return ex(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 z({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)}),ei=[{title:m("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(eO,{code:!0,style:{fontSize:11}},t.id),n().createElement(eO,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(eO,{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(eO,{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 eo("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 eo("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 ec(t.id,t._stackId)}})),n().createElement(r.Popconfirm,{title:m("Remove this container?"),onConfirm:function(){return eo("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(eO,{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(eO,{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 en()}},m("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return K(!0)}},m("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){Y(),X()}},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(eO,{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 en(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(eO,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 P(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 P(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 P(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 el(e.id)},disabled:(null!=(l=I[e.id])?l:e.desiredReplicas)===s.running},m("Scale")),n().createElement(eO,{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 Z(e.id)}})),n().createElement(r.Table,{dataSource:i,columns:ei,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 K(!0)}},m("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(m("Logs"),": ").concat(R.containerId),open:R.visible,onCancel:function(){return z({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(M.containerName),open:M.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"}},M.logs||m("No logs available"))),n().createElement(r.Modal,{title:U.stack?m("Edit worker stack"):m("New worker stack"),open:U.visible,onCancel:er,onOk:function(){return V.submit()},okText:m("Save"),confirmLoading:y,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:V,layout:"vertical",onFinish:ea},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:8},n().createElement(r.Form.Item,{name:"k8sContainerName",label:m("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"namespace",label:m("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapter!==t.adapter}},function(){return"docker"===V.getFieldValue("adapter")?n().createElement(r.Form.Item,{name:"networkMode",label:m("Docker Network"),extra:m("Main network. Workers also inherit app networks.")},n().createElement(r.Select,{allowClear:!0,placeholder:m("Default (bridge)")},n().createElement(r.Select.Option,{value:"bridge"},"bridge"),n().createElement(r.Select.Option,{value:"host"},"host"),(Array.isArray(J)?J:[]).map(function(e){return n().createElement(r.Select.Option,{key:e.id,value:e.name},e.name)}))):null}))),n().createElement(r.Form.Item,{name:"command",label: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 K(!1)},footer:null,width:600},n().createElement(r.Form,{form:H,layout:"vertical",onFinish:et,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 eK(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){eK(l,r,a,o,c,"next",e)}function c(e){eK(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 eQ(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 eJ=function(){var l,o,c,i,s,u,d,m,p,f=A(),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],x=S[1],O=eU((0,t.useState)(null),2),I=O[0],P=O[1],T=eU((0,t.useState)(null),2),R=T[0],z=T[1],j=eU((0,t.useState)("all"),2),M=j[0],F=j[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)(e_(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 P(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?(x(!0),z({percent:r.initProgressPercent||0,log:r.initProgressLog||f("Processing...")})):(x(!1),z(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 K=(l=e_(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)}),_=(o=e_(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,K(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=e_(function(){var e,t;return eW(this,function(n){switch(n.label){case 0:x(!0),z({percent:0,log:f("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,K(e=h.getFieldsValue())];case 2:return n.sent(),[4,y.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:M,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")),x(!1),z(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,Q=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:M,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:e_(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:_,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: "),eQ(Q.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Python: "),eQ(Q.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Node: "),eQ(Q.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: "),eQ(H.apt)),(null==H||null==(m=H.python)?void 0:m.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Python: "),eQ(H.python,"blue")),(null==H||null==(p=H.node)?void 0:p.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Node: "),eQ(H.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:f("No successful install has generated a whitelist yet.")})))};function e$(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 eG(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 eY(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eG(l,r,a,o,c,"next",e)}function c(e){eG(l,r,a,o,c,"throw",e)}o(void 0)})}}function eX(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$(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$(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eZ(e,t){var n,r,a,l,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 e0(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function e1(){var l,o,c=A(),i=(0,e.useAPIClient)(),s=eX((0,t.useState)(!1),2),u=s[0],d=s[1],m=eX((0,t.useState)(null),2),p=m[0],f=m[1],y=eX((0,t.useState)(""),2),h=y[0],g=y[1],b=eX((0,t.useState)([]),2),v=b[0],E=b[1],k=(0,t.useCallback)(eY(function(){var e,t,n;return eZ(this,function(a){switch(a.label){case 0:d(!0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,i.request({url:"clusterManagerPlugins:list"})];case 2:return E((null==(t=a.sent())||null==(e=t.data)?void 0:e.data)||[]),[3,5];case 3:return n=a.sent(),r.message.error(e0(n,c("Failed to load plugins"))),[3,5];case 4:return d(!1),[7];case 5:return[2]}})}),[i,c]);(0,t.useEffect)(function(){k()},[k]);var w=(0,t.useMemo)(function(){var e=h.trim().toLowerCase();return e?v.filter(function(t){return[t.name,t.packageName,t.displayName,t.description].filter(Boolean).some(function(t){return String(t).toLowerCase().includes(e)})}):v},[v,h]),S=(l=eY(function(e){var t,n,a;return eZ(this,function(l){switch(l.label){case 0:f("".concat(e.name,":disable")),l.label=1;case 1:return l.trys.push([1,4,5,6]),[4,i.request({url:"clusterManagerPlugins:forceDisable",method:"post",data:{name:e.name}})];case 2:return n=l.sent(),r.message.success((null==n||null==(t=n.data)?void 0:t.message)||c("Plugin force disabled")),[4,k()];case 3:return l.sent(),[3,6];case 4:return a=l.sent(),r.message.error(e0(a,c("Failed to force disable plugin"))),[3,6];case 5:return f(null),[7];case 6:return[2]}})}),function(e){return l.apply(this,arguments)}),C=(o=eY(function(e){var t,n,a;return eZ(this,function(l){switch(l.label){case 0:f("".concat(e.name,":remove")),l.label=1;case 1:return l.trys.push([1,4,5,6]),[4,i.request({url:"clusterManagerPlugins:forceRemove",method:"post",data:{name:e.name}})];case 2:return n=l.sent(),r.message.success((null==n||null==(t=n.data)?void 0:t.message)||c("Plugin force removed")),[4,k()];case 3:return l.sent(),[3,6];case 4:return a=l.sent(),r.message.error(e0(a,c("Failed to force remove plugin"))),[3,6];case 5:return f(null),[7];case 6:return[2]}})}),function(e){return o.apply(this,arguments)}),x=[{title:c("Plugin"),dataIndex:"displayName",key:"displayName",render:function(e,t){return n().createElement(r.Space,{direction:"vertical",size:0},n().createElement(r.Typography.Text,{strong:!0},t.displayName||t.name),n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},t.packageName||t.name))}},{title:c("Name"),dataIndex:"name",key:"name",width:220,render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:c("Status"),key:"status",width:260,render:function(e,t){return n().createElement(r.Space,{wrap:!0,size:[4,4]},n().createElement(r.Tag,{color:t.enabled?"green":"default"},t.enabled?c("Enabled"):c("Disabled")),n().createElement(r.Tag,{color:t.installed?"blue":"default"},t.installed?c("Installed"):c("Not installed")),n().createElement(r.Tag,{color:t.loaded?"processing":"default"},t.loaded?c("Loaded"):c("Not loaded")),t.protected&&n().createElement(r.Tag,{color:"red"},c("Protected")))}},{title:c("Version"),dataIndex:"version",key:"version",width:120,render:function(e){return e||"-"}},{title:c("Description"),dataIndex:"description",key:"description",ellipsis:!0,render:function(e){return e||"-"}},{title:c("Actions"),key:"actions",width:250,render:function(e,t){return n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:c("Force disable this plugin?"),description:c("This updates the plugin registry directly. Restart or reload is required to fully unload runtime hooks."),disabled:t.protected||!t.enabled,onConfirm:function(){return S(t)},okText:c("Force disable"),cancelText:c("Cancel")},n().createElement(r.Button,{size:"small",icon:n().createElement(a.StopOutlined,null),disabled:t.protected||!t.enabled,loading:p==="".concat(t.name,":disable")},c("Force disable"))),n().createElement(r.Popconfirm,{title:c("Force remove this plugin?"),description:c("This removes the plugin registry record. Package files are not deleted. Restart or reload is required."),disabled:t.protected,onConfirm:function(){return C(t)},okText:c("Force remove"),cancelText:c("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.DeleteOutlined,null),disabled:t.protected,loading:p==="".concat(t.name,":remove")},c("Force remove"))))}}];return n().createElement(r.Spin,{spinning:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:"warning",showIcon:!0,icon:n().createElement(a.ExclamationCircleOutlined,null),message:c("Force operations bypass plugin lifecycle hooks"),description:c("Use this only when the normal plugin manager cannot disable or remove a broken plugin. Restart or reload the app after a successful operation.")}),n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:k},c("Refresh")),n().createElement(r.Input.Search,{allowClear:!0,placeholder:c("Search plugins"),value:h,onChange:function(e){return g(e.target.value)},style:{width:320}})),n().createElement(r.Table,{rowKey:"name",size:"small",dataSource:w,columns:x,pagination:{pageSize:20},scroll:{x:1100}})))}function e2(){var e=A();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(P,null)},{key:"cache",label:e("Cache Monitor"),children:n().createElement(eg,null)},{key:"orchestrator",label:e("Container Orchestrator"),children:n().createElement(eM,null)},{key:"packages",label:e("Packages"),children:n().createElement(eJ,null)},{key:"plugins",label:e("Plugins"),children:n().createElement(e1,null)}]}))}function e3(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 e6(e,t,n){return(e6=e7()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&e8(a,n.prototype),a}).apply(null,arguments)}function e4(e){return(e4=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function e8(e,t){return(e8=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function e5(e){var t="function"==typeof Map?new Map:void 0;return(e5=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 e6(e,arguments,e4(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),e8(n,e)})(e)}function e7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(e7=function(){return!!e})()}var e9=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=e4(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,e7()?Reflect.construct(e,t||[],e4(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&e8(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:e2}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){e3(l,r,a,o,c,"next",e)}function c(e){e3(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}(e5(e.Plugin)),te=e9}(),i}()});
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 i(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return l[e](n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var c={};return!function(){i.r(c),i.d(c,{PluginClusterManagerClient:function(){return e9},default:function(){return te}});var e=i(772),t=i(156),n=i.n(t),r=i(721),a=i(482),l=i(760),o=i.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 i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function d(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){u(l,r,a,o,i,"next",e)}function i(e){u(l,r,a,o,i,"throw",e)}o(void 0)})}}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function 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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return 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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[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,i,c,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],x=f((0,t.useState)(void 0),2),O=x[0],I=x[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===O?"":O}})];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,O]);(0,t.useEffect)(function(){A()},[O]);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=(i=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 i.apply(this,arguments)}),R=(c=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 c.apply(this,arguments)}),z=[{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:O,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:z,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 i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).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,i,"next",e)}function i(e){v(l,r,a,o,i,"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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var O={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,i,c,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],z=T[1],j=C((0,t.useState)({}),2),M=j[0],F=j[1],N=(0,t.useCallback)(E(function(){var e,t,n,a,l=arguments;return x(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 x(this,function(i){switch(i.label){case 0:if(R[e])return[2];F(function(t){return S(w({},t),k({},e,!0))}),i.label=1;case 1:return i.trys.push([1,3,4,5]),[4,s.request({url:"clusterManagerWorkflow:getJobs",params:{filterByTk:e}})];case 2:return o=Array.isArray(null==(l=i.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:[],z(function(t){return S(w({},t),k({},e,o))}),[3,5];case 3:return i.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=(i=E(function(e){return x(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 i.apply(this,arguments)}),L=(c=E(function(e){var t,n;return x(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 c.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):"-"}}],K=[{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=O[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:M[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(O).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:K,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 z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function j(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function M(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){j(l,r,a,o,i,"next",e)}function i(e){j(l,r,a,o,i,"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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return z(e,t)}}(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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function B(l){var o=l.open,i=l.node,c=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],x=S[1],O=(0,t.useRef)(null),I=(0,t.useCallback)(M(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==i?void 0:i.id}})];case 2:return(n=null==(t=a.sent())||null==(e=t.data)?void 0:e.data)&&(n._error&&r.message.warning(n._error),p(n.lines||[]),h(n.node)),[3,5];case 3:return a.sent(),r.message.error("Failed to load logs"),[3,5];case 4:return v(!1),[7];case 5:return[2]}})}),[u,o,i]);(0,t.useEffect)(function(){o&&(p([]),x(""),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(){O.current&&!C&&O.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==i?void 0:i.name)||"",y&&n().createElement(r.Tag,null,y.hostname,":",y.pid," (",y.workerMode,")")),open:o,onCancel:c,footer:null,width:"80vw",styles:{body:{height:"70vh",display:"flex",flexDirection:"column",padding:"12px 24px"}},destroyOnClose:!0},n().createElement(r.Space,{style:{marginBottom:8,flexShrink:0}},n().createElement(r.Input,{placeholder:s("Search logs..."),prefix:n().createElement(a.SearchOutlined,null),value:C,onChange:function(e){return x(e.target.value)},allowClear:!0,style:{width:300}}),n().createElement(r.Switch,{checked: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:O})))}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(),i=(0,e.useAPIClient)(),c=F((0,t.useState)(!1),2),s=c[0],u=c[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],x=S[1],O=(0,t.useCallback)(M(function(){var e,t,n,r,a,l,o,c;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([i.request({url:"clusterManagerCluster:current"}),i.request({url:"clusterManagerCluster:list"}),i.request({url:"clusterManagerCluster:health"})])];case 2:return l=(a=F.apply(void 0,[s.sent(),3]))[0],o=a[1],c=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==c||null==(r=c.data)?void 0:r.data),[3,5];case 3:return s.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[i]),I=(l=M(function(e,t){return N(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,i.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(O,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(){O()},[O]),(0,t.useEffect)(function(){if(k){var e=setInterval(O,1e3*k);return function(){return clearInterval(e)}}},[k,O]);var A=y.filter(function(e){return"online"===e.status}).length,z=[{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 x(t)},disabled:"offline"===t.status},o("Logs")))}}],j=(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:O},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(j).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:z,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 x(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 K(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function _(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){K(l,r,a,o,i,"next",e)}function i(e){K(l,r,a,o,i,"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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var V=r.Typography.Text;function Q(){var l,o,i,c,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)(_(function(){var e,t,n,a,l,o,i;return H(this,function(c){switch(c.label){case 0:v(!0),c.label=1;case 1:return c.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,[c.sent(),2]))[0],i=l[1],p((null==o||null==(e=o.data)?void 0:e.data)||(null==o?void 0:o.data)||{}),h(Array.isArray(null==i||null==(n=i.data)||null==(t=n.data)?void 0:t.data)?i.data.data.data:Array.isArray(null==i||null==(a=i.data)?void 0:a.data)?i.data.data:Array.isArray(null==i?void 0:i.data)?i.data:[]),[3,5];case 3:return c.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=_(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)}),x=(o=_(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)}),O=(i=_(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 i.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)})(c=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)}(c)||W(c)||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 O(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:x},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 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 $(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function G(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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return 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.")}()}var Y=r.Typography.Text;function X(){var l,o=(0,e.useAPIClient)(),i=G((0,t.useState)(null),2),c=i[0],s=i[1],u=G((0,t.useState)({}),2),d=u[0],m=u[1],p=G((0,t.useState)(0),2),f=p[0],y=p[1],h=G((0,t.useState)([]),2),g=h[0],b=h[1],v=G((0,t.useState)([]),2),E=v[0],k=v[1],w=G((0,t.useState)(!1),2),S=w[0],C=w[1],x=G((0,t.useState)(null),2),O=x[0],I=x[1],A=G((0,t.useState)(null),2),P=A[0],T=A[1],z=(0,t.useCallback)((l=function(){var e,t,n,r,a,l,i,c,u,d,p,f,h,g,v,E,w,S,x;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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(O){switch(O.label){case 0:C(!0),T(null),O.label=1;case 1:return O.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=G.apply(void 0,[O.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==(i=h.data)||null==(l=i.data)?void 0:l.data)?h.data.data.data:Array.isArray(null==h||null==(c=h.data)?void 0:c.data)?h.data.data:Array.isArray(null==h?void 0:h.data)?h.data:[]),[3,5];case 3:return T((null==(v=O.sent())||null==(x=v.response)||null==(S=x.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){$(a,n,r,o,i,"next",e)}function i(e){$(a,n,r,o,i,"throw",e)}o(void 0)})}),[o]);if((0,t.useEffect)(function(){z()},[]),(0,t.useEffect)(function(){if(O){var e=setInterval(z,1e3*O);return function(){return clearInterval(e)}}},[O,z]),P)return n().createElement(r.Card,null,n().createElement(Y,{type:"danger"},P),n().createElement("br",null),n().createElement(r.Button,{style:{marginTop:8},onClick:z},"Retry"));if(!c)return null;var j="unlimited"!==c.memory.max_memory&&c.memory.peak_bytes>0?Math.round(c.memory.used_bytes/c.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:z,loading:S},"Refresh"),n().createElement(r.Select,{placeholder:"Auto refresh",allowClear:!0,style:{width:160},value:O,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 ",c.server.version),n().createElement(r.Tag,null,"Uptime: ",R(c.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:c.memory.used,prefix:n().createElement(a.DatabaseOutlined,null),suffix:null!==j?"(".concat(j,"%)"):void 0}),n().createElement(Y,{type:"secondary"},"Peak: ",c.memory.peak),n().createElement("br",null),n().createElement(Y,{type:"secondary"},"Max: ",c.memory.max_memory),n().createElement("br",null),n().createElement(Y,{type:"secondary"},"Policy: ",c.memory.max_memory_policy))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Ops/sec",value:c.stats.ops_per_sec,prefix:n().createElement(a.ThunderboltOutlined,null)}),n().createElement(Y,{type:"secondary"},"Total commands: ",c.stats.total_commands.toLocaleString()))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Connected Clients",value:c.clients.connected,prefix:n().createElement(a.CloudServerOutlined,null)}),n().createElement(Y,{type:"secondary"},"Blocked: ",c.clients.blocked))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:"Cache Hit Rate",value:c.stats.hit_rate,suffix:"%",prefix:n().createElement(a.FieldTimeOutlined,null),valueStyle:{color:c.stats.hit_rate>90?"#3f8600":c.stats.hit_rate>50?"#faad14":"#cf1322"}}),n().createElement(Y,{type:"secondary"},"Hits: ",c.stats.keyspace_hits.toLocaleString()," / Misses:"," ",c.stats.keyspace_misses.toLocaleString()),n().createElement("br",null),n().createElement(Y,{type:"secondary"},"Expired: ",c.stats.expired_keys.toLocaleString()," / Evicted:"," ",c.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(c.keyspace).length?n().createElement(Y,{type:"secondary"},"No databases in use"):n().createElement(r.Table,{rowKey:function(e,t){return String(t)},size:"small",pagination:!1,dataSource:Object.entries(c.keyspace).map(function(e){var t=G(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(Y,{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=G(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(Y,{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=G((0,t.useState)(null),2),o=l[0],i=l[1];return((0,t.useEffect)(function(){a.request({url:"clusterManagerRedis:syncMessages"}).then(function(e){var t;return i(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 i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function en(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){et(l,r,a,o,i,"next",e)}function i(e){et(l,r,a,o,i,"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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ee(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ee(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function el(){var l,o,i=P(),c=(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([c.request({url:"clusterManagerLock:info"}),c.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]}})}),[c]);(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,c.request({url:"clusterManagerLock:release",method:"post",data:{key:e}})];case 1:return t.sent(),r.message.success(i("Lock released")),k(),[3,3];case 2:return t.sent(),r.message.error(i("Failed to release lock")),[3,3];case 3:return[2]}})}),function(e){return l.apply(this,arguments)}),S=[{title:i("Lock Key"),dataIndex:"key",key:"key",render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:i("Adapter"),dataIndex:"adapter",key:"adapter",width:100,render:function(e){return n().createElement(r.Tag,null,e)}},{title:i("TTL"),dataIndex:"ttl",key:"ttl",width:120,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:i("Actions"),key:"actions",width:120,render:function(e,t){return n().createElement(r.Popconfirm,{title:i("Force release this lock?"),description:i("This may cause data inconsistency. Use with caution."),onConfirm:function(){return w(t.key)},okText:i("Release"),cancelText:i("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.UnlockOutlined,null)},i("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},i("Refresh")),n().createElement(r.Select,{placeholder:i("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:i("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:i("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:i("Total Listed"),value:h.length})))),n().createElement(r.Card,{title:i("Active Locks"),size:"small"},0===h.length?n().createElement("div",{style:{textAlign:"center",padding:24,color:"#999"}},i("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 ei(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ec(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ei(l,r,a,o,i,"next",e)}function i(e){ei(l,r,a,o,i,"throw",e)}o(void 0)})}}function 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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eo(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function 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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function ed(){var l,o,i,c,s,u=P(),d=(0,e.useAPIClient)(),m=es((0,t.useState)(!1),2),p=m[0],f=m[1],y=es((0,t.useState)(null),2),h=y[0],g=y[1],b=es((0,t.useState)(null),2),v=b[0],E=b[1],k=es((0,t.useState)(null),2),w=k[0],S=k[1],C=es((0,t.useState)(null),2),x=C[0],O=C[1],I=es((0,t.useState)([]),2),A=I[0],T=I[1],R=es((0,t.useState)({}),2),z=R[0],j=R[1],M=es((0,t.useState)([]),2),F=M[0],N=M[1],B=es((0,t.useState)({}),2),D=B[0],L=B[1],q=(0,t.useCallback)(ec(function(){var e,t;return eu(this,function(n){switch(n.label){case 0:f(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.request({url:"clusterManagerQueue:stats"})];case 2:return g(null==(t=n.sent())||null==(e=t.data)?void 0:e.data),[3,5];case 3:return n.sent(),[3,5];case 4:return f(!1),[7];case 5:return[2]}})}),[d]),K=(0,t.useCallback)((l=ec(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,d.request({url:"clusterManagerQueue:messages",params:{channel:e}})];case 1:return T((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),j((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,3];case 2:return o.sent(),[3,3];case 3:return[2]}})}),function(e){return l.apply(this,arguments)}),[d]),_=(0,t.useCallback)((o=ec(function(e){var t,n,r,a,l;return eu(this,function(o){switch(o.label){case 0:if(!(null==e?void 0:e.key))return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,d.request({url:"clusterManagerQueue:messages",params:{source:"redis",key:e.key}})];case 2:return N((null==(l=o.sent())||null==(n=l.data)||null==(t=n.data)?void 0:t.data)||[]),L((null==l||null==(a=l.data)||null==(r=a.data)?void 0:r.meta)||{}),[3,4];case 3:return o.sent(),[3,4];case 4:return[2]}})}),function(e){return o.apply(this,arguments)}),[d]);(0,t.useEffect)(function(){q()},[q]),(0,t.useEffect)(function(){if(v){var e=setInterval(q,1e3*v);return function(){return clearInterval(e)}}},[v,q]);var U=[{title:u("Channel"),dataIndex:"channel",key:"channel"},{title:u("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:u("Concurrency"),dataIndex:"concurrency",key:"concurrency",width:120},{title:u("Interval"),dataIndex:"interval",key:"interval",width:100,render:function(e){return"".concat(e,"ms")}},{title:u("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){S(t.channel),K(t.channel)}},u("Messages"))}}],W=[{title:"ID",dataIndex:"id",key:"id",width:280,ellipsis:!0},{title:u("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:u("Retried"),dataIndex:"retried",key:"retried",width:80},{title:u("Timestamp"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}],H=[{title:u("Queue"),dataIndex:"channel",key:"channel",width:240},{title:u("Redis Key"),dataIndex:"key",key:"key",ellipsis:!0},{title:u("App"),dataIndex:"appName",key:"appName",width:120},{title:u("Pending"),dataIndex:"pending",key:"pending",width:100,render:function(e){return n().createElement(r.Tag,{color:e>0?"orange":"green"},e)}},{title:u("Actions"),key:"actions",width:100,render:function(e,t){return n().createElement(r.Button,{size:"small",type:"link",onClick:function(){O(t),_(t)}},u("Items"))}}],V=[{title:"#",dataIndex:"index",key:"index",width:80},{title:u("Content"),dataIndex:"content",key:"content",ellipsis:!0,render:function(e){return n().createElement("code",{style:{fontSize:11}},JSON.stringify(e))}},{title:u("Queued At"),dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}}];return n().createElement(r.Spin,{spinning:p},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:q},u("Refresh")),n().createElement(r.Select,{placeholder:u("Auto Refresh"),allowClear:!0,value:v,onChange:E,style:{width:140},options:[{value:5,label:"5s"},{value:10,label:"10s"},{value:30,label:"30s"}]}),h&&n().createElement(r.Tag,{color:h.connected?"green":"red"},h.adapter)),h&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Adapter"),value:h.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:u("Total Channels"),value:h.totalChannels,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Total Pending"),value:h.totalPending,prefix:n().createElement(a.ClockCircleOutlined,null),valueStyle:{color:h.totalPending>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:6},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Connected"),value:h.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:h.connected?"#3f8600":"#cf1322"}})))),(null==h?void 0:h.redisQueues)&&n().createElement(r.Row,{gutter:16},n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Queue Pending"),value:h.redisQueues.totalPending||0,prefix:n().createElement(a.DatabaseOutlined,null),valueStyle:{color:(h.redisQueues.totalPending||0)>0?"#cf1322":"#3f8600"}}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Queues"),value:(null==(i=h.redisQueues.queues)?void 0:i.length)||0,prefix:n().createElement(a.UnorderedListOutlined,null)}))),n().createElement(r.Col,{span:8},n().createElement(r.Card,{size:"small"},n().createElement(r.Statistic,{title:u("Redis Connected"),value:h.redisQueues.connected?"Yes":"No",prefix:n().createElement(a.ThunderboltOutlined,null),valueStyle:{color:h.redisQueues.connected?"#3f8600":"#cf1322"}})))),n().createElement(r.Card,{title:u("Event Channels"),size:"small"},n().createElement(r.Table,{dataSource:(null==h?void 0:h.channels)||[],columns:U,rowKey:"channel",size:"small",pagination:!1})),n().createElement(r.Card,{title:u("Redis Queues"),size:"small"},(null==h||null==(c=h.redisQueues)?void 0:c.note)&&n().createElement(r.Tag,{style:{marginBottom:8}},h.redisQueues.note),n().createElement(r.Table,{dataSource:(null==h||null==(s=h.redisQueues)?void 0:s.queues)||[],columns:H,rowKey:"key",size:"small",pagination:!1})),w&&n().createElement(r.Card,{title:"".concat(u("Messages"),": ").concat(w),size:"small",extra:n().createElement(r.Button,{size:"small",onClick:function(){return S(null)}},"Close")},z.note&&n().createElement(r.Tag,{style:{marginBottom:8}},z.note),n().createElement(r.Table,{dataSource:A,columns:W,rowKey:"id",size:"small",pagination:{pageSize:10,total:z.count}})),x&&n().createElement(r.Card,{title:"".concat(u("Redis Queue Items"),": ").concat(x.channel),size:"small",extra:n().createElement(r.Space,null,n().createElement(r.Button,{size:"small",onClick:function(){return _(x)}},u("Refresh")),n().createElement(r.Button,{size:"small",onClick:function(){return O(null)}},u("Close")))},n().createElement(r.Tag,{style:{marginBottom:8}},x.key),D.note&&n().createElement(r.Tag,{style:{marginBottom:8}},D.note),n().createElement(r.Table,{dataSource:F,columns:V,rowKey:"id",size:"small",pagination:{pageSize:10,total:D.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 i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function ef(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ep(l,r,a,o,i,"next",e)}function i(e){ep(l,r,a,o,i,"throw",e)}o(void 0)})}}function ey(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return em(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return em(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eh(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function eg(){var l,o=P(),i=(0,e.useAPIClient)(),c=ey((0,t.useState)(!1),2),s=c[0],u=c[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,c,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([i.request({url:"clusterManagerCacheMgr:stores"}),i.request({url:"clusterManagerCacheMgr:caches"}),i.request({url:"clusterManagerCacheMgr:redisMemory"})])];case 2:return o=(l=ey.apply(void 0,[d.sent(),3]))[0],c=l[1],s=l[2],p((null==o||null==(t=o.data)||null==(e=t.data)?void 0:e.data)||[]),h((null==c||null==(r=c.data)||null==(n=r.data)?void 0:n.data)||[]),v(null==s||null==(a=s.data)?void 0:a.data),[3,5];case 3:return d.sent(),[3,5];case 4:return u(!1),[7];case 5:return[2]}})}),[i]);(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,i.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(Q,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 i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eE(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){ev(l,r,a,o,i,"next",e)}function i(e){ev(l,r,a,o,i,"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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return 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 ex(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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eO=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 ez(e,t){return JSON.stringify(null!=e?e:t,null,2)}function ej(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 eM(){var l,o,i,c,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],x=S[1],O=eC((0,t.useState)({}),2),I=O[0],A=O[1],T=eC((0,t.useState)({visible:!1,containerId:"",logs:[]}),2),R=T[0],z=T[1],j=eC((0,t.useState)({visible:!1,containerName:"",logs:""}),2),M=j[0],F=j[1],N=eC((0,t.useState)(null),2),B=N[0],D=N[1],L=eC((0,t.useState)(!1),2),q=L[0],K=L[1],_=eC((0,t.useState)({visible:!1,stack:null}),2),U=_[0],W=_[1],H=eC(r.Form.useForm(),1)[0],V=eC(r.Form.useForm(),1)[0],Q=eC((0,t.useState)([]),2),J=Q[0],$=Q[1],G=(0,t.useCallback)(eE(function(){var e,t,n;return ex(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,p.request({url:"/workerOrchestrator:networks"})];case 1:return Array.isArray(n=(null==(e=(t=r.sent()).data)?void 0:e.data)||t.data)||(n=[]),$(n),[3,3];case 2:return r.sent(),$([]),[3,3];case 3:return[2]}})}),[p]),Y=(0,t.useCallback)(eE(function(){var e,t;return ex(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]),X=(0,t.useCallback)(eE(function(){var e,t,n;return ex(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]),Z=(0,t.useCallback)((l=eE(function(e){var t,n,a,l;return ex(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||[]))}),x(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]),ee=(0,t.useCallback)(eE(function(){var e,t;return ex(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]),et=(o=eE(function(e){var t;return ex(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...")),K(!1),[4,Y()];case 3:return n.sent(),[4,X()];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)}),en=function(e){W({visible:!0,stack:e||null}),V.setFieldsValue(e?eS(ew({},e),{envVars:ez(e.envVars,{}),resourceLimits:ez(e.resourceLimits,{}),k8sEnv:ez(e.k8sEnv,[]),k8sEnvFrom:ez(e.k8sEnvFrom,[]),k8sVolumeMounts:ez(e.k8sVolumeMounts,[]),k8sVolumes:ez(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:ez(eI,{}),resourceLimits:ez({memory:"1536Mi"},{}),desiredReplicas:1,enabled:!0,namespace:"nocobase",deploymentName:"app-workers",serviceAccountName:"nocobase-orchestrator",imagePullPolicy:"IfNotPresent",k8sContainerName:"worker",k8sEnv:ez([],[]),k8sEnvFrom:ez(eA,[]),k8sVolumeMounts:ez(eP,[]),k8sVolumes:ez(eT,[]),networkMode:""}),G()},er=function(){W({visible:!1,stack:null}),V.resetFields()},ea=(i=eE(function(e){var t,n,a,l,o,i,c;return ex(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:ej(e.envVars,{},"Environment variables"),resourceLimits:ej(e.resourceLimits,{},"Resource limits"),k8sEnv:ej(e.k8sEnv,[],"Kubernetes env"),k8sEnvFrom:ej(e.k8sEnvFrom,[],"Kubernetes envFrom"),k8sVolumeMounts:ej(e.k8sVolumeMounts,[],"Kubernetes volume mounts"),k8sVolumes:ej(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 er(),[4,X()];case 6:return s.sent(),[3,9];case 7:return a=s.sent(),r.message.error((null==a||null==(c=a.response)||null==(i=c.data)||null==(o=i.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 i.apply(this,arguments)});(0,t.useEffect)(function(){Y(),X(),ee()},[Y,X,ee]),(0,t.useEffect)(function(){var e=function(){b.forEach(function(e){return Z(e.id)})};e();var t=setInterval(function(){X(),e()},1e4);return function(){return clearInterval(t)}},[b,Z,X]);var el=(c=eE(function(e){var t,n,a,l,o,i,c,s,u;return ex(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,Z(e)];case 3:return d.sent(),[4,X()];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==(c=s.errors)||null==(i=c[0])?void 0:i.message)||o.message),[3,7];case 6:return h(!1),[7];case 7:return[2]}})}),function(e){return c.apply(this,arguments)}),eo=(s=eE(function(e,t,n){var a,l,o,i,c;return ex(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,Z(n)];case 3:return s.sent(),[3,6];case 4:return a=s.sent(),r.message.error((null==(c=a.response)||null==(i=c.data)||null==(o=i.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)}),ei=(u=eE(function(e,t){var n,a,l;return ex(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 z({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)}),ec=[{title:m("Container"),dataIndex:"name",key:"name",render:function(e,t){return n().createElement(r.Space,null,n().createElement(eO,{code:!0,style:{fontSize:11}},t.id),n().createElement(eO,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(eO,{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(eO,{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 eo("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 eo("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 ei(t.id,t._stackId)}})),n().createElement(r.Popconfirm,{title:m("Remove this container?"),onConfirm:function(){return eo("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(eO,{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(eO,{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 en()}},m("New worker stack")),n().createElement(r.Button,{icon:n().createElement(a.SettingOutlined,null),onClick:function(){return K(!0)}},m("Settings")),n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:function(){Y(),X()}},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,i,c=(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(eO,{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 en(e)}}))),style:{marginBottom:16}},n().createElement("div",{style:{marginBottom:16,display:"flex",alignItems:"center",gap:12}},n().createElement(eO,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 el(e.id)},disabled:(null!=(l=I[e.id])?l:e.desiredReplicas)===s.running},m("Scale")),n().createElement(eO,{type:"secondary"},null!=(o=s.running)?o:"?"," / ",null!=(i=I[e.id])?i:e.desiredReplicas," ",m("running")),n().createElement(r.Button,{size:"small",icon:n().createElement(a.ReloadOutlined,null),onClick:function(){return Z(e.id)}})),n().createElement(r.Table,{dataSource:c,columns:ec,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 K(!0)}},m("Configure Settings"))}),n().createElement(r.Modal,{title:"".concat(m("Logs"),": ").concat(R.containerId),open:R.visible,onCancel:function(){return z({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(M.containerName),open:M.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"}},M.logs||m("No logs available"))),n().createElement(r.Modal,{title:U.stack?m("Edit worker stack"):m("New worker stack"),open:U.visible,onCancel:er,onOk:function(){return V.submit()},okText:m("Save"),confirmLoading:y,width:860,destroyOnClose:!0},n().createElement(r.Form,{form:V,layout:"vertical",onFinish:ea},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:8},n().createElement(r.Form.Item,{name:"k8sContainerName",label:m("Container name")},n().createElement(r.Input,{placeholder:"worker"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{name:"namespace",label:m("Namespace")},n().createElement(r.Input,{placeholder:"nocobase"}))),n().createElement(r.Col,{span:8},n().createElement(r.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.adapter!==t.adapter}},function(){return"docker"===V.getFieldValue("adapter")?n().createElement(r.Form.Item,{name:"networkMode",label:m("Docker Network"),extra:m("Main network. Workers also inherit app networks.")},n().createElement(r.Select,{allowClear:!0,placeholder:m("Default (bridge)")},n().createElement(r.Select.Option,{value:"bridge"},"bridge"),n().createElement(r.Select.Option,{value:"host"},"host"),(Array.isArray(J)?J:[]).map(function(e){return n().createElement(r.Select.Option,{key:e.id,value:e.name},e.name)}))):null}))),n().createElement(r.Form.Item,{name:"command",label: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 K(!1)},footer:null,width:600},n().createElement(r.Form,{form:H,layout:"vertical",onFinish:et,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 eK(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function e_(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eK(l,r,a,o,i,"next",e)}function i(e){eK(l,r,a,o,i,"throw",e)}o(void 0)})}}function eU(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return 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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[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 eQ(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 eJ=function(){var l,o,i,c,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],x=S[1],O=eU((0,t.useState)(null),2),I=O[0],A=O[1],T=eU((0,t.useState)(null),2),R=T[0],z=T[1],j=eU((0,t.useState)("all"),2),M=j[0],F=j[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)(e_(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?(x(!0),z({percent:r.initProgressPercent||0,log:r.initProgressLog||f("Processing...")})):(x(!1),z(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 K=(l=e_(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)}),_=(o=e_(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,K(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=(i=e_(function(){var e,t;return eW(this,function(n){switch(n.label){case 0:x(!0),z({percent:0,log:f("Dispatching to target nodes...")}),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,K(e=h.getFieldsValue())];case 2:return n.sent(),[4,y.request({url:"workerPackages:installPackages",method:"post",data:{targetRole:M,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")),x(!1),z(null),[3,6];case 6:return[2]}})}),function(){return i.apply(this,arguments)}),W=eV[null==I?void 0:I.initStatus]||eV.pending,H=(null==I?void 0:I.packageWhitelist)||{},V=(null==H||null==(c=H.python)?void 0:c.length)>0||(null==H||null==(s=H.node)?void 0:s.length)>0||(null==H||null==(u=H.apt)?void 0:u.length)>0,Q=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:M,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:e_(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:_,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: "),eQ(Q.apt||[])),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Python: "),eQ(Q.python||[],"blue")),n().createElement("div",{style:{marginTop:4}},n().createElement(eH,{type:"secondary"},"Node: "),eQ(Q.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: "),eQ(H.apt)),(null==H||null==(m=H.python)?void 0:m.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Python: "),eQ(H.python,"blue")),(null==H||null==(p=H.node)?void 0:p.length)>0&&n().createElement("div",null,n().createElement(eH,{strong:!0},"Node: "),eQ(H.node,"green"))):n().createElement(r.Alert,{type:"warning",showIcon:!0,message:f("No successful install has generated a whitelist yet.")})))};function e$(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 eG(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function eY(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){eG(l,r,a,o,i,"next",e)}function i(e){eG(l,r,a,o,i,"throw",e)}o(void 0)})}}function eX(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,i=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return e$(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$(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eZ(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function e0(e,t){var n,r,a,l;return(null==e||null==(l=e.response)||null==(a=l.data)||null==(r=a.errors)||null==(n=r[0])?void 0:n.message)||(null==e?void 0:e.message)||t}function e1(){var l,o,i=P(),c=(0,e.useAPIClient)(),s=eX((0,t.useState)(!1),2),u=s[0],d=s[1],m=eX((0,t.useState)(null),2),p=m[0],f=m[1],y=eX((0,t.useState)(""),2),h=y[0],g=y[1],b=eX((0,t.useState)([]),2),v=b[0],E=b[1],k=(0,t.useCallback)(eY(function(){var e,t,n,a,l;return eZ(this,function(o){switch(o.label){case 0:d(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,c.request({url:"clusterManagerPlugins:list"})];case 2:return E(Array.isArray(null==(a=o.sent())||null==(t=a.data)||null==(e=t.data)?void 0:e.data)?a.data.data.data:Array.isArray(null==a||null==(n=a.data)?void 0:n.data)?a.data.data:Array.isArray(null==a?void 0:a.data)?a.data:[]),[3,5];case 3:return l=o.sent(),r.message.error(e0(l,i("Failed to load plugins"))),[3,5];case 4:return d(!1),[7];case 5:return[2]}})}),[c,i]);(0,t.useEffect)(function(){k()},[k]);var w=(0,t.useMemo)(function(){var e=h.trim().toLowerCase(),t=Array.isArray(v)?v:[];return e?t.filter(function(t){return[t.name,t.packageName,t.displayName,t.description].filter(Boolean).some(function(t){return String(t).toLowerCase().includes(e)})}):t},[v,h]),S=(l=eY(function(e){var t,n,a,l,o;return eZ(this,function(s){switch(s.label){case 0:f("".concat(e.name,":disable")),s.label=1;case 1:return s.trys.push([1,4,5,6]),[4,c.request({url:"clusterManagerPlugins:forceDisable",method:"post",data:{name:e.name}})];case 2:return l=s.sent(),r.message.success((null==l||null==(n=l.data)||null==(t=n.data)?void 0:t.message)||(null==l||null==(a=l.data)?void 0:a.message)||i("Plugin force disabled")),[4,k()];case 3:return s.sent(),[3,6];case 4:return o=s.sent(),r.message.error(e0(o,i("Failed to force disable plugin"))),[3,6];case 5:return f(null),[7];case 6:return[2]}})}),function(e){return l.apply(this,arguments)}),C=(o=eY(function(e){var t,n,a,l,o;return eZ(this,function(s){switch(s.label){case 0:f("".concat(e.name,":remove")),s.label=1;case 1:return s.trys.push([1,4,5,6]),[4,c.request({url:"clusterManagerPlugins:forceRemove",method:"post",data:{name:e.name}})];case 2:return l=s.sent(),r.message.success((null==l||null==(n=l.data)||null==(t=n.data)?void 0:t.message)||(null==l||null==(a=l.data)?void 0:a.message)||i("Plugin force removed")),[4,k()];case 3:return s.sent(),[3,6];case 4:return o=s.sent(),r.message.error(e0(o,i("Failed to force remove plugin"))),[3,6];case 5:return f(null),[7];case 6:return[2]}})}),function(e){return o.apply(this,arguments)}),x=[{title:i("Plugin"),dataIndex:"displayName",key:"displayName",render:function(e,t){return n().createElement(r.Space,{direction:"vertical",size:0},n().createElement(r.Typography.Text,{strong:!0},t.displayName||t.name),n().createElement(r.Typography.Text,{type:"secondary",style:{fontSize:12}},t.packageName||t.name))}},{title:i("Name"),dataIndex:"name",key:"name",width:220,render:function(e){return n().createElement("code",{style:{fontSize:12}},e)}},{title:i("Status"),key:"status",width:260,render:function(e,t){return n().createElement(r.Space,{wrap:!0,size:[4,4]},n().createElement(r.Tag,{color:t.enabled?"green":"default"},t.enabled?i("Enabled"):i("Disabled")),n().createElement(r.Tag,{color:t.installed?"blue":"default"},t.installed?i("Installed"):i("Not installed")),n().createElement(r.Tag,{color:t.loaded?"processing":"default"},t.loaded?i("Loaded"):i("Not loaded")),t.protected&&n().createElement(r.Tag,{color:"red"},i("Protected")))}},{title:i("Version"),dataIndex:"version",key:"version",width:120,render:function(e){return e||"-"}},{title:i("Description"),dataIndex:"description",key:"description",ellipsis:!0,render:function(e){return e||"-"}},{title:i("Actions"),key:"actions",width:250,render:function(e,t){return n().createElement(r.Space,null,n().createElement(r.Popconfirm,{title:i("Force disable this plugin?"),description:i("This updates the plugin registry directly. Restart or reload is required to fully unload runtime hooks."),disabled:t.protected||!t.enabled,onConfirm:function(){return S(t)},okText:i("Force disable"),cancelText:i("Cancel")},n().createElement(r.Button,{size:"small",icon:n().createElement(a.StopOutlined,null),disabled:t.protected||!t.enabled,loading:p==="".concat(t.name,":disable")},i("Force disable"))),n().createElement(r.Popconfirm,{title:i("Force remove this plugin?"),description:i("This removes the plugin registry record. Package files are not deleted. Restart or reload is required."),disabled:t.protected,onConfirm:function(){return C(t)},okText:i("Force remove"),cancelText:i("Cancel")},n().createElement(r.Button,{size:"small",danger:!0,icon:n().createElement(a.DeleteOutlined,null),disabled:t.protected,loading:p==="".concat(t.name,":remove")},i("Force remove"))))}}];return n().createElement(r.Spin,{spinning:u},n().createElement(r.Space,{direction:"vertical",style:{width:"100%"},size:"middle"},n().createElement(r.Alert,{type:"warning",showIcon:!0,icon:n().createElement(a.ExclamationCircleOutlined,null),message:i("Force operations bypass plugin lifecycle hooks"),description:i("Use this only when the normal plugin manager cannot disable or remove a broken plugin. Restart or reload the app after a successful operation.")}),n().createElement(r.Space,null,n().createElement(r.Button,{icon:n().createElement(a.ReloadOutlined,null),onClick:k},i("Refresh")),n().createElement(r.Input.Search,{allowClear:!0,placeholder:i("Search plugins"),value:h,onChange:function(e){return g(e.target.value)},style:{width:320}})),n().createElement(r.Table,{rowKey:"name",size:"small",dataSource:w,columns:x,pagination:{pageSize:20},scroll:{x:1100}})))}function e2(){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(eM,null)},{key:"packages",label:e("Packages"),children:n().createElement(eJ,null)},{key:"plugins",label:e("Plugins"),children:n().createElement(e1,null)}]}))}function e3(e,t,n,r,a,l,o){try{var i=e[l](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,a)}function e6(e,t,n){return(e6=e7()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&e8(a,n.prototype),a}).apply(null,arguments)}function e4(e){return(e4=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function e8(e,t){return(e8=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function e5(e){var t="function"==typeof Map?new Map:void 0;return(e5=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 e6(e,arguments,e4(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),e8(n,e)})(e)}function e7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(e7=function(){return!!e})()}var e9=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=e4(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,e7()?Reflect.construct(e,t||[],e4(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&e8(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:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(e){return t.app.pluginSettingsManager.add("plugin-cluster-manager",{title:'{{t("Cluster Manager")}}',icon:"DashboardOutlined",Component:e2}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){e3(l,r,a,o,i,"next",e)}function i(e){e3(l,r,a,o,i,"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}(e5(e.Plugin)),te=e9}(),c}()});