@dovetail-v2/refine 0.0.49-alpha.0 → 0.0.50

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 (206) hide show
  1. package/dist/{MonacoYamlDiffEditor-7cb1e598.js → MonacoYamlDiffEditor-2ec906d2.js} +1 -1
  2. package/dist/{index-8f27c902.js → index-e72498e4.js} +331 -326
  3. package/dist/refine.js +1 -1
  4. package/dist/refine.umd.cjs +336 -331
  5. package/lib/src/App.js +91 -0
  6. package/lib/src/Dovetail.js +45 -0
  7. package/lib/src/components/Breadcrumb/index.js +20 -0
  8. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  9. package/lib/src/components/ConditionsTable/index.js +1 -0
  10. package/lib/src/components/CreateButton/index.js +10 -0
  11. package/lib/src/components/CronJobDropdown/index.js +26 -0
  12. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  13. package/lib/src/components/DeleteButton/index.js +13 -0
  14. package/lib/src/components/DeleteManyButton/index.js +16 -0
  15. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  16. package/lib/src/components/DrawerShow/index.js +1 -0
  17. package/lib/src/components/EditButton/index.js +13 -0
  18. package/lib/src/components/EditField/index.js +47 -0
  19. package/lib/src/components/ErrorContent/index.js +36 -0
  20. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  21. package/lib/src/components/EventsTable/index.js +1 -0
  22. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  23. package/lib/src/components/Form/MetadataForm.js +9 -0
  24. package/lib/src/components/Form/NameInputWidget.js +50 -0
  25. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  26. package/lib/src/components/Form/index.js +4 -0
  27. package/lib/src/components/Form/widget.js +1 -0
  28. package/lib/src/components/FormErrorAlert/index.js +8 -0
  29. package/lib/src/components/FormLayout/index.js +21 -0
  30. package/lib/src/components/FormModal/index.js +51 -0
  31. package/lib/src/components/ImageNames/index.js +14 -0
  32. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  33. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  34. package/lib/src/components/IngressRulesTable/index.js +1 -0
  35. package/lib/src/components/K8sDropdown/index.js +31 -0
  36. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  37. package/lib/src/components/KeyValue/index.js +1 -0
  38. package/lib/src/components/KeyValueData/index.js +50 -0
  39. package/lib/src/components/Layout/index.js +39 -0
  40. package/lib/src/components/ListPage/index.js +25 -0
  41. package/lib/src/components/Menu/index.js +36 -0
  42. package/lib/src/components/NamespacesFilter/index.js +34 -0
  43. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +1 -2
  44. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  45. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  46. package/lib/src/components/PageShow/PageShow.js +11 -0
  47. package/lib/src/components/PageShow/index.js +1 -0
  48. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  49. package/lib/src/components/PodContainersTable/index.js +1 -0
  50. package/lib/src/components/PodLog/index.js +136 -0
  51. package/lib/src/components/ReferenceLink/index.js +17 -0
  52. package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
  53. package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
  54. package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
  55. package/lib/src/components/RefineForm/index.d.ts +3 -0
  56. package/lib/src/components/RefineForm/type.d.ts +20 -0
  57. package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
  58. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  59. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  60. package/lib/src/components/ResourceCRUD/index.js +4 -0
  61. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  62. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  63. package/lib/src/components/ResourceLink/index.js +21 -0
  64. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  65. package/lib/src/components/Separator/index.js +11 -0
  66. package/lib/src/components/ShowContent/ShowContent.d.ts +1 -1
  67. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  68. package/lib/src/components/ShowContent/fields.js +157 -0
  69. package/lib/src/components/ShowContent/index.js +2 -0
  70. package/lib/src/components/StateTag/StateTag.js +22 -0
  71. package/lib/src/components/StateTag/index.js +1 -0
  72. package/lib/src/components/Table/ErrorContent.js +36 -0
  73. package/lib/src/components/Table/TableToolBar.js +14 -0
  74. package/lib/src/components/Table/TableWidgets.js +28 -0
  75. package/lib/src/components/Table/index.js +69 -0
  76. package/lib/src/components/Tags/index.js +22 -0
  77. package/lib/src/components/Time/index.js +14 -0
  78. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  79. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  80. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  81. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  82. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  83. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  84. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  85. package/lib/src/components/YamlEditor/index.js +1 -0
  86. package/lib/src/components/YamlEditor/style.js +102 -0
  87. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  88. package/lib/src/components/YamlForm/index.d.ts +0 -4
  89. package/lib/src/components/YamlForm/index.js +61 -0
  90. package/lib/src/components/index.js +38 -0
  91. package/lib/src/constants/index.js +2 -0
  92. package/lib/src/constants/k8s.js +203 -0
  93. package/lib/src/constants/state.d.ts +2 -1
  94. package/lib/src/constants/state.js +15 -0
  95. package/lib/src/contexts/component.js +3 -0
  96. package/lib/src/contexts/configs.js +3 -0
  97. package/lib/src/contexts/global-store.js +3 -0
  98. package/lib/src/contexts/index.js +3 -0
  99. package/lib/src/hooks/index.js +7 -0
  100. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  101. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  102. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  103. package/lib/src/hooks/useDownloadYAML.js +10 -0
  104. package/lib/src/hooks/useEagleForm.d.ts +1 -2
  105. package/lib/src/hooks/useEagleForm.js +177 -0
  106. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  107. package/lib/src/hooks/useEagleTable/index.js +2 -0
  108. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  109. package/lib/src/hooks/useEdit.js +19 -0
  110. package/lib/src/hooks/useGlobalStore.js +5 -0
  111. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  112. package/lib/src/hooks/useOpenForm.js +43 -0
  113. package/lib/src/hooks/useSchema.js +37 -0
  114. package/lib/src/hooks/useSubmitForm.js +42 -0
  115. package/lib/src/i18n.d.ts +2 -0
  116. package/lib/src/i18n.js +19 -0
  117. package/lib/src/index.js +13 -0
  118. package/lib/src/locales/en-US/dovetail.json +18 -0
  119. package/lib/src/locales/en-US/index.d.ts +1 -0
  120. package/lib/src/locales/en-US/index.js +4 -0
  121. package/lib/src/locales/index.js +6 -0
  122. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  123. package/lib/src/locales/zh-CN/index.d.ts +1 -0
  124. package/lib/src/locales/zh-CN/index.js +4 -0
  125. package/lib/src/main.js +12 -0
  126. package/lib/src/models/cronjob-model.js +32 -0
  127. package/lib/src/models/daemonset-model.js +17 -0
  128. package/lib/src/models/deployment-model.d.ts +1 -1
  129. package/lib/src/models/deployment-model.js +17 -0
  130. package/lib/src/models/event-model.js +11 -0
  131. package/lib/src/models/index.js +14 -0
  132. package/lib/src/models/ingress-model.js +24 -0
  133. package/lib/src/models/job-model.js +56 -0
  134. package/lib/src/models/network-policy-model.js +10 -0
  135. package/lib/src/models/pod-metrics-model.js +34 -0
  136. package/lib/src/models/pod-model.js +78 -0
  137. package/lib/src/models/resource-model.js +34 -0
  138. package/lib/src/models/server-instance-model.d.ts +10 -0
  139. package/lib/src/models/service-model.js +17 -0
  140. package/lib/src/models/statefulset-model.d.ts +1 -1
  141. package/lib/src/models/statefulset-model.js +17 -0
  142. package/lib/src/models/types/index.js +1 -0
  143. package/lib/src/models/types/metric.js +1 -0
  144. package/lib/src/models/workload-base-model.js +22 -0
  145. package/lib/src/models/workload-model.js +51 -0
  146. package/lib/src/pages/configmaps/index.js +15 -0
  147. package/lib/src/pages/cronjobs/create/index.js +6 -0
  148. package/lib/src/pages/cronjobs/index.js +3 -0
  149. package/lib/src/pages/cronjobs/list/index.js +42 -0
  150. package/lib/src/pages/cronjobs/show/index.js +16 -0
  151. package/lib/src/pages/daemonsets/create/index.js +6 -0
  152. package/lib/src/pages/daemonsets/index.js +3 -0
  153. package/lib/src/pages/daemonsets/list/index.js +32 -0
  154. package/lib/src/pages/daemonsets/show/index.js +16 -0
  155. package/lib/src/pages/deployments/create/index.js +7 -0
  156. package/lib/src/pages/deployments/index.js +3 -0
  157. package/lib/src/pages/deployments/list/index.js +26 -0
  158. package/lib/src/pages/deployments/show/index.js +16 -0
  159. package/lib/src/pages/ingresses/index.js +26 -0
  160. package/lib/src/pages/jobs/index.js +34 -0
  161. package/lib/src/pages/networkPolicies/index.js +67 -0
  162. package/lib/src/pages/pods/create/index.js +6 -0
  163. package/lib/src/pages/pods/index.js +3 -0
  164. package/lib/src/pages/pods/list/index.js +81 -0
  165. package/lib/src/pages/pods/show/index.js +54 -0
  166. package/lib/src/pages/secrets/index.js +15 -0
  167. package/lib/src/pages/services/index.js +26 -0
  168. package/lib/src/pages/statefulsets/create/index.js +6 -0
  169. package/lib/src/pages/statefulsets/index.js +3 -0
  170. package/lib/src/pages/statefulsets/list/index.js +26 -0
  171. package/lib/src/pages/statefulsets/show/index.js +16 -0
  172. package/lib/src/plugins/index.js +3 -0
  173. package/lib/src/plugins/model-plugin.js +46 -0
  174. package/lib/src/plugins/relation-plugin.js +81 -0
  175. package/lib/src/plugins/type.js +1 -0
  176. package/lib/src/providers/index.js +1 -0
  177. package/lib/src/providers/router-provider/index.js +100 -0
  178. package/lib/src/types/index.js +1 -0
  179. package/lib/src/types/resource.js +12 -0
  180. package/lib/src/utils/addId.js +8 -0
  181. package/lib/src/utils/download.js +9 -0
  182. package/lib/src/utils/error.js +53 -0
  183. package/lib/src/utils/form.js +9 -0
  184. package/lib/src/utils/k8s.js +6 -0
  185. package/lib/src/utils/labels.js +15 -0
  186. package/lib/src/utils/match-selector.js +12 -0
  187. package/lib/src/utils/openapi.js +33 -0
  188. package/lib/src/utils/schema.js +117 -0
  189. package/lib/src/utils/selector.js +12 -0
  190. package/lib/src/utils/string.js +6 -0
  191. package/lib/src/utils/time.js +46 -0
  192. package/lib/src/utils/unit.js +69 -0
  193. package/lib/src/utils/yaml.js +44 -0
  194. package/lib/vite.config.js +60 -0
  195. package/package.json +6 -6
  196. package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
  197. package/lib/src/hooks/useModal.d.ts +0 -0
  198. package/lib/src/hooks/useNamespaceFilter.d.ts +0 -5
  199. package/lib/src/model/cronjob-model.d.ts +0 -9
  200. package/lib/src/model/index.d.ts +0 -6
  201. package/lib/src/model/job-model.d.ts +0 -10
  202. package/lib/src/model/pod-metrics-model.d.ts +0 -7
  203. package/lib/src/model/pod-model.d.ts +0 -15
  204. package/lib/src/model/resource-model.d.ts +0 -17
  205. package/lib/src/model/workload-model.d.ts +0 -17
  206. package/lib/src/types/metric.d.ts +0 -25
@@ -0,0 +1,37 @@
1
+ import { useCallback } from 'react';
2
+ function useK8sYamlEditor() {
3
+ const foldSymbol = useCallback(function (editor, symbol) {
4
+ const model = editor.getModel();
5
+ const matchs = model?.findMatches(symbol, false, false, false, '', false).filter(match => match.range.startColumn === 1) || [];
6
+ return new Promise(async (resolve, reject) => {
7
+ try {
8
+ for (const match of matchs) {
9
+ const lineNumber = match.range.startLineNumber;
10
+ editor.setPosition({ lineNumber, column: 1 });
11
+ await editor.getAction('editor.fold').run();
12
+ }
13
+ resolve(null);
14
+ }
15
+ catch (e) {
16
+ reject(e);
17
+ }
18
+ });
19
+ }, []);
20
+ const fold = useCallback(async function (editor) {
21
+ await editor.getAction('editor.unfoldAll').run();
22
+ const symbols = [
23
+ ' annotations:',
24
+ ' managedFields:',
25
+ 'status:',
26
+ ' kubectl.kubernetes.io/last-applied-configuration:'
27
+ ];
28
+ for (const symbol of symbols) {
29
+ await foldSymbol(editor, symbol);
30
+ }
31
+ editor.setScrollPosition({ scrollTop: 0 });
32
+ }, [foldSymbol]);
33
+ return {
34
+ fold,
35
+ };
36
+ }
37
+ export default useK8sYamlEditor;
@@ -0,0 +1,43 @@
1
+ import { pushModal } from '@cloudtower/eagle';
2
+ import { useResource, useGo, useNavigation, } from '@refinedev/core';
3
+ import { useContext } from 'react';
4
+ import FormModal from 'src/components/FormModal';
5
+ import ConfigsContext from 'src/contexts/configs';
6
+ import { useEdit } from 'src/hooks/useEdit';
7
+ import { FormType } from 'src/types';
8
+ import { getInitialValues } from 'src/utils/form';
9
+ export function useOpenForm(options) {
10
+ const { resource } = useResource();
11
+ const configs = useContext(ConfigsContext);
12
+ const { edit } = useEdit();
13
+ const navigation = useNavigation();
14
+ const go = useGo();
15
+ return function openForm() {
16
+ if (resource?.name) {
17
+ const config = configs[resource.name];
18
+ if (config.formType === undefined || config.formType === FormType.MODAL) {
19
+ pushModal({
20
+ component: config.FormModal || FormModal,
21
+ props: {
22
+ resource: resource.name,
23
+ id: options?.id,
24
+ formProps: {
25
+ initialValues: getInitialValues(config),
26
+ }
27
+ }
28
+ });
29
+ }
30
+ else if (options?.id) {
31
+ edit(options.id);
32
+ }
33
+ else {
34
+ go({
35
+ to: navigation.createUrl(resource.name),
36
+ options: {
37
+ keepQuery: true,
38
+ },
39
+ });
40
+ }
41
+ }
42
+ };
43
+ }
@@ -0,0 +1,37 @@
1
+ import { useResource } from '@refinedev/core';
2
+ import { useState, useEffect, useMemo, useCallback } from 'react';
3
+ import OpenAPI from 'src/utils/openapi';
4
+ export function useSchema(options) {
5
+ const [schema, setSchema] = useState(null);
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState(null);
8
+ const useResourceResult = useResource();
9
+ const resource = options?.resource || useResourceResult.resource;
10
+ const openapi = useMemo(() => new OpenAPI(resource?.meta?.resourceBasePath), [resource?.meta?.resourceBasePath]);
11
+ const fetchSchema = useCallback(async () => {
12
+ setLoading(true);
13
+ setError(null);
14
+ try {
15
+ const schema = await openapi.findSchema(resource?.meta?.kind);
16
+ setSchema(schema || null);
17
+ setError(null);
18
+ }
19
+ catch (e) {
20
+ setError(e);
21
+ }
22
+ finally {
23
+ setLoading(false);
24
+ }
25
+ }, [resource, openapi]);
26
+ useEffect(() => {
27
+ if (options?.skip)
28
+ return;
29
+ fetchSchema();
30
+ }, [fetchSchema]);
31
+ return {
32
+ schema,
33
+ loading,
34
+ error,
35
+ fetchSchema,
36
+ };
37
+ }
@@ -0,0 +1,42 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { getCommonErrors } from 'src/utils/error';
3
+ import { useD2Translation } from '../i18n';
4
+ export function useSubmitForm(options) {
5
+ const { formRef, onSubmitSuccess } = options;
6
+ const { i18n } = useD2Translation();
7
+ const [submitting, setSubmitting] = useState(false);
8
+ const [errorMsgs, setErrorMsgs] = useState([]);
9
+ const reset = useCallback(() => {
10
+ setSubmitting(false);
11
+ setErrorMsgs([]);
12
+ }, []);
13
+ const onSubmit = useCallback(async () => {
14
+ try {
15
+ setSubmitting(true);
16
+ await formRef.current?.submit();
17
+ onSubmitSuccess?.();
18
+ reset();
19
+ }
20
+ catch (error) {
21
+ if (error instanceof Object) {
22
+ if ('response' in error && error.response instanceof Response) {
23
+ const response = error.response;
24
+ const body = await response.json();
25
+ setErrorMsgs(getCommonErrors(body, i18n));
26
+ }
27
+ else if ('message' in error && typeof error.message === 'string') {
28
+ setErrorMsgs([error.message]);
29
+ }
30
+ }
31
+ }
32
+ finally {
33
+ setSubmitting(false);
34
+ }
35
+ }, [formRef, i18n, reset, onSubmitSuccess]);
36
+ return {
37
+ submitting,
38
+ errorMsgs,
39
+ reset,
40
+ onSubmit,
41
+ };
42
+ }
package/lib/src/i18n.d.ts CHANGED
@@ -156,6 +156,7 @@ export declare const resources: {
156
156
  path_type: string;
157
157
  only_support_one_yaml: string;
158
158
  not_support: string;
159
+ stopped: string;
159
160
  };
160
161
  };
161
162
  'zh-CN': {
@@ -314,6 +315,7 @@ export declare const resources: {
314
315
  out_external_name_desc: string;
315
316
  only_support_one_yaml: string;
316
317
  not_support: string;
318
+ stopped: string;
317
319
  };
318
320
  };
319
321
  };
@@ -0,0 +1,19 @@
1
+ import i18n from 'i18next';
2
+ import { initReactI18next, useTranslation } from 'react-i18next';
3
+ import { D2Locales } from 'src/locales';
4
+ export const resources = D2Locales;
5
+ i18n.use(initReactI18next).init({
6
+ supportedLngs: ['en-US', 'zh-CN'],
7
+ resources,
8
+ ns: Object.keys(resources['zh-CN']),
9
+ defaultNS: 'dovetail',
10
+ fallbackLng: ['en-US', 'zh-CN'],
11
+ lng: 'zh-CN',
12
+ nsSeparator: '.',
13
+ });
14
+ export const useD2Translation = () => {
15
+ return useTranslation(undefined, {
16
+ i18n,
17
+ });
18
+ };
19
+ export default i18n;
@@ -0,0 +1,13 @@
1
+ import i18n from './i18n';
2
+ export const dovetailRefineI18n = i18n;
3
+ export { D2Locales } from './locales';
4
+ export * from './providers';
5
+ export * from './hooks';
6
+ export * from './components';
7
+ export * from './constants';
8
+ export * from './hooks';
9
+ export * from './Dovetail';
10
+ export * from './types';
11
+ export * from './contexts';
12
+ export * from './models';
13
+ export * from './plugins';
@@ -0,0 +1,18 @@
1
+ {
2
+ "copy": "Copy",
3
+ "reset_arguments": "Reset",
4
+ "view_changes": "Show Diff",
5
+ "back_to_edit": "Edit",
6
+ "configure_file": "Configuration",
7
+ "yaml_format_wrong": "Configuration is in an invalid YAML format.",
8
+ "yaml_value_wrong": "Configuration has invalid values.",
9
+ "edit_yaml": "Edit YAML",
10
+ "copied": "Copied",
11
+ "already_reset": "Already reset",
12
+ "fetch_schema_fail": "Failed to fetch schema.",
13
+ "obtain_data_error": "Having trouble getting data.",
14
+ "retry": "Retry",
15
+ "create_resource": "Create {{resource}}",
16
+ "edit_resource": "Edit {{resource}}",
17
+ "status": "Status"
18
+ }
@@ -153,6 +153,7 @@ declare const _default: {
153
153
  path_type: string;
154
154
  only_support_one_yaml: string;
155
155
  not_support: string;
156
+ stopped: string;
156
157
  };
157
158
  };
158
159
  export default _default;
@@ -0,0 +1,4 @@
1
+ import dovetail from './dovetail.json';
2
+ export default {
3
+ dovetail,
4
+ };
@@ -0,0 +1,6 @@
1
+ import D2LocalesEN from './en-US';
2
+ import D2LocalesZH from './zh-CN';
3
+ export const D2Locales = {
4
+ 'en-US': D2LocalesEN,
5
+ 'zh-CN': D2LocalesZH,
6
+ };
@@ -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
+ }
@@ -154,6 +154,7 @@ declare const _default: {
154
154
  out_external_name_desc: string;
155
155
  only_support_one_yaml: string;
156
156
  not_support: string;
157
+ stopped: string;
157
158
  };
158
159
  };
159
160
  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
+ }
@@ -9,6 +9,6 @@ export declare class DeploymentModel extends WorkloadModel {
9
9
  spec?: RequiredDeployment['spec'];
10
10
  status?: RequiredDeployment['status'];
11
11
  constructor(_rawYaml: RequiredDeployment, _globalStore: GlobalStore);
12
- get stateDisplay(): WorkloadState.UPDATING | WorkloadState.READY;
12
+ get stateDisplay(): WorkloadState.UPDATING | WorkloadState.READY | WorkloadState.STOPPED;
13
13
  }
14
14
  export {};
@@ -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
+ }
@@ -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
+ }
@@ -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
+ }