@dovetail-v2/refine 0.0.63-pod-exec.0 → 0.0.64

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 (226) hide show
  1. package/dist/{MonacoYamlDiffEditor-79a8df0a.js → MonacoYamlDiffEditor-c863e3f0.js} +1 -1
  2. package/dist/{index-f192f242.js → index-7523291c.js} +5948 -14736
  3. package/dist/refine.js +179 -160
  4. package/dist/refine.umd.cjs +5721 -14509
  5. package/dist/style.css +14 -232
  6. package/lib/src/App.js +91 -0
  7. package/lib/src/Dovetail.js +45 -0
  8. package/lib/src/components/Breadcrumb/index.js +20 -0
  9. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  10. package/lib/src/components/ConditionsTable/index.js +1 -0
  11. package/lib/src/components/CreateButton/index.js +10 -0
  12. package/lib/src/components/CronJobDropdown/index.js +26 -0
  13. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  14. package/lib/src/components/DeleteButton/index.js +13 -0
  15. package/lib/src/components/DeleteManyButton/index.js +16 -0
  16. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  17. package/lib/src/components/DrawerShow/index.js +1 -0
  18. package/lib/src/components/EditButton/index.js +13 -0
  19. package/lib/src/components/EditField/index.js +47 -0
  20. package/lib/src/components/ErrorContent/index.js +36 -0
  21. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  22. package/lib/src/components/EventsTable/index.js +1 -0
  23. package/lib/src/components/Form/FormModal.d.ts +0 -1
  24. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  25. package/lib/src/components/Form/MetadataForm.js +9 -0
  26. package/lib/src/components/Form/NameInputWidget.js +50 -0
  27. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  28. package/lib/src/components/Form/index.js +4 -0
  29. package/lib/src/components/Form/type.d.ts +4 -3
  30. package/lib/src/components/Form/widget.js +1 -0
  31. package/lib/src/components/FormErrorAlert/index.js +8 -0
  32. package/lib/src/components/FormLayout/index.js +21 -0
  33. package/lib/src/components/FormModal/index.js +51 -0
  34. package/lib/src/components/ImageNames/index.js +14 -0
  35. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  36. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  37. package/lib/src/components/IngressRulesTable/index.js +1 -0
  38. package/lib/src/components/K8sDropdown/index.d.ts +1 -1
  39. package/lib/src/components/K8sDropdown/index.js +31 -0
  40. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  41. package/lib/src/components/KeyValue/index.js +1 -0
  42. package/lib/src/components/KeyValueData/index.js +50 -0
  43. package/lib/src/components/Layout/index.js +39 -0
  44. package/lib/src/components/ListPage/index.js +25 -0
  45. package/lib/src/components/Menu/index.js +36 -0
  46. package/lib/src/components/NamespacesFilter/index.js +34 -0
  47. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +1 -2
  48. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  49. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  50. package/lib/src/components/PageShow/PageShow.js +11 -0
  51. package/lib/src/components/PageShow/index.js +1 -0
  52. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  53. package/lib/src/components/PodContainersTable/index.js +1 -0
  54. package/lib/src/components/PodLog/index.js +136 -0
  55. package/lib/src/components/ReferenceLink/index.js +17 -0
  56. package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
  57. package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
  58. package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
  59. package/lib/src/components/RefineForm/index.d.ts +3 -0
  60. package/lib/src/components/RefineForm/type.d.ts +20 -0
  61. package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
  62. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  63. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  64. package/lib/src/components/ResourceCRUD/index.js +4 -0
  65. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  66. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  67. package/lib/src/components/ResourceLink/index.d.ts +1 -1
  68. package/lib/src/components/ResourceLink/index.js +21 -0
  69. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  70. package/lib/src/components/Separator/index.js +11 -0
  71. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  72. package/lib/src/components/ShowContent/fields.d.ts +7 -1
  73. package/lib/src/components/ShowContent/fields.js +157 -0
  74. package/lib/src/components/ShowContent/groups.d.ts +2 -1
  75. package/lib/src/components/ShowContent/index.js +2 -0
  76. package/lib/src/components/StateTag/StateTag.js +22 -0
  77. package/lib/src/components/StateTag/index.js +1 -0
  78. package/lib/src/components/Table/ErrorContent.js +36 -0
  79. package/lib/src/components/Table/TableToolBar.js +14 -0
  80. package/lib/src/components/Table/TableWidgets.js +28 -0
  81. package/lib/src/components/Table/index.js +69 -0
  82. package/lib/src/components/Tags/index.js +22 -0
  83. package/lib/src/components/Time/index.js +14 -0
  84. package/lib/src/components/ValueDisplay/index.d.ts +1 -1
  85. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  86. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  87. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  88. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  89. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  90. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  91. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  92. package/lib/src/components/YamlEditor/index.js +1 -0
  93. package/lib/src/components/YamlEditor/style.js +102 -0
  94. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  95. package/lib/src/components/YamlForm/index.d.ts +0 -4
  96. package/lib/src/components/YamlForm/index.js +61 -0
  97. package/lib/src/components/index.d.ts +2 -1
  98. package/lib/src/components/index.js +38 -0
  99. package/lib/src/constants/index.js +2 -0
  100. package/lib/src/constants/k8s.d.ts +18 -0
  101. package/lib/src/constants/k8s.js +203 -0
  102. package/lib/src/constants/state.js +15 -0
  103. package/lib/src/contexts/component.js +3 -0
  104. package/lib/src/contexts/configs.js +3 -0
  105. package/lib/src/contexts/global-store.js +3 -0
  106. package/lib/src/contexts/index.js +3 -0
  107. package/lib/src/hooks/index.js +7 -0
  108. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  109. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  110. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  111. package/lib/src/hooks/useDownloadYAML.js +10 -0
  112. package/lib/src/hooks/useEagleForm.d.ts +1 -2
  113. package/lib/src/hooks/useEagleForm.js +177 -0
  114. package/lib/src/hooks/useEagleTable/columns.d.ts +8 -1
  115. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  116. package/lib/src/hooks/useEagleTable/index.js +2 -0
  117. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  118. package/lib/src/hooks/useEdit.js +19 -0
  119. package/lib/src/hooks/useGlobalStore.js +5 -0
  120. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  121. package/lib/src/hooks/useOpenForm.js +43 -0
  122. package/lib/src/hooks/useSchema.js +37 -0
  123. package/lib/src/hooks/useSubmitForm.js +42 -0
  124. package/lib/src/i18n.d.ts +4 -2
  125. package/lib/src/i18n.js +19 -0
  126. package/lib/src/index.js +13 -0
  127. package/lib/src/locales/en-US/dovetail.json +18 -0
  128. package/lib/src/locales/en-US/index.d.ts +0 -1
  129. package/lib/src/locales/en-US/index.js +4 -0
  130. package/lib/src/locales/index.js +6 -0
  131. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  132. package/lib/src/locales/zh-CN/index.d.ts +4 -1
  133. package/lib/src/locales/zh-CN/index.js +4 -0
  134. package/lib/src/main.js +12 -0
  135. package/lib/src/models/cronjob-model.js +32 -0
  136. package/lib/src/models/daemonset-model.js +17 -0
  137. package/lib/src/models/deployment-model.js +17 -0
  138. package/lib/src/models/event-model.js +11 -0
  139. package/lib/src/models/index.d.ts +4 -0
  140. package/lib/src/models/index.js +14 -0
  141. package/lib/src/models/ingress-model.js +24 -0
  142. package/lib/src/models/job-model.js +56 -0
  143. package/lib/src/models/network-policy-model.js +10 -0
  144. package/lib/src/models/node-model.d.ts +3 -0
  145. package/lib/src/models/pod-metrics-model.js +34 -0
  146. package/lib/src/models/pod-model.js +78 -0
  147. package/lib/src/models/resource-model.js +34 -0
  148. package/lib/src/models/server-instance-model.d.ts +10 -0
  149. package/lib/src/models/service-model.js +17 -0
  150. package/lib/src/models/statefulset-model.js +17 -0
  151. package/lib/src/models/storage-class.d.ts +3 -0
  152. package/lib/src/models/types/index.js +1 -0
  153. package/lib/src/models/types/metric.js +1 -0
  154. package/lib/src/models/workload-base-model.d.ts +2 -2
  155. package/lib/src/models/workload-base-model.js +22 -0
  156. package/lib/src/models/workload-model.js +51 -0
  157. package/lib/src/pages/configmaps/index.js +15 -0
  158. package/lib/src/pages/cronjobs/create/index.js +6 -0
  159. package/lib/src/pages/cronjobs/index.js +3 -0
  160. package/lib/src/pages/cronjobs/list/index.js +42 -0
  161. package/lib/src/pages/cronjobs/show/index.js +16 -0
  162. package/lib/src/pages/daemonsets/create/index.js +6 -0
  163. package/lib/src/pages/daemonsets/index.js +3 -0
  164. package/lib/src/pages/daemonsets/list/index.js +32 -0
  165. package/lib/src/pages/daemonsets/show/index.js +16 -0
  166. package/lib/src/pages/deployments/create/index.js +7 -0
  167. package/lib/src/pages/deployments/index.js +3 -0
  168. package/lib/src/pages/deployments/list/index.js +26 -0
  169. package/lib/src/pages/deployments/show/index.js +16 -0
  170. package/lib/src/pages/ingresses/index.js +26 -0
  171. package/lib/src/pages/jobs/index.js +34 -0
  172. package/lib/src/pages/networkPolicies/index.js +67 -0
  173. package/lib/src/pages/persistentvolumes/index.d.ts +19 -0
  174. package/lib/src/pages/pods/create/index.js +6 -0
  175. package/lib/src/pages/pods/index.js +3 -0
  176. package/lib/src/pages/pods/list/index.js +81 -0
  177. package/lib/src/pages/pods/show/index.js +54 -0
  178. package/lib/src/pages/secrets/index.js +15 -0
  179. package/lib/src/pages/services/index.js +26 -0
  180. package/lib/src/pages/statefulsets/create/index.js +6 -0
  181. package/lib/src/pages/statefulsets/index.js +3 -0
  182. package/lib/src/pages/statefulsets/list/index.js +26 -0
  183. package/lib/src/pages/statefulsets/show/index.js +16 -0
  184. package/lib/src/pages/storageclasses/index.d.ts +6 -5
  185. package/lib/src/plugins/index.js +3 -0
  186. package/lib/src/plugins/model-plugin.js +46 -0
  187. package/lib/src/plugins/relation-plugin.js +81 -0
  188. package/lib/src/plugins/type.js +1 -0
  189. package/lib/src/providers/index.js +1 -0
  190. package/lib/src/providers/router-provider/index.js +100 -0
  191. package/lib/src/types/index.js +1 -0
  192. package/lib/src/types/resource.d.ts +3 -1
  193. package/lib/src/types/resource.js +12 -0
  194. package/lib/src/utils/addId.js +8 -0
  195. package/lib/src/utils/download.js +9 -0
  196. package/lib/src/utils/error.js +53 -0
  197. package/lib/src/utils/form.js +9 -0
  198. package/lib/src/utils/k8s.js +6 -0
  199. package/lib/src/utils/labels.js +15 -0
  200. package/lib/src/utils/match-selector.js +12 -0
  201. package/lib/src/utils/openapi.js +33 -0
  202. package/lib/src/utils/schema.js +117 -0
  203. package/lib/src/utils/selector.js +12 -0
  204. package/lib/src/utils/string.js +6 -0
  205. package/lib/src/utils/time.js +46 -0
  206. package/lib/src/utils/unit.js +69 -0
  207. package/lib/src/utils/yaml.js +44 -0
  208. package/lib/vite.config.js +60 -0
  209. package/package.json +1 -6
  210. package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
  211. package/lib/src/components/PodDropdown/index.d.ts +0 -9
  212. package/lib/src/components/PodShellModal/index.d.ts +0 -7
  213. package/lib/src/hooks/useModal.d.ts +0 -0
  214. package/lib/src/hooks/useNamespaceFilter.d.ts +0 -5
  215. package/lib/src/model/cronjob-model.d.ts +0 -9
  216. package/lib/src/model/index.d.ts +0 -6
  217. package/lib/src/model/job-model.d.ts +0 -10
  218. package/lib/src/model/pod-metrics-model.d.ts +0 -7
  219. package/lib/src/model/pod-model.d.ts +0 -15
  220. package/lib/src/model/resource-model.d.ts +0 -17
  221. package/lib/src/model/workload-model.d.ts +0 -17
  222. package/lib/src/pages/nodes/hooks/useNodeMetrics.d.ts +0 -17
  223. package/lib/src/pages/storageclasses/list/index.d.ts +0 -3
  224. package/lib/src/pages/storageclasses/show/index.d.ts +0 -3
  225. package/lib/src/types/metric.d.ts +0 -25
  226. package/lib/src/utils/shell.d.ts +0 -16
@@ -0,0 +1,91 @@
1
+ {
2
+ "copy": "复制",
3
+ "reset_arguments": "重置",
4
+ "view_changes": "查看改动",
5
+ "back_to_edit": "编辑",
6
+ "configure_file": "配置内容",
7
+ "yaml_format_wrong": "配置内容不是有效的 yaml 格式。",
8
+ "yaml_value_wrong": "配置内容中存在不合法的值。",
9
+ "edit_yaml": "编辑 YAML",
10
+ "copied": "已复制",
11
+ "already_reset": "已重置",
12
+ "cancel": "取消",
13
+ "delete": "删除",
14
+ "create": "创建",
15
+ "confirm_delete_text": "确定要删除 {{target}} 吗?",
16
+ "edit": "编辑",
17
+ "namespace": "名字空间",
18
+ "name": "名称",
19
+ "state": "状态",
20
+ "status": "状态",
21
+ "phase": "状态",
22
+ "image": "容器镜像",
23
+ "replicas": "副本数",
24
+ "created_time": "创建时间",
25
+ "label": "标签",
26
+ "annotation": "注释",
27
+ "type": "类型",
28
+ "event": "事件",
29
+ "reason": "原因",
30
+ "object": "对象",
31
+ "note": "事件信息",
32
+ "condition": "Condition",
33
+ "download_yaml": "下载 YAML",
34
+ "detail": "详情",
35
+ "node_name": "主机名称",
36
+ "restarts": "重启次数",
37
+ "updated_time": "更新时间",
38
+ "message": "消息",
39
+ "save": "保存",
40
+ "more": "更多",
41
+ "workload": "工作负载",
42
+ "all_namespaces": "所有名字空间",
43
+ "empty": "无可显示的数据",
44
+ "schedule": "调度时间表",
45
+ "lastScheduleTime": "上次调度时间",
46
+ "duration": "持续时间",
47
+ "completions": "完成 Job 历史数",
48
+ "started": "开始时间",
49
+ "init_container": "初始化容器",
50
+ "container": "容器",
51
+ "redeploy": "重新部署",
52
+ "data": "数据",
53
+ "suspend": "暂停",
54
+ "resume": "重新开始",
55
+ "cluster": "集群",
56
+ "storage": "存储",
57
+ "network": "网络",
58
+ "clusterIp": "集群 IP",
59
+ "sessionAffinity": "会话保持",
60
+ "log": "日志",
61
+ "select_container": "选择容器",
62
+ "wrap": "折叠",
63
+ "resume_log": "继续",
64
+ "log_new_lines": ",并展示 {{ count }} 行新日志",
65
+ "fetch_schema_fail": "获取 schema 失败。",
66
+ "obtain_data_error": "获取数据时遇到问题。",
67
+ "retry": "重试",
68
+ "ready": "就绪",
69
+ "updating": "更新中",
70
+ "completed": "完成",
71
+ "failed": "异常",
72
+ "suspended": "挂起",
73
+ "running": "运行中",
74
+ "terminating": "终止",
75
+ "succeeded": "成功终止",
76
+ "unknown": "未知",
77
+ "pending": "待处理",
78
+ "waiting": "等待中",
79
+ "create_resource": "创建 {{resource}}",
80
+ "edit_resource": "编辑 {{resource}}",
81
+ "sec": "秒",
82
+ "min": "分",
83
+ "hr": "小时",
84
+ "day": "天",
85
+ "expand": "展开",
86
+ "fold": "收起",
87
+ "rule": "规则",
88
+ "default_backend": "默认后端",
89
+ "ingress_rule_type": "规则类型",
90
+ "port": "端口"
91
+ }
@@ -155,7 +155,10 @@ declare const _default: {
155
155
  only_support_one_yaml: string;
156
156
  not_support: string;
157
157
  stopped: string;
158
- any_node_ip: string;
158
+ storage_class: string;
159
+ persistent_volumn: string;
160
+ provisioner: string;
161
+ file_system: string;
159
162
  };
160
163
  };
161
164
  export default _default;
@@ -0,0 +1,4 @@
1
+ import dovetail from './dovetail.json';
2
+ export default {
3
+ dovetail,
4
+ };
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { initParrotI18n } from '@cloudtower/eagle';
3
+ import React from 'react';
4
+ // eslint-disable-next-line react/no-deprecated
5
+ import { render } from 'react-dom';
6
+ import App from './App';
7
+ import './i18n';
8
+ import 'antd/dist/antd.css';
9
+ import '@cloudtower/eagle/dist/style.css';
10
+ initParrotI18n();
11
+ const container = document.getElementById('root');
12
+ render(_jsx(React.StrictMode, { children: _jsx(React.Suspense, { fallback: "loading", children: _jsx(App, {}) }) }), container);
@@ -0,0 +1,32 @@
1
+ import { set, cloneDeep } from 'lodash';
2
+ import { WorkloadState } from '../constants';
3
+ import { WorkloadBaseModel } from './workload-base-model';
4
+ export class CronJobModel extends WorkloadBaseModel {
5
+ _rawYaml;
6
+ _globalStore;
7
+ constructor(_rawYaml, _globalStore) {
8
+ super(_rawYaml, _globalStore);
9
+ this._rawYaml = _rawYaml;
10
+ this._globalStore = _globalStore;
11
+ }
12
+ get stateDisplay() {
13
+ if (!this.spec?.suspend) {
14
+ return WorkloadState.SUSPENDED;
15
+ }
16
+ return WorkloadState.RUNNING;
17
+ }
18
+ suspend() {
19
+ const newOne = cloneDeep(this._rawYaml);
20
+ if (this._rawYaml.kind === 'CronJob') {
21
+ set(newOne, 'spec.suspend', true);
22
+ }
23
+ return newOne;
24
+ }
25
+ resume() {
26
+ const newOne = cloneDeep(this._rawYaml);
27
+ if (this._rawYaml.kind === 'CronJob') {
28
+ set(newOne, 'spec.suspend', false);
29
+ }
30
+ return newOne;
31
+ }
32
+ }
@@ -0,0 +1,17 @@
1
+ import { WorkloadState } from '../constants';
2
+ import { WorkloadModel } from './workload-model';
3
+ export class DaemonSetModel extends WorkloadModel {
4
+ _rawYaml;
5
+ _globalStore;
6
+ constructor(_rawYaml, _globalStore) {
7
+ super(_rawYaml, _globalStore);
8
+ this._rawYaml = _rawYaml;
9
+ this._globalStore = _globalStore;
10
+ }
11
+ get stateDisplay() {
12
+ if (this.status?.desiredNumberScheduled !== this.status?.numberReady) {
13
+ return WorkloadState.UPDATEING;
14
+ }
15
+ return WorkloadState.READY;
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ import { WorkloadState } from '../constants';
2
+ import { WorkloadModel } from './workload-model';
3
+ export class DeploymentModel extends WorkloadModel {
4
+ _rawYaml;
5
+ _globalStore;
6
+ constructor(_rawYaml, _globalStore) {
7
+ super(_rawYaml, _globalStore);
8
+ this._rawYaml = _rawYaml;
9
+ this._globalStore = _globalStore;
10
+ }
11
+ get stateDisplay() {
12
+ if (this.spec?.replicas !== this.status?.readyReplicas) {
13
+ return WorkloadState.UPDATEING;
14
+ }
15
+ return WorkloadState.READY;
16
+ }
17
+ }
@@ -0,0 +1,11 @@
1
+ import { ResourceModel } from './resource-model';
2
+ export class EventModel extends ResourceModel {
3
+ _rawYaml;
4
+ _globalStore;
5
+ constructor(_rawYaml, _globalStore) {
6
+ super(_rawYaml, _globalStore);
7
+ this._rawYaml = _rawYaml;
8
+ this._globalStore = _globalStore;
9
+ this.id = _rawYaml.metadata.uid || _rawYaml.id;
10
+ }
11
+ }
@@ -13,3 +13,7 @@ export * from './deployment-model';
13
13
  export * from './daemonset-model';
14
14
  export * from './statefulset-model';
15
15
  export * from './service-model';
16
+ export * from './node-model';
17
+ export * from './storage-class';
18
+ export * from './persistent-volume';
19
+ export * from './persistent-volume-claim';
@@ -0,0 +1,14 @@
1
+ export * from './ingress-model';
2
+ export * from './network-policy-model';
3
+ export * from './job-model';
4
+ export * from './workload-model';
5
+ export * from './workload-base-model';
6
+ export * from './pod-model';
7
+ export * from './pod-metrics-model';
8
+ export * from './resource-model';
9
+ export * from './workload-model';
10
+ export * from './cronjob-model';
11
+ export * from './event-model';
12
+ export * from './deployment-model';
13
+ export * from './daemonset-model';
14
+ export * from './statefulset-model';
@@ -0,0 +1,24 @@
1
+ import { ResourceModel } from './resource-model';
2
+ export class IngressModel extends ResourceModel {
3
+ _rawYaml;
4
+ _globalStore;
5
+ flattenedRules;
6
+ constructor(_rawYaml, _globalStore) {
7
+ super(_rawYaml, _globalStore);
8
+ this._rawYaml = _rawYaml;
9
+ this._globalStore = _globalStore;
10
+ this.flattenedRules =
11
+ this._rawYaml.spec.rules?.reduce((res, rule) => {
12
+ const paths = rule.http?.paths.map(p => {
13
+ return {
14
+ serviceName: p.backend.service?.name || '',
15
+ fullPath: rule.host ? `${rule.host}${p.path}` : p.path || '',
16
+ pathType: p.pathType,
17
+ servicePort: p.backend.service?.port?.number,
18
+ host: rule.host,
19
+ };
20
+ });
21
+ return [...res, ...(paths || [])];
22
+ }, []) || [];
23
+ }
24
+ }
@@ -0,0 +1,56 @@
1
+ import { sumBy } from 'lodash';
2
+ import { WorkloadState } from '../constants';
3
+ import { matchSelector } from '../utils/match-selector';
4
+ import { getSecondsDiff } from '../utils/time';
5
+ import { WorkloadBaseModel } from './workload-base-model';
6
+ export class JobModel extends WorkloadBaseModel {
7
+ _rawYaml;
8
+ _globalStore;
9
+ restarts = 0;
10
+ constructor(_rawYaml, _globalStore) {
11
+ super(_rawYaml, _globalStore);
12
+ this._rawYaml = _rawYaml;
13
+ this._globalStore = _globalStore;
14
+ }
15
+ async init() {
16
+ await this.getRestarts();
17
+ }
18
+ async getRestarts() {
19
+ const pods = (await this._globalStore.get('pods', {
20
+ resourceBasePath: '/api/v1',
21
+ kind: 'Pod',
22
+ }));
23
+ const myPods = pods.items.filter(p => this.spec?.selector ? matchSelector(p, this.spec?.selector) : false);
24
+ const result = sumBy(myPods, 'restartCount');
25
+ this.restarts = result;
26
+ }
27
+ get duration() {
28
+ const completionTime = this._rawYaml.status?.completionTime;
29
+ const startTime = this._rawYaml.status?.startTime;
30
+ if (!completionTime && startTime) {
31
+ return getSecondsDiff(startTime, Date.now().toString());
32
+ }
33
+ if (completionTime && startTime) {
34
+ return getSecondsDiff(startTime, completionTime);
35
+ }
36
+ return 0;
37
+ }
38
+ get completionsDisplay() {
39
+ return `${this._rawYaml.status?.succeeded || 0}/${this._rawYaml.spec?.completions}`;
40
+ }
41
+ get stateDisplay() {
42
+ if (!this.spec?.completions && !this.status?.succeeded) {
43
+ return WorkloadState.RUNNING;
44
+ }
45
+ if (this.spec?.completions === this.status?.succeeded) {
46
+ return WorkloadState.COMPLETED;
47
+ }
48
+ if (this.status?.conditions?.some(c => c.type === 'Failed' && c.status === 'True')) {
49
+ return WorkloadState.FAILED;
50
+ }
51
+ if (this.status?.conditions?.some(c => c.type === 'Suspended' && c.status === 'True')) {
52
+ return WorkloadState.SUSPENDED;
53
+ }
54
+ return WorkloadState.RUNNING;
55
+ }
56
+ }
@@ -0,0 +1,10 @@
1
+ import { ResourceModel } from './resource-model';
2
+ export class NetworkPolicyModel extends ResourceModel {
3
+ _rawYaml;
4
+ _globalStore;
5
+ constructor(_rawYaml, _globalStore) {
6
+ super(_rawYaml, _globalStore);
7
+ this._rawYaml = _rawYaml;
8
+ this._globalStore = _globalStore;
9
+ }
10
+ }
@@ -11,5 +11,8 @@ export declare class NodeModel extends WorkloadBaseModel {
11
11
  _globalStore: GlobalStore;
12
12
  constructor(_rawYaml: RequiredNode, _globalStore: GlobalStore);
13
13
  get role(): NodeRole;
14
+ get ip(): string | undefined;
15
+ get nodeGroupName(): string | undefined;
16
+ get isControlPlane(): boolean;
14
17
  }
15
18
  export {};
@@ -0,0 +1,34 @@
1
+ import { formatSi, parseSi } from '../utils/unit';
2
+ import { ResourceModel } from './resource-model';
3
+ export class PodMetricsModel extends ResourceModel {
4
+ _rawYaml;
5
+ _globalStore;
6
+ usage;
7
+ constructor(_rawYaml, _globalStore) {
8
+ super(_rawYaml, _globalStore);
9
+ this._rawYaml = _rawYaml;
10
+ this._globalStore = _globalStore;
11
+ let cpuUsageNum = 0;
12
+ let memoryUsageNum = 0;
13
+ for (const container of _rawYaml.containers) {
14
+ cpuUsageNum += parseSi(container.usage.cpu || '0');
15
+ memoryUsageNum += parseSi(container.usage.memory || '0');
16
+ }
17
+ this.usage = {
18
+ cpu: {
19
+ value: cpuUsageNum,
20
+ si: formatSi(1000 * cpuUsageNum, {
21
+ suffix: 'm',
22
+ maxPrecision: 0,
23
+ }),
24
+ },
25
+ memory: {
26
+ value: memoryUsageNum,
27
+ si: formatSi(memoryUsageNum, {
28
+ suffix: 'i',
29
+ maxPrecision: 0,
30
+ }),
31
+ },
32
+ };
33
+ }
34
+ }
@@ -0,0 +1,78 @@
1
+ import { WorkloadState } from '../constants';
2
+ import { shortenedImage } from '../utils/string';
3
+ import { formatSi, parseSi } from '../utils/unit';
4
+ import { WorkloadBaseModel } from './workload-base-model';
5
+ export class PodModel extends WorkloadBaseModel {
6
+ _rawYaml;
7
+ _globalStore;
8
+ request;
9
+ limit;
10
+ constructor(_rawYaml, _globalStore) {
11
+ super(_rawYaml, _globalStore);
12
+ this._rawYaml = _rawYaml;
13
+ this._globalStore = _globalStore;
14
+ let cpuRequestNum = 0;
15
+ let memoryRequestNum = 0;
16
+ let cpuLimitNum = 0;
17
+ let memoryLimitNum = 0;
18
+ for (const container of _rawYaml.spec?.containers || []) {
19
+ cpuRequestNum += parseSi(container.resources?.requests?.cpu || '0');
20
+ memoryRequestNum += parseSi(container.resources?.requests?.memory || '0');
21
+ cpuLimitNum += parseSi(container.resources?.limits?.cpu || '0');
22
+ memoryLimitNum += parseSi(container.resources?.limits?.memory || '0');
23
+ }
24
+ this.request = {
25
+ cpu: {
26
+ value: cpuRequestNum,
27
+ si: formatSi(cpuRequestNum, {
28
+ suffix: 'm',
29
+ }),
30
+ },
31
+ memory: {
32
+ value: memoryRequestNum,
33
+ si: formatSi(memoryRequestNum, {
34
+ suffix: 'i',
35
+ }),
36
+ },
37
+ };
38
+ this.limit = {
39
+ cpu: {
40
+ value: cpuLimitNum,
41
+ si: formatSi(cpuLimitNum, {
42
+ suffix: 'm',
43
+ }),
44
+ },
45
+ memory: {
46
+ value: memoryLimitNum,
47
+ si: formatSi(memoryLimitNum, {
48
+ suffix: 'i',
49
+ }),
50
+ },
51
+ };
52
+ }
53
+ get imageNames() {
54
+ return (this._rawYaml.spec?.containers.map(container => shortenedImage(container.image || '')) || []);
55
+ }
56
+ get restartCount() {
57
+ if (this._rawYaml.status?.containerStatuses) {
58
+ return this._rawYaml.status?.containerStatuses[0].restartCount || 0;
59
+ }
60
+ return 0;
61
+ }
62
+ get readyDisplay() {
63
+ return `${this._rawYaml.status?.containerStatuses?.filter(c => c.ready).length}/${this
64
+ ._rawYaml.spec?.containers.length}`;
65
+ }
66
+ get readyContainerCount() {
67
+ return this._rawYaml.status?.containerStatuses?.filter(c => c.ready).length;
68
+ }
69
+ get containerCount() {
70
+ return this._rawYaml.spec?.containers.length;
71
+ }
72
+ get stateDisplay() {
73
+ if (this.metadata.deletionTimestamp) {
74
+ return WorkloadState.TERMINATING;
75
+ }
76
+ return this.status?.phase?.toLowerCase() || WorkloadState.UNKNOWN;
77
+ }
78
+ }
@@ -0,0 +1,34 @@
1
+ export class ResourceModel {
2
+ _rawYaml;
3
+ _globalStore;
4
+ id;
5
+ apiVersion;
6
+ kind;
7
+ metadata;
8
+ constructor(_rawYaml, _globalStore) {
9
+ this._rawYaml = _rawYaml;
10
+ this._globalStore = _globalStore;
11
+ Object.keys(_rawYaml).forEach(key => {
12
+ Object.defineProperty(this, key, {
13
+ value: _rawYaml[key],
14
+ });
15
+ });
16
+ }
17
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
18
+ async init() { }
19
+ get name() {
20
+ return this._rawYaml.metadata?.name;
21
+ }
22
+ get namespace() {
23
+ return this._rawYaml.metadata?.namespace;
24
+ }
25
+ get labels() {
26
+ return this._rawYaml.metadata?.labels;
27
+ }
28
+ get annotations() {
29
+ return this._rawYaml.metadata?.annotations;
30
+ }
31
+ restore() {
32
+ return this._rawYaml;
33
+ }
34
+ }
@@ -0,0 +1,10 @@
1
+ import { GlobalStore, Unstructured } from 'k8s-api-provider';
2
+ import { ResourceModel } from './resource-model';
3
+ type ServerInstanceTypes = Required<Unstructured>;
4
+ export declare class ServerInstanceModel extends ResourceModel<ServerInstanceTypes> {
5
+ _rawYaml: ServerInstanceTypes;
6
+ _globalStore: GlobalStore;
7
+ sshMethod: 'password' | 'privateKey';
8
+ constructor(_rawYaml: ServerInstanceTypes, _globalStore: GlobalStore);
9
+ }
10
+ export {};
@@ -0,0 +1,17 @@
1
+ import { ResourceModel } from './resource-model';
2
+ export class ServiceModel extends ResourceModel {
3
+ _rawYaml;
4
+ _globalStore;
5
+ constructor(_rawYaml, _globalStore) {
6
+ super(_rawYaml, _globalStore);
7
+ this._rawYaml = _rawYaml;
8
+ this._globalStore = _globalStore;
9
+ }
10
+ inClusterAccess() {
11
+ if (this._rawYaml.spec.type &&
12
+ ['ClusterIP', 'NodePort', 'LoadBalancer'].includes(this._rawYaml.spec.type)) {
13
+ return this._rawYaml.spec.clusterIP;
14
+ }
15
+ return this._rawYaml.spec.externalName;
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ import { WorkloadState } from '../constants';
2
+ import { WorkloadModel } from './workload-model';
3
+ export class StatefulSetModel extends WorkloadModel {
4
+ _rawYaml;
5
+ _globalStore;
6
+ constructor(_rawYaml, _globalStore) {
7
+ super(_rawYaml, _globalStore);
8
+ this._rawYaml = _rawYaml;
9
+ this._globalStore = _globalStore;
10
+ }
11
+ get stateDisplay() {
12
+ if (this.spec?.replicas !== this.status?.readyReplicas) {
13
+ return WorkloadState.UPDATEING;
14
+ }
15
+ return WorkloadState.READY;
16
+ }
17
+ }
@@ -1,10 +1,13 @@
1
1
  import { GlobalStore, Unstructured } from 'k8s-api-provider';
2
2
  import type { StorageClass } from 'kubernetes-types/storage/v1';
3
+ import { PersistentVolumeModel } from './persistent-volume';
3
4
  import { ResourceModel } from './resource-model';
4
5
  type RequiredStorageClass = Required<StorageClass> & Unstructured;
5
6
  export declare class StorageClassModel extends ResourceModel {
6
7
  _rawYaml: RequiredStorageClass;
7
8
  _globalStore: GlobalStore;
9
+ pvs: PersistentVolumeModel[];
8
10
  constructor(_rawYaml: RequiredStorageClass, _globalStore: GlobalStore);
11
+ init(): Promise<void>;
9
12
  }
10
13
  export {};
@@ -0,0 +1 @@
1
+ export * from './metric';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { GlobalStore, Unstructured } from 'k8s-api-provider';
2
2
  import type { DaemonSet, Deployment, StatefulSet } from 'kubernetes-types/apps/v1';
3
3
  import type { CronJob, Job } from 'kubernetes-types/batch/v1';
4
- import { Pod } from 'kubernetes-types/core/v1';
4
+ import { Pod, Node } from 'kubernetes-types/core/v1';
5
5
  import { ResourceModel } from './resource-model';
6
- type WorkloadBaseTypes = Required<Deployment | StatefulSet | Job | DaemonSet | CronJob | Pod> & Unstructured;
6
+ type WorkloadBaseTypes = Required<Deployment | StatefulSet | Job | DaemonSet | CronJob | Pod | Node> & Unstructured;
7
7
  export declare class WorkloadBaseModel extends ResourceModel<WorkloadBaseTypes> {
8
8
  _rawYaml: WorkloadBaseTypes;
9
9
  _globalStore: GlobalStore;
@@ -0,0 +1,22 @@
1
+ import { shortenedImage } from '../utils/string';
2
+ import { ResourceModel } from './resource-model';
3
+ export class WorkloadBaseModel extends ResourceModel {
4
+ _rawYaml;
5
+ _globalStore;
6
+ constructor(_rawYaml, _globalStore) {
7
+ super(_rawYaml, _globalStore);
8
+ this._rawYaml = _rawYaml;
9
+ this._globalStore = _globalStore;
10
+ }
11
+ get imageNames() {
12
+ const containers =
13
+ // cronjob
14
+ this._rawYaml.spec && 'jobTemplate' in this._rawYaml.spec
15
+ ? this._rawYaml.spec.jobTemplate.spec?.template.spec?.containers
16
+ : // other wokload
17
+ this._rawYaml.spec && 'template' in this._rawYaml.spec
18
+ ? this._rawYaml.spec?.template.spec?.containers
19
+ : [];
20
+ return containers?.map(container => shortenedImage(container.image || '')) || [];
21
+ }
22
+ }
@@ -0,0 +1,51 @@
1
+ import { cloneDeep, get, set, sumBy } from 'lodash';
2
+ import { TIMESTAMP_LABEL } from '../constants';
3
+ import { matchSelector } from '../utils/match-selector';
4
+ import { WorkloadBaseModel } from './workload-base-model';
5
+ export class WorkloadModel extends WorkloadBaseModel {
6
+ _rawYaml;
7
+ _globalStore;
8
+ restarts = 0;
9
+ constructor(_rawYaml, _globalStore) {
10
+ super(_rawYaml, _globalStore);
11
+ this._rawYaml = _rawYaml;
12
+ this._globalStore = _globalStore;
13
+ }
14
+ async init() {
15
+ await this.getRestarts();
16
+ }
17
+ async getRestarts() {
18
+ const pods = (await this._globalStore.get('pods', {
19
+ resourceBasePath: '/api/v1',
20
+ kind: 'Pod',
21
+ }));
22
+ const myPods = pods.items.filter(p => this.spec?.selector ? matchSelector(p, this.spec?.selector) : false);
23
+ const result = sumBy(myPods, 'restartCount');
24
+ this.restarts = result;
25
+ }
26
+ get replicas() {
27
+ return this.spec && 'replicas' in this.spec ? this.spec.replicas : 0;
28
+ }
29
+ get readyReplicas() {
30
+ return this.status && 'readyReplicas' in this.status ? this.status.readyReplicas : 0;
31
+ }
32
+ redeploy() {
33
+ const rawYaml = this._globalStore.restoreItem(this);
34
+ const newOne = cloneDeep(rawYaml);
35
+ const path = 'spec.template.metadata.annotations';
36
+ const annotations = get(newOne, path, {});
37
+ set(newOne, path, {
38
+ ...annotations,
39
+ [TIMESTAMP_LABEL]: new Date().toISOString().replace(/\.\d+Z$/, 'Z'),
40
+ });
41
+ return newOne;
42
+ }
43
+ scale(value) {
44
+ const rawYaml = this._globalStore.restoreItem(this);
45
+ const newOne = cloneDeep(rawYaml);
46
+ if (newOne.kind === 'Deployment' || newOne.kind === 'StatefulSet') {
47
+ set(newOne, 'spec.replicas', value);
48
+ }
49
+ return newOne;
50
+ }
51
+ }
@@ -0,0 +1,15 @@
1
+ import { DataField } from '../../components/ShowContent';
2
+ import { AgeColumnRenderer } from '../../hooks/useEagleTable/columns';
3
+ import { RESOURCE_GROUP } from '../../types';
4
+ export const ConfigMapConfig = (i18n) => ({
5
+ name: 'configmaps',
6
+ kind: 'ConfigMap',
7
+ basePath: '/api/v1',
8
+ apiVersion: 'v1',
9
+ parent: RESOURCE_GROUP.STORAGE,
10
+ label: 'ConfigMaps',
11
+ columns: () => [AgeColumnRenderer(i18n)],
12
+ showConfig: () => ({
13
+ tabs: [DataField(i18n)],
14
+ }),
15
+ });
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import YamlForm from 'src/components/YamlForm';
3
+ import { CRONJOB_INIT_VALUE } from 'src/constants/k8s';
4
+ export const CronJobForm = () => {
5
+ return _jsx(YamlForm, { initialValues: CRONJOB_INIT_VALUE });
6
+ };