@backstage/plugin-kubernetes-react 0.3.4-next.1 → 0.3.5-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/api/KubernetesBackendClient.esm.js +137 -0
- package/dist/api/KubernetesBackendClient.esm.js.map +1 -0
- package/dist/api/KubernetesClusterLinkFormatter.esm.js +38 -0
- package/dist/api/KubernetesClusterLinkFormatter.esm.js.map +1 -0
- package/dist/api/KubernetesProxyClient.esm.js +76 -0
- package/dist/api/KubernetesProxyClient.esm.js.map +1 -0
- package/dist/api/formatters/AksClusterLinksFormatter.esm.js +35 -0
- package/dist/api/formatters/AksClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/EksClusterLinksFormatter.esm.js +10 -0
- package/dist/api/formatters/EksClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/GkeClusterLinksFormatter.esm.js +62 -0
- package/dist/api/formatters/GkeClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/OpenshiftClusterLinksFormatter.esm.js +41 -0
- package/dist/api/formatters/OpenshiftClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/RancherClusterLinksFormatter.esm.js +33 -0
- package/dist/api/formatters/RancherClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/StandardClusterLinksFormatter.esm.js +37 -0
- package/dist/api/formatters/StandardClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/index.esm.js +21 -0
- package/dist/api/formatters/index.esm.js.map +1 -0
- package/dist/api/types.esm.js +14 -0
- package/dist/api/types.esm.js.map +1 -0
- package/dist/components/Cluster/Cluster.esm.js +88 -0
- package/dist/components/Cluster/Cluster.esm.js.map +1 -0
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js +80 -0
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js.map +1 -0
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js +51 -0
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js +222 -0
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js +40 -0
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js +32 -0
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js.map +1 -0
- package/dist/components/CustomResources/CustomResources.esm.js +44 -0
- package/dist/components/CustomResources/CustomResources.esm.js.map +1 -0
- package/dist/components/CustomResources/DefaultCustomResource.esm.js +79 -0
- package/dist/components/CustomResources/DefaultCustomResource.esm.js.map +1 -0
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js +43 -0
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js +126 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js +55 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -0
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js +56 -0
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -0
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js +160 -0
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -0
- package/dist/components/ErrorPanel/ErrorPanel.esm.js +27 -0
- package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -0
- package/dist/components/ErrorReporting/ErrorReporting.esm.js +63 -0
- package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -0
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js +34 -0
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -0
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js +42 -0
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -0
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js +62 -0
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js.map +1 -0
- package/dist/components/JobsAccordions/JobsAccordions.esm.js +101 -0
- package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -0
- package/dist/components/JobsAccordions/JobsDrawer.esm.js +48 -0
- package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js +72 -0
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js +117 -0
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js +199 -0
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js +44 -0
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js +88 -0
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminalAttachAddon.esm.js +40 -0
- package/dist/components/PodExecTerminal/PodExecTerminalAttachAddon.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js +35 -0
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -0
- package/dist/components/Pods/ErrorList/ErrorList.esm.js +52 -0
- package/dist/components/Pods/ErrorList/ErrorList.esm.js.map +1 -0
- package/dist/components/Pods/Events/Events.esm.js +74 -0
- package/dist/components/Pods/Events/Events.esm.js.map +1 -0
- package/dist/components/Pods/Events/useEvents.esm.js +21 -0
- package/dist/components/Pods/Events/useEvents.esm.js.map +1 -0
- package/dist/components/Pods/FixDialog/FixDialog.esm.js +107 -0
- package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js +166 -0
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js +30 -0
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js +114 -0
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/PodLogs.esm.js +44 -0
- package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js +21 -0
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/usePodLogs.esm.js +19 -0
- package/dist/components/Pods/PodLogs/usePodLogs.esm.js.map +1 -0
- package/dist/components/Pods/PodsTable.esm.js +153 -0
- package/dist/components/Pods/PodsTable.esm.js.map +1 -0
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js +50 -0
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js.map +1 -0
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js +42 -0
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -0
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js +79 -0
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js.map +1 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js +58 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js +156 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -0
- package/dist/hooks/Cluster.esm.js +8 -0
- package/dist/hooks/Cluster.esm.js.map +1 -0
- package/dist/hooks/GroupedResponses.esm.js +19 -0
- package/dist/hooks/GroupedResponses.esm.js.map +1 -0
- package/dist/hooks/PodNamesWithErrors.esm.js +8 -0
- package/dist/hooks/PodNamesWithErrors.esm.js.map +1 -0
- package/dist/hooks/PodNamesWithMetrics.esm.js +6 -0
- package/dist/hooks/PodNamesWithMetrics.esm.js.map +1 -0
- package/dist/hooks/auth.esm.js +24 -0
- package/dist/hooks/auth.esm.js.map +1 -0
- package/dist/hooks/useCustomResources.esm.js +42 -0
- package/dist/hooks/useCustomResources.esm.js.map +1 -0
- package/dist/hooks/useIsPodExecTerminalEnabled.esm.js +9 -0
- package/dist/hooks/useIsPodExecTerminalEnabled.esm.js.map +1 -0
- package/dist/hooks/useIsPodExecTerminalSupported.esm.js +21 -0
- package/dist/hooks/useIsPodExecTerminalSupported.esm.js.map +1 -0
- package/dist/hooks/useKubernetesObjects.esm.js +36 -0
- package/dist/hooks/useKubernetesObjects.esm.js.map +1 -0
- package/dist/hooks/useMatchingErrors.esm.js +20 -0
- package/dist/hooks/useMatchingErrors.esm.js.map +1 -0
- package/dist/hooks/usePodMetrics.esm.js +20 -0
- package/dist/hooks/usePodMetrics.esm.js.map +1 -0
- package/dist/index.esm.js +53 -3441
- package/dist/index.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/AksKubernetesAuthProvider.esm.js +21 -0
- package/dist/kubernetes-auth-provider/AksKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/GoogleKubernetesAuthProvider.esm.js +31 -0
- package/dist/kubernetes-auth-provider/GoogleKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/KubernetesAuthProviders.esm.js +89 -0
- package/dist/kubernetes-auth-provider/KubernetesAuthProviders.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/OidcKubernetesAuthProvider.esm.js +33 -0
- package/dist/kubernetes-auth-provider/OidcKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/ServerSideAuthProvider.esm.js +11 -0
- package/dist/kubernetes-auth-provider/ServerSideAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/types.esm.js +8 -0
- package/dist/kubernetes-auth-provider/types.esm.js.map +1 -0
- package/dist/utils/crons.esm.js +22 -0
- package/dist/utils/crons.esm.js.map +1 -0
- package/dist/utils/owner.esm.js +30 -0
- package/dist/utils/owner.esm.js.map +1 -0
- package/dist/utils/pod.esm.js +120 -0
- package/dist/utils/pod.esm.js.map +1 -0
- package/dist/utils/resources.esm.js +19 -0
- package/dist/utils/resources.esm.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import { PodDrawer } from './PodDrawer/PodDrawer.esm.js';
|
|
3
|
+
import { Table } from '@backstage/core-components';
|
|
4
|
+
import '@material-ui/core/Card';
|
|
5
|
+
import '@material-ui/core/CardActions';
|
|
6
|
+
import '@material-ui/core/CardContent';
|
|
7
|
+
import '@material-ui/core/CardHeader';
|
|
8
|
+
import '@material-ui/core/Grid';
|
|
9
|
+
import Typography from '@material-ui/core/Typography';
|
|
10
|
+
import 'luxon';
|
|
11
|
+
import '@backstage/core-plugin-api';
|
|
12
|
+
import 'react-use/esm/useAsync';
|
|
13
|
+
import '../../api/types.esm.js';
|
|
14
|
+
import 'react-use/esm/useInterval';
|
|
15
|
+
import 'react-use/esm/useAsyncRetry';
|
|
16
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
17
|
+
import '../../hooks/PodNamesWithErrors.esm.js';
|
|
18
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
19
|
+
import '../../hooks/GroupedResponses.esm.js';
|
|
20
|
+
import { ClusterContext } from '../../hooks/Cluster.esm.js';
|
|
21
|
+
import { usePodMetrics } from '../../hooks/usePodMetrics.esm.js';
|
|
22
|
+
import { useMatchingErrors } from '../../hooks/useMatchingErrors.esm.js';
|
|
23
|
+
import '@material-ui/icons/OpenInBrowser';
|
|
24
|
+
import '../KubernetesDialog/KubernetesDialog.esm.js';
|
|
25
|
+
import '../PodExecTerminal/PodExecTerminal.esm.js';
|
|
26
|
+
import '@material-ui/core/Paper';
|
|
27
|
+
import '@material-ui/lab/Skeleton';
|
|
28
|
+
import '@material-ui/icons/Subject';
|
|
29
|
+
import '@material-ui/core/List';
|
|
30
|
+
import '@material-ui/core/ListItem';
|
|
31
|
+
import { containersReady, totalRestarts, containerStatuses, podStatusToCpuUtil, podStatusToMemoryUtil } from '../../utils/pod.esm.js';
|
|
32
|
+
|
|
33
|
+
const READY_COLUMNS = "READY";
|
|
34
|
+
const RESOURCE_COLUMNS = "RESOURCE";
|
|
35
|
+
const READY = [
|
|
36
|
+
{
|
|
37
|
+
title: "containers ready",
|
|
38
|
+
align: "center",
|
|
39
|
+
render: containersReady,
|
|
40
|
+
width: "auto"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
title: "total restarts",
|
|
44
|
+
align: "center",
|
|
45
|
+
render: totalRestarts,
|
|
46
|
+
type: "numeric",
|
|
47
|
+
width: "auto"
|
|
48
|
+
}
|
|
49
|
+
];
|
|
50
|
+
const PodDrawerTrigger = ({ pod }) => {
|
|
51
|
+
const errors = useMatchingErrors({
|
|
52
|
+
kind: "Pod",
|
|
53
|
+
apiVersion: "v1",
|
|
54
|
+
metadata: pod.metadata
|
|
55
|
+
});
|
|
56
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
57
|
+
PodDrawer,
|
|
58
|
+
{
|
|
59
|
+
podAndErrors: {
|
|
60
|
+
pod,
|
|
61
|
+
cluster: useContext(ClusterContext),
|
|
62
|
+
errors
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
const Cpu = ({ clusterName, pod }) => {
|
|
68
|
+
const metrics = usePodMetrics(clusterName, pod);
|
|
69
|
+
if (!metrics) {
|
|
70
|
+
return /* @__PURE__ */ React__default.createElement(Typography, null, "unknown");
|
|
71
|
+
}
|
|
72
|
+
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, podStatusToCpuUtil(metrics));
|
|
73
|
+
};
|
|
74
|
+
const Memory = ({ clusterName, pod }) => {
|
|
75
|
+
const metrics = usePodMetrics(clusterName, pod);
|
|
76
|
+
if (!metrics) {
|
|
77
|
+
return /* @__PURE__ */ React__default.createElement(Typography, null, "unknown");
|
|
78
|
+
}
|
|
79
|
+
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, podStatusToMemoryUtil(metrics));
|
|
80
|
+
};
|
|
81
|
+
const PodsTable = ({ pods, extraColumns = [] }) => {
|
|
82
|
+
const cluster = useContext(ClusterContext);
|
|
83
|
+
const defaultColumns = [
|
|
84
|
+
{
|
|
85
|
+
title: "ID",
|
|
86
|
+
field: "metadata.uid",
|
|
87
|
+
hidden: true
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
title: "name",
|
|
91
|
+
highlight: true,
|
|
92
|
+
render: (pod) => {
|
|
93
|
+
return /* @__PURE__ */ React__default.createElement(PodDrawerTrigger, { pod });
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
title: "phase",
|
|
98
|
+
render: (pod) => {
|
|
99
|
+
var _a, _b;
|
|
100
|
+
return (_b = (_a = pod.status) == null ? void 0 : _a.phase) != null ? _b : "unknown";
|
|
101
|
+
},
|
|
102
|
+
width: "auto"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
title: "status",
|
|
106
|
+
render: containerStatuses
|
|
107
|
+
}
|
|
108
|
+
];
|
|
109
|
+
const columns = [...defaultColumns];
|
|
110
|
+
if (extraColumns.includes(READY_COLUMNS)) {
|
|
111
|
+
columns.push(...READY);
|
|
112
|
+
}
|
|
113
|
+
if (extraColumns.includes(RESOURCE_COLUMNS)) {
|
|
114
|
+
const resourceColumns = [
|
|
115
|
+
{
|
|
116
|
+
title: "CPU usage %",
|
|
117
|
+
render: (pod) => {
|
|
118
|
+
return /* @__PURE__ */ React__default.createElement(Cpu, { clusterName: cluster.name, pod });
|
|
119
|
+
},
|
|
120
|
+
width: "auto"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
title: "Memory usage %",
|
|
124
|
+
render: (pod) => {
|
|
125
|
+
return /* @__PURE__ */ React__default.createElement(Memory, { clusterName: cluster.name, pod });
|
|
126
|
+
},
|
|
127
|
+
width: "auto"
|
|
128
|
+
}
|
|
129
|
+
];
|
|
130
|
+
columns.push(...resourceColumns);
|
|
131
|
+
}
|
|
132
|
+
const tableStyle = {
|
|
133
|
+
minWidth: "0",
|
|
134
|
+
width: "100%"
|
|
135
|
+
};
|
|
136
|
+
return /* @__PURE__ */ React__default.createElement("div", { style: tableStyle }, /* @__PURE__ */ React__default.createElement(
|
|
137
|
+
Table,
|
|
138
|
+
{
|
|
139
|
+
options: { paging: true, search: false, emptyRowsWhenPaging: false },
|
|
140
|
+
data: pods.map((pod) => {
|
|
141
|
+
var _a;
|
|
142
|
+
return {
|
|
143
|
+
...pod,
|
|
144
|
+
id: (_a = pod == null ? void 0 : pod.metadata) == null ? void 0 : _a.uid
|
|
145
|
+
};
|
|
146
|
+
}),
|
|
147
|
+
columns
|
|
148
|
+
}
|
|
149
|
+
));
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export { PodsTable, READY_COLUMNS, RESOURCE_COLUMNS };
|
|
153
|
+
//# sourceMappingURL=PodsTable.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodsTable.esm.js","sources":["../../../src/components/Pods/PodsTable.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useContext } from 'react';\nimport { PodDrawer } from './PodDrawer';\nimport {\n containersReady,\n containerStatuses,\n podStatusToCpuUtil,\n podStatusToMemoryUtil,\n totalRestarts,\n} from '../../utils/pod';\nimport { Table, TableColumn } from '@backstage/core-components';\nimport { ClusterContext } from '../../hooks/Cluster';\nimport { useMatchingErrors } from '../../hooks/useMatchingErrors';\nimport { Pod } from 'kubernetes-models/v1/Pod';\nimport { V1Pod } from '@kubernetes/client-node';\nimport { usePodMetrics } from '../../hooks/usePodMetrics';\nimport Typography from '@material-ui/core/Typography';\n\n/**\n *\n *\n * @public\n */\nexport const READY_COLUMNS: PodColumns = 'READY';\n\n/**\n *\n *\n * @public\n */\nexport const RESOURCE_COLUMNS: PodColumns = 'RESOURCE';\n\n/**\n *\n *\n * @public\n */\nexport type PodColumns = 'READY' | 'RESOURCE';\n\n/**\n *\n *\n * @public\n */\nexport type PodsTablesProps = {\n pods: Pod | V1Pod[];\n extraColumns?: PodColumns[];\n children?: React.ReactNode;\n};\n\nconst READY: TableColumn<Pod>[] = [\n {\n title: 'containers ready',\n align: 'center',\n render: containersReady,\n width: 'auto',\n },\n {\n title: 'total restarts',\n align: 'center',\n render: totalRestarts,\n type: 'numeric',\n width: 'auto',\n },\n];\n\nconst PodDrawerTrigger = ({ pod }: { pod: Pod }) => {\n const errors = useMatchingErrors({\n kind: 'Pod',\n apiVersion: 'v1',\n metadata: pod.metadata,\n });\n return (\n <PodDrawer\n podAndErrors={{\n pod: pod as any,\n cluster: useContext(ClusterContext),\n errors: errors,\n }}\n />\n );\n};\n\nconst Cpu = ({ clusterName, pod }: { clusterName: string; pod: Pod }) => {\n const metrics = usePodMetrics(clusterName, pod);\n\n if (!metrics) {\n return <Typography>unknown</Typography>;\n }\n\n return <>{podStatusToCpuUtil(metrics)}</>;\n};\n\nconst Memory = ({ clusterName, pod }: { clusterName: string; pod: Pod }) => {\n const metrics = usePodMetrics(clusterName, pod);\n\n if (!metrics) {\n return <Typography>unknown</Typography>;\n }\n\n return <>{podStatusToMemoryUtil(metrics)}</>;\n};\n\n/**\n *\n *\n * @public\n */\nexport const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => {\n const cluster = useContext(ClusterContext);\n const defaultColumns: TableColumn<Pod>[] = [\n {\n title: 'ID',\n field: 'metadata.uid',\n hidden: true,\n },\n {\n title: 'name',\n highlight: true,\n render: (pod: Pod) => {\n return <PodDrawerTrigger pod={pod} />;\n },\n },\n {\n title: 'phase',\n render: (pod: Pod) => pod.status?.phase ?? 'unknown',\n width: 'auto',\n },\n {\n title: 'status',\n render: containerStatuses,\n },\n ];\n const columns: TableColumn<Pod>[] = [...defaultColumns];\n\n if (extraColumns.includes(READY_COLUMNS)) {\n columns.push(...READY);\n }\n if (extraColumns.includes(RESOURCE_COLUMNS)) {\n const resourceColumns: TableColumn<Pod>[] = [\n {\n title: 'CPU usage %',\n render: (pod: Pod) => {\n return <Cpu clusterName={cluster.name} pod={pod} />;\n },\n width: 'auto',\n },\n {\n title: 'Memory usage %',\n render: (pod: Pod) => {\n return <Memory clusterName={cluster.name} pod={pod} />;\n },\n width: 'auto',\n },\n ];\n columns.push(...resourceColumns);\n }\n\n const tableStyle = {\n minWidth: '0',\n width: '100%',\n };\n\n return (\n <div style={tableStyle}>\n <Table\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n // It was observed that in some instances the pod drawer closes when new data (like CPU usage) is available and the table reloads.\n // Mapping the metadata UID to the tables ID fixes this problem.\n data={\n (pods as Pod[]).map((pod: Pod) => ({\n ...pod,\n id: pod?.metadata?.uid,\n })) as any as Pod[]\n }\n columns={columns}\n />\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Grid from '@material-ui/core/Grid';
|
|
2
|
+
import Typography from '@material-ui/core/Typography';
|
|
3
|
+
import React__default from 'react';
|
|
4
|
+
import { LinearGauge } from '@backstage/core-components';
|
|
5
|
+
import { currentToDeclaredResourceToPerc } from '../../utils/resources.esm.js';
|
|
6
|
+
|
|
7
|
+
const getProgressColor = ({
|
|
8
|
+
palette,
|
|
9
|
+
value,
|
|
10
|
+
inverse,
|
|
11
|
+
max
|
|
12
|
+
}) => {
|
|
13
|
+
if (isNaN(value)) {
|
|
14
|
+
return palette.status.pending;
|
|
15
|
+
}
|
|
16
|
+
const actualMax = max ? max : 100;
|
|
17
|
+
const actualValue = inverse ? actualMax - value : value;
|
|
18
|
+
if (actualValue >= actualMax) {
|
|
19
|
+
return palette.status.error;
|
|
20
|
+
} else if (actualValue > 90 || actualValue < 40) {
|
|
21
|
+
return palette.status.warning;
|
|
22
|
+
}
|
|
23
|
+
return palette.status.ok;
|
|
24
|
+
};
|
|
25
|
+
const ResourceUtilization = ({
|
|
26
|
+
compressed = false,
|
|
27
|
+
title,
|
|
28
|
+
usage,
|
|
29
|
+
total,
|
|
30
|
+
totalFormatted
|
|
31
|
+
}) => {
|
|
32
|
+
const utilization = currentToDeclaredResourceToPerc(usage, total);
|
|
33
|
+
return /* @__PURE__ */ React__default.createElement(Grid, { container: true, spacing: 0 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
|
|
34
|
+
Typography,
|
|
35
|
+
{
|
|
36
|
+
variant: compressed ? "caption" : "subtitle2"
|
|
37
|
+
},
|
|
38
|
+
`${title}: ${totalFormatted}`
|
|
39
|
+
)), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
|
|
40
|
+
LinearGauge,
|
|
41
|
+
{
|
|
42
|
+
getColor: getProgressColor,
|
|
43
|
+
width: compressed ? "thin" : "thick",
|
|
44
|
+
value: utilization / 100
|
|
45
|
+
}
|
|
46
|
+
), !compressed && /* @__PURE__ */ React__default.createElement(Typography, { variant: "caption" }, "usage: ", `${utilization}%`)));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { ResourceUtilization };
|
|
50
|
+
//# sourceMappingURL=ResourceUtilization.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResourceUtilization.esm.js","sources":["../../../src/components/ResourceUtilization/ResourceUtilization.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\n\nimport React from 'react';\nimport { GaugePropsGetColor, LinearGauge } from '@backstage/core-components';\nimport { currentToDeclaredResourceToPerc } from '../../utils/resources';\n\n/**\n * Context for Pod Metrics\n *\n * @public\n */\nexport interface ResourceUtilizationProps {\n compressed?: boolean;\n title: string;\n usage: number | string;\n total: number | string;\n totalFormatted: string;\n}\n\nconst getProgressColor: GaugePropsGetColor = ({\n palette,\n value,\n inverse,\n max,\n}) => {\n if (isNaN(value)) {\n return palette.status.pending;\n }\n const actualMax = max ? max : 100;\n const actualValue = inverse ? actualMax - value : value;\n\n if (actualValue >= actualMax) {\n return palette.status.error;\n } else if (actualValue > 90 || actualValue < 40) {\n return palette.status.warning;\n }\n\n return palette.status.ok;\n};\n\n/**\n * Context for Pod Metrics\n *\n * @public\n */\nexport const ResourceUtilization = ({\n compressed = false,\n title,\n usage,\n total,\n totalFormatted,\n}: ResourceUtilizationProps) => {\n const utilization = currentToDeclaredResourceToPerc(usage, total);\n return (\n <Grid container spacing={0}>\n <Grid item xs={12}>\n <Typography\n variant={compressed ? 'caption' : 'subtitle2'}\n >{`${title}: ${totalFormatted}`}</Typography>\n </Grid>\n <Grid item xs={12}>\n <LinearGauge\n getColor={getProgressColor}\n width={compressed ? 'thin' : 'thick'}\n value={utilization / 100}\n />\n {!compressed && (\n <Typography variant=\"caption\">usage: {`${utilization}%`}</Typography>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AAmCA,MAAM,mBAAuC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AACF,CAAM,KAAA;AACJ,EAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,IAAA,OAAO,QAAQ,MAAO,CAAA,OAAA,CAAA;AAAA,GACxB;AACA,EAAM,MAAA,SAAA,GAAY,MAAM,GAAM,GAAA,GAAA,CAAA;AAC9B,EAAM,MAAA,WAAA,GAAc,OAAU,GAAA,SAAA,GAAY,KAAQ,GAAA,KAAA,CAAA;AAElD,EAAA,IAAI,eAAe,SAAW,EAAA;AAC5B,IAAA,OAAO,QAAQ,MAAO,CAAA,KAAA,CAAA;AAAA,GACb,MAAA,IAAA,WAAA,GAAc,EAAM,IAAA,WAAA,GAAc,EAAI,EAAA;AAC/C,IAAA,OAAO,QAAQ,MAAO,CAAA,OAAA,CAAA;AAAA,GACxB;AAEA,EAAA,OAAO,QAAQ,MAAO,CAAA,EAAA,CAAA;AACxB,CAAA,CAAA;AAOO,MAAM,sBAAsB,CAAC;AAAA,EAClC,UAAa,GAAA,KAAA;AAAA,EACb,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AACF,CAAgC,KAAA;AAC9B,EAAM,MAAA,WAAA,GAAc,+BAAgC,CAAA,KAAA,EAAO,KAAK,CAAA,CAAA;AAChE,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,OAAA,EAAS,CACvB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,aAAa,SAAY,GAAA,WAAA;AAAA,KAAA;AAAA,IAClC,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,cAAc,CAAA,CAAA;AAAA,GAC/B,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,gBAAA;AAAA,MACV,KAAA,EAAO,aAAa,MAAS,GAAA,OAAA;AAAA,MAC7B,OAAO,WAAc,GAAA,GAAA;AAAA,KAAA;AAAA,GAEtB,EAAA,CAAC,UACA,oBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,SAAU,EAAA,EAAA,SAAA,EAAQ,CAAG,EAAA,WAAW,CAAI,CAAA,CAAA,CAE5D,CACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js';
|
|
3
|
+
import '../KubernetesDrawer/KubernetesDrawer.esm.js';
|
|
4
|
+
import '@backstage/core-components';
|
|
5
|
+
import '@material-ui/core/FormControlLabel';
|
|
6
|
+
import '@material-ui/core/Switch';
|
|
7
|
+
import 'js-yaml';
|
|
8
|
+
import Typography from '@material-ui/core/Typography';
|
|
9
|
+
import Grid from '@material-ui/core/Grid';
|
|
10
|
+
|
|
11
|
+
const ServiceDrawer = ({
|
|
12
|
+
service,
|
|
13
|
+
expanded
|
|
14
|
+
}) => {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
17
|
+
KubernetesStructuredMetadataTableDrawer,
|
|
18
|
+
{
|
|
19
|
+
object: service,
|
|
20
|
+
expanded,
|
|
21
|
+
kind: "Service",
|
|
22
|
+
renderObject: (serviceObject) => {
|
|
23
|
+
return serviceObject.spec || {};
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
/* @__PURE__ */ React__default.createElement(
|
|
27
|
+
Grid,
|
|
28
|
+
{
|
|
29
|
+
container: true,
|
|
30
|
+
direction: "column",
|
|
31
|
+
justifyContent: "flex-start",
|
|
32
|
+
alignItems: "flex-start",
|
|
33
|
+
spacing: 0
|
|
34
|
+
},
|
|
35
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "body1" }, (_b = (_a = service.metadata) == null ? void 0 : _a.name) != null ? _b : "unknown object")),
|
|
36
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { color: "textSecondary", variant: "subtitle1" }, "Service"))
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { ServiceDrawer };
|
|
42
|
+
//# sourceMappingURL=ServiceDrawer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceDrawer.esm.js","sources":["../../../src/components/ServicesAccordions/ServiceDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { V1Service } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\n\nexport const ServiceDrawer = ({\n service,\n expanded,\n}: {\n service: V1Service;\n expanded?: boolean;\n}) => {\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={service}\n expanded={expanded}\n kind=\"Service\"\n renderObject={(serviceObject: V1Service) => {\n return serviceObject.spec || {};\n }}\n >\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"body1\">\n {service.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n Service\n </Typography>\n </Grid>\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;AAsBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,OAAA;AAAA,EACA,QAAA;AACF,CAGM,KAAA;AA5BN,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA6BE,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA,OAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAK,EAAA,SAAA;AAAA,MACL,YAAA,EAAc,CAAC,aAA6B,KAAA;AAC1C,QAAO,OAAA,aAAA,CAAc,QAAQ,EAAC,CAAA;AAAA,OAChC;AAAA,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAS,EAAA,IAAA;AAAA,QACT,SAAU,EAAA,QAAA;AAAA,QACV,cAAe,EAAA,YAAA;AAAA,QACf,UAAW,EAAA,YAAA;AAAA,QACX,OAAS,EAAA,CAAA;AAAA,OAAA;AAAA,sBAERA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAA,+CACP,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAlB,KAAA,IAAA,GAAA,EAAA,GAA0B,gBAC7B,CACF,CAAA;AAAA,sBACAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACR,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAM,eAAgB,EAAA,OAAA,EAAQ,WAAY,EAAA,EAAA,SAEtD,CACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import Accordion from '@material-ui/core/Accordion';
|
|
3
|
+
import AccordionDetails from '@material-ui/core/AccordionDetails';
|
|
4
|
+
import AccordionSummary from '@material-ui/core/AccordionSummary';
|
|
5
|
+
import Grid from '@material-ui/core/Grid';
|
|
6
|
+
import Typography from '@material-ui/core/Typography';
|
|
7
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
8
|
+
import { ServiceDrawer } from './ServiceDrawer.esm.js';
|
|
9
|
+
import '@backstage/core-plugin-api';
|
|
10
|
+
import 'react-use/esm/useAsync';
|
|
11
|
+
import '../../api/types.esm.js';
|
|
12
|
+
import 'react-use/esm/useInterval';
|
|
13
|
+
import 'react-use/esm/useAsyncRetry';
|
|
14
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
15
|
+
import '../../hooks/PodNamesWithErrors.esm.js';
|
|
16
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
17
|
+
import { GroupedResponsesContext } from '../../hooks/GroupedResponses.esm.js';
|
|
18
|
+
import '../../hooks/Cluster.esm.js';
|
|
19
|
+
import '../../hooks/usePodMetrics.esm.js';
|
|
20
|
+
import '../../hooks/useMatchingErrors.esm.js';
|
|
21
|
+
import { StructuredMetadataTable } from '@backstage/core-components';
|
|
22
|
+
|
|
23
|
+
const ServiceSummary = ({ service }) => {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
26
|
+
Grid,
|
|
27
|
+
{
|
|
28
|
+
container: true,
|
|
29
|
+
direction: "row",
|
|
30
|
+
justifyContent: "space-between",
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
spacing: 0
|
|
33
|
+
},
|
|
34
|
+
/* @__PURE__ */ React__default.createElement(Grid, { xs: 8, item: true }, /* @__PURE__ */ React__default.createElement(ServiceDrawer, { service })),
|
|
35
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "Type: ", (_b = (_a = service.spec) == null ? void 0 : _a.type) != null ? _b : "?"))
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
const ServiceCard = ({ service }) => {
|
|
39
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
40
|
+
const metadata = {};
|
|
41
|
+
if ((_d = (_c = (_b = (_a = service.status) == null ? void 0 : _a.loadBalancer) == null ? void 0 : _b.ingress) == null ? void 0 : _c.length) != null ? _d : -1 > 0) {
|
|
42
|
+
metadata.loadbalancer = (_e = service.status) == null ? void 0 : _e.loadBalancer;
|
|
43
|
+
}
|
|
44
|
+
if (((_f = service.spec) == null ? void 0 : _f.type) === "ClusterIP") {
|
|
45
|
+
metadata.clusterIP = service.spec.clusterIP;
|
|
46
|
+
}
|
|
47
|
+
if (((_g = service.spec) == null ? void 0 : _g.type) === "ExternalName") {
|
|
48
|
+
metadata.externalName = service.spec.externalName;
|
|
49
|
+
}
|
|
50
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
51
|
+
StructuredMetadataTable,
|
|
52
|
+
{
|
|
53
|
+
metadata: {
|
|
54
|
+
type: (_h = service.spec) == null ? void 0 : _h.type,
|
|
55
|
+
ports: (_i = service.spec) == null ? void 0 : _i.ports,
|
|
56
|
+
...metadata
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
const ServiceAccordion = ({ service }) => {
|
|
62
|
+
return /* @__PURE__ */ React__default.createElement(Accordion, { TransitionProps: { unmountOnExit: true }, variant: "outlined" }, /* @__PURE__ */ React__default.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React__default.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React__default.createElement(ServiceSummary, { service })), /* @__PURE__ */ React__default.createElement(AccordionDetails, null, /* @__PURE__ */ React__default.createElement(ServiceCard, { service })));
|
|
63
|
+
};
|
|
64
|
+
const ServicesAccordions = ({}) => {
|
|
65
|
+
const groupedResponses = useContext(GroupedResponsesContext);
|
|
66
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
67
|
+
Grid,
|
|
68
|
+
{
|
|
69
|
+
container: true,
|
|
70
|
+
direction: "row",
|
|
71
|
+
justifyContent: "flex-start",
|
|
72
|
+
alignItems: "flex-start"
|
|
73
|
+
},
|
|
74
|
+
groupedResponses.services.map((service, i) => /* @__PURE__ */ React__default.createElement(Grid, { item: true, key: i, xs: true }, /* @__PURE__ */ React__default.createElement(ServiceAccordion, { service })))
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export { ServicesAccordions };
|
|
79
|
+
//# sourceMappingURL=ServicesAccordions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServicesAccordions.esm.js","sources":["../../../src/components/ServicesAccordions/ServicesAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { V1Service } from '@kubernetes/client-node';\nimport { ServiceDrawer } from './ServiceDrawer';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StructuredMetadataTable } from '@backstage/core-components';\n\ntype ServiceSummaryProps = {\n service: V1Service;\n};\n\nconst ServiceSummary = ({ service }: ServiceSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={8} item>\n <ServiceDrawer service={service} />\n </Grid>\n\n <Grid item>\n <Typography variant=\"subtitle2\">\n Type: {service.spec?.type ?? '?'}\n </Typography>\n </Grid>\n </Grid>\n );\n};\n\ntype ServiceCardProps = {\n service: V1Service;\n};\n\nconst ServiceCard = ({ service }: ServiceCardProps) => {\n const metadata: any = {};\n\n if (service.status?.loadBalancer?.ingress?.length ?? -1 > 0) {\n metadata.loadbalancer = service.status?.loadBalancer;\n }\n\n if (service.spec?.type === 'ClusterIP') {\n metadata.clusterIP = service.spec.clusterIP;\n }\n if (service.spec?.type === 'ExternalName') {\n metadata.externalName = service.spec.externalName;\n }\n\n return (\n <StructuredMetadataTable\n metadata={{\n type: service.spec?.type,\n ports: service.spec?.ports,\n ...metadata,\n }}\n />\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport type ServicesAccordionsProps = {};\n\ntype ServiceAccordionProps = {\n service: V1Service;\n};\n\nconst ServiceAccordion = ({ service }: ServiceAccordionProps) => {\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <ServiceSummary service={service} />\n </AccordionSummary>\n <AccordionDetails>\n <ServiceCard service={service} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport const ServicesAccordions = ({}: ServicesAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {groupedResponses.services.map((service, i) => (\n <Grid item key={i} xs>\n <ServiceAccordion service={service} />\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js';
|
|
3
|
+
import '../KubernetesDrawer/KubernetesDrawer.esm.js';
|
|
4
|
+
import '@backstage/core-components';
|
|
5
|
+
import '@material-ui/core/FormControlLabel';
|
|
6
|
+
import '@material-ui/core/Switch';
|
|
7
|
+
import 'js-yaml';
|
|
8
|
+
import { renderCondition } from '../../utils/pod.esm.js';
|
|
9
|
+
import Typography from '@material-ui/core/Typography';
|
|
10
|
+
import Grid from '@material-ui/core/Grid';
|
|
11
|
+
import Chip from '@material-ui/core/Chip';
|
|
12
|
+
|
|
13
|
+
const StatefulSetDrawer = ({
|
|
14
|
+
statefulset,
|
|
15
|
+
expanded
|
|
16
|
+
}) => {
|
|
17
|
+
var _a, _b, _c;
|
|
18
|
+
const namespace = (_a = statefulset.metadata) == null ? void 0 : _a.namespace;
|
|
19
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
20
|
+
KubernetesStructuredMetadataTableDrawer,
|
|
21
|
+
{
|
|
22
|
+
object: statefulset,
|
|
23
|
+
expanded,
|
|
24
|
+
kind: "StatefulSet",
|
|
25
|
+
renderObject: (statefulsetObj) => {
|
|
26
|
+
var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
27
|
+
const conditions = ((_b2 = (_a2 = statefulsetObj.status) == null ? void 0 : _a2.conditions) != null ? _b2 : []).map(renderCondition).reduce((accum, next) => {
|
|
28
|
+
accum[next[0]] = next[1];
|
|
29
|
+
return accum;
|
|
30
|
+
}, {});
|
|
31
|
+
return {
|
|
32
|
+
updateStrategy: (_d = (_c2 = statefulset.spec) == null ? void 0 : _c2.updateStrategy) != null ? _d : "???",
|
|
33
|
+
podManagementPolicy: (_f = (_e = statefulset.spec) == null ? void 0 : _e.podManagementPolicy) != null ? _f : "???",
|
|
34
|
+
serviceName: (_h = (_g = statefulset.spec) == null ? void 0 : _g.serviceName) != null ? _h : "???",
|
|
35
|
+
selector: (_j = (_i = statefulset.spec) == null ? void 0 : _i.selector) != null ? _j : "???",
|
|
36
|
+
revisionHistoryLimit: (_l = (_k = statefulset.spec) == null ? void 0 : _k.revisionHistoryLimit) != null ? _l : "???",
|
|
37
|
+
...conditions
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
/* @__PURE__ */ React__default.createElement(
|
|
42
|
+
Grid,
|
|
43
|
+
{
|
|
44
|
+
container: true,
|
|
45
|
+
direction: "column",
|
|
46
|
+
justifyContent: "flex-start",
|
|
47
|
+
alignItems: "flex-start",
|
|
48
|
+
spacing: 0
|
|
49
|
+
},
|
|
50
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "body1" }, (_c = (_b = statefulset.metadata) == null ? void 0 : _b.name) != null ? _c : "unknown object")),
|
|
51
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { color: "textSecondary", variant: "subtitle1" }, "Stateful Set")),
|
|
52
|
+
namespace && /* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Chip, { size: "small", label: `namespace: ${namespace}` }))
|
|
53
|
+
)
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export { StatefulSetDrawer };
|
|
58
|
+
//# sourceMappingURL=StatefulSetDrawer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatefulSetDrawer.esm.js","sources":["../../../src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { V1StatefulSet } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport { renderCondition } from '../../utils/pod';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport Chip from '@material-ui/core/Chip';\n\nexport const StatefulSetDrawer = ({\n statefulset,\n expanded,\n}: {\n statefulset: V1StatefulSet;\n expanded?: boolean;\n}) => {\n const namespace = statefulset.metadata?.namespace;\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={statefulset}\n expanded={expanded}\n kind=\"StatefulSet\"\n renderObject={(statefulsetObj: V1StatefulSet) => {\n const conditions = (statefulsetObj.status?.conditions ?? [])\n .map(renderCondition)\n .reduce((accum, next) => {\n accum[next[0]] = next[1];\n return accum;\n }, {} as { [key: string]: React.ReactNode });\n\n return {\n updateStrategy: statefulset.spec?.updateStrategy ?? '???',\n podManagementPolicy: statefulset.spec?.podManagementPolicy ?? '???',\n serviceName: statefulset.spec?.serviceName ?? '???',\n selector: statefulset.spec?.selector ?? '???',\n revisionHistoryLimit: statefulset.spec?.revisionHistoryLimit ?? '???',\n ...conditions,\n };\n }}\n >\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"body1\">\n {statefulset.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n Stateful Set\n </Typography>\n </Grid>\n {namespace && (\n <Grid item>\n <Chip size=\"small\" label={`namespace: ${namespace}`} />\n </Grid>\n )}\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":["React","_a","_b","_c"],"mappings":";;;;;;;;;;;;AAwBO,MAAM,oBAAoB,CAAC;AAAA,EAChC,WAAA;AAAA,EACA,QAAA;AACF,CAGM,KAAA;AA9BN,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA+BE,EAAM,MAAA,SAAA,GAAA,CAAY,EAAY,GAAA,WAAA,CAAA,QAAA,KAAZ,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA;AACxC,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA,WAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAK,EAAA,aAAA;AAAA,MACL,YAAA,EAAc,CAAC,cAAkC,KAAA;AArCvD,QAAAC,IAAAA,GAAAA,EAAAC,KAAAC,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAsCQ,QAAA,MAAM,eAAcD,GAAAD,GAAAA,CAAAA,GAAAA,GAAA,eAAe,MAAf,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAuB,UAAvB,KAAA,IAAA,GAAAC,GAAqC,GAAA,IACtD,GAAI,CAAA,eAAe,EACnB,MAAO,CAAA,CAAC,OAAO,IAAS,KAAA;AACvB,UAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA,CAAA;AACvB,UAAO,OAAA,KAAA,CAAA;AAAA,SACT,EAAG,EAAwC,CAAA,CAAA;AAE7C,QAAO,OAAA;AAAA,UACL,cAAA,EAAA,CAAgB,MAAAC,GAAA,GAAA,WAAA,CAAY,SAAZ,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAkB,mBAAlB,IAAoC,GAAA,EAAA,GAAA,KAAA;AAAA,UACpD,mBAAqB,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,IAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,wBAAlB,IAAyC,GAAA,EAAA,GAAA,KAAA;AAAA,UAC9D,WAAa,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,IAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,gBAAlB,IAAiC,GAAA,EAAA,GAAA,KAAA;AAAA,UAC9C,QAAU,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,IAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,aAAlB,IAA8B,GAAA,EAAA,GAAA,KAAA;AAAA,UACxC,oBAAsB,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,IAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,yBAAlB,IAA0C,GAAA,EAAA,GAAA,KAAA;AAAA,UAChE,GAAG,UAAA;AAAA,SACL,CAAA;AAAA,OACF;AAAA,KAAA;AAAA,oBAEAH,cAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAS,EAAA,IAAA;AAAA,QACT,SAAU,EAAA,QAAA;AAAA,QACV,cAAe,EAAA,YAAA;AAAA,QACf,UAAW,EAAA,YAAA;AAAA,QACX,OAAS,EAAA,CAAA;AAAA,OAAA;AAAA,sBAERA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAA,+CACP,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,QAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,IAAtB,KAAA,IAAA,GAAA,EAAA,GAA8B,gBACjC,CACF,CAAA;AAAA,sBACAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACR,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAM,eAAgB,EAAA,OAAA,EAAQ,WAAY,EAAA,EAAA,cAEtD,CACF,CAAA;AAAA,MACC,SACC,oBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACR,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,KAAA,EAAO,CAAc,WAAA,EAAA,SAAS,IAAI,CACvD,CAAA;AAAA,KAEJ;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import Accordion from '@material-ui/core/Accordion';
|
|
3
|
+
import AccordionDetails from '@material-ui/core/AccordionDetails';
|
|
4
|
+
import AccordionSummary from '@material-ui/core/AccordionSummary';
|
|
5
|
+
import Grid from '@material-ui/core/Grid';
|
|
6
|
+
import Typography from '@material-ui/core/Typography';
|
|
7
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
8
|
+
import '../Pods/PodDrawer/PodDrawer.esm.js';
|
|
9
|
+
import { StatusOK, StatusError } from '@backstage/core-components';
|
|
10
|
+
import '@material-ui/core/Card';
|
|
11
|
+
import '@material-ui/core/CardActions';
|
|
12
|
+
import '@material-ui/core/CardContent';
|
|
13
|
+
import '@material-ui/core/CardHeader';
|
|
14
|
+
import 'luxon';
|
|
15
|
+
import '@backstage/core-plugin-api';
|
|
16
|
+
import 'react-use/esm/useAsync';
|
|
17
|
+
import '../../api/types.esm.js';
|
|
18
|
+
import 'react-use/esm/useInterval';
|
|
19
|
+
import 'react-use/esm/useAsyncRetry';
|
|
20
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
21
|
+
import { PodNamesWithErrorsContext } from '../../hooks/PodNamesWithErrors.esm.js';
|
|
22
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
23
|
+
import { GroupedResponsesContext } from '../../hooks/GroupedResponses.esm.js';
|
|
24
|
+
import '../../hooks/Cluster.esm.js';
|
|
25
|
+
import '../../hooks/usePodMetrics.esm.js';
|
|
26
|
+
import '../../hooks/useMatchingErrors.esm.js';
|
|
27
|
+
import '@material-ui/icons/OpenInBrowser';
|
|
28
|
+
import '../KubernetesDialog/KubernetesDialog.esm.js';
|
|
29
|
+
import '../PodExecTerminal/PodExecTerminal.esm.js';
|
|
30
|
+
import '@material-ui/core/Paper';
|
|
31
|
+
import '@material-ui/lab/Skeleton';
|
|
32
|
+
import '@material-ui/icons/Subject';
|
|
33
|
+
import '@material-ui/core/List';
|
|
34
|
+
import '@material-ui/core/ListItem';
|
|
35
|
+
import '../Pods/FixDialog/FixDialog.esm.js';
|
|
36
|
+
import '@material-ui/core/Avatar';
|
|
37
|
+
import '@material-ui/core/Container';
|
|
38
|
+
import '@material-ui/core/ListItemAvatar';
|
|
39
|
+
import '@material-ui/core/ListItemText';
|
|
40
|
+
import '@material-ui/core/Tooltip';
|
|
41
|
+
import '@material-ui/icons/Info';
|
|
42
|
+
import '@material-ui/icons/Warning';
|
|
43
|
+
import '../Pods/ErrorList/ErrorList.esm.js';
|
|
44
|
+
import { PodsTable, READY_COLUMNS, RESOURCE_COLUMNS } from '../Pods/PodsTable.esm.js';
|
|
45
|
+
import { StatefulSetDrawer } from './StatefulSetDrawer.esm.js';
|
|
46
|
+
import { HorizontalPodAutoscalerDrawer } from '../HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js';
|
|
47
|
+
import { getMatchingHpa, getOwnedResources } from '../../utils/owner.esm.js';
|
|
48
|
+
|
|
49
|
+
const StatefulSetSummary = ({
|
|
50
|
+
statefulset,
|
|
51
|
+
numberOfCurrentPods,
|
|
52
|
+
numberOfPodsWithErrors,
|
|
53
|
+
hpa
|
|
54
|
+
}) => {
|
|
55
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
56
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
57
|
+
Grid,
|
|
58
|
+
{
|
|
59
|
+
container: true,
|
|
60
|
+
direction: "row",
|
|
61
|
+
justifyContent: "space-between",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
spacing: 0
|
|
64
|
+
},
|
|
65
|
+
/* @__PURE__ */ React__default.createElement(Grid, { xs: 6, item: true }, /* @__PURE__ */ React__default.createElement(StatefulSetDrawer, { statefulset })),
|
|
66
|
+
hpa && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 3 }, /* @__PURE__ */ React__default.createElement(HorizontalPodAutoscalerDrawer, { hpa }, /* @__PURE__ */ React__default.createElement(
|
|
67
|
+
Grid,
|
|
68
|
+
{
|
|
69
|
+
item: true,
|
|
70
|
+
container: true,
|
|
71
|
+
direction: "column",
|
|
72
|
+
justifyContent: "flex-start",
|
|
73
|
+
alignItems: "flex-start",
|
|
74
|
+
spacing: 0
|
|
75
|
+
},
|
|
76
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "min replicas ", (_b = (_a = hpa.spec) == null ? void 0 : _a.minReplicas) != null ? _b : "?", " / max replicas", " ", (_d = (_c = hpa.spec) == null ? void 0 : _c.maxReplicas) != null ? _d : "?")),
|
|
77
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "current CPU usage:", " ", (_f = (_e = hpa.status) == null ? void 0 : _e.currentCPUUtilizationPercentage) != null ? _f : "?", "%")),
|
|
78
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "target CPU usage:", " ", (_h = (_g = hpa.spec) == null ? void 0 : _g.targetCPUUtilizationPercentage) != null ? _h : "?", "%"))
|
|
79
|
+
))),
|
|
80
|
+
/* @__PURE__ */ React__default.createElement(
|
|
81
|
+
Grid,
|
|
82
|
+
{
|
|
83
|
+
item: true,
|
|
84
|
+
container: true,
|
|
85
|
+
xs: 3,
|
|
86
|
+
direction: "column",
|
|
87
|
+
justifyContent: "flex-start",
|
|
88
|
+
alignItems: "flex-start",
|
|
89
|
+
spacing: 0
|
|
90
|
+
},
|
|
91
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(StatusOK, null, numberOfCurrentPods, " pods")),
|
|
92
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, numberOfPodsWithErrors > 0 ? /* @__PURE__ */ React__default.createElement(StatusError, null, numberOfPodsWithErrors, " pod", numberOfPodsWithErrors > 1 ? "s" : "", " with errors") : /* @__PURE__ */ React__default.createElement(StatusOK, null, "No pods with errors"))
|
|
93
|
+
)
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
const StatefulSetAccordion = ({
|
|
97
|
+
statefulset,
|
|
98
|
+
ownedPods,
|
|
99
|
+
matchingHpa
|
|
100
|
+
}) => {
|
|
101
|
+
const podNamesWithErrors = useContext(PodNamesWithErrorsContext);
|
|
102
|
+
const podsWithErrors = ownedPods.filter(
|
|
103
|
+
(p) => {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
return podNamesWithErrors.has((_b = (_a = p.metadata) == null ? void 0 : _a.name) != null ? _b : "");
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
return /* @__PURE__ */ React__default.createElement(Accordion, { TransitionProps: { unmountOnExit: true }, variant: "outlined" }, /* @__PURE__ */ React__default.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React__default.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React__default.createElement(
|
|
109
|
+
StatefulSetSummary,
|
|
110
|
+
{
|
|
111
|
+
statefulset,
|
|
112
|
+
numberOfCurrentPods: ownedPods.length,
|
|
113
|
+
numberOfPodsWithErrors: podsWithErrors.length,
|
|
114
|
+
hpa: matchingHpa
|
|
115
|
+
}
|
|
116
|
+
)), /* @__PURE__ */ React__default.createElement(AccordionDetails, null, /* @__PURE__ */ React__default.createElement(
|
|
117
|
+
PodsTable,
|
|
118
|
+
{
|
|
119
|
+
pods: ownedPods,
|
|
120
|
+
extraColumns: [READY_COLUMNS, RESOURCE_COLUMNS]
|
|
121
|
+
}
|
|
122
|
+
)));
|
|
123
|
+
};
|
|
124
|
+
const StatefulSetsAccordions = ({}) => {
|
|
125
|
+
const groupedResponses = useContext(GroupedResponsesContext);
|
|
126
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
127
|
+
Grid,
|
|
128
|
+
{
|
|
129
|
+
container: true,
|
|
130
|
+
direction: "column",
|
|
131
|
+
justifyContent: "flex-start",
|
|
132
|
+
alignItems: "flex-start"
|
|
133
|
+
},
|
|
134
|
+
groupedResponses.statefulsets.map((statefulset, i) => {
|
|
135
|
+
var _a, _b;
|
|
136
|
+
return /* @__PURE__ */ React__default.createElement(Grid, { container: true, item: true, key: i, xs: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: true }, /* @__PURE__ */ React__default.createElement(
|
|
137
|
+
StatefulSetAccordion,
|
|
138
|
+
{
|
|
139
|
+
matchingHpa: getMatchingHpa(
|
|
140
|
+
{
|
|
141
|
+
name: (_a = statefulset.metadata) == null ? void 0 : _a.name,
|
|
142
|
+
namespace: (_b = statefulset.metadata) == null ? void 0 : _b.namespace,
|
|
143
|
+
kind: "statefulset"
|
|
144
|
+
},
|
|
145
|
+
groupedResponses.horizontalPodAutoscalers
|
|
146
|
+
),
|
|
147
|
+
ownedPods: getOwnedResources(statefulset, groupedResponses.pods),
|
|
148
|
+
statefulset
|
|
149
|
+
}
|
|
150
|
+
)));
|
|
151
|
+
})
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export { StatefulSetsAccordions };
|
|
156
|
+
//# sourceMappingURL=StatefulSetsAccordions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatefulSetsAccordions.esm.js","sources":["../../../src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {\n V1Pod,\n V1HorizontalPodAutoscaler,\n V1StatefulSet,\n} from '@kubernetes/client-node';\nimport { PodsTable } from '../Pods';\nimport { StatefulSetDrawer } from './StatefulSetDrawer';\nimport { HorizontalPodAutoscalerDrawer } from '../HorizontalPodAutoscalers';\nimport { getMatchingHpa, getOwnedResources } from '../../utils/owner';\nimport {\n GroupedResponsesContext,\n PodNamesWithErrorsContext,\n} from '../../hooks';\nimport { StatusError, StatusOK } from '@backstage/core-components';\nimport { READY_COLUMNS, RESOURCE_COLUMNS } from '../Pods/PodsTable';\n\ntype StatefulSetsAccordionsProps = {\n children?: React.ReactNode;\n};\n\ntype StatefulSetAccordionProps = {\n statefulset: V1StatefulSet;\n ownedPods: V1Pod[];\n matchingHpa?: V1HorizontalPodAutoscaler;\n children?: React.ReactNode;\n};\n\ntype StatefulSetSummaryProps = {\n statefulset: V1StatefulSet;\n numberOfCurrentPods: number;\n numberOfPodsWithErrors: number;\n hpa?: V1HorizontalPodAutoscaler;\n children?: React.ReactNode;\n};\n\nconst StatefulSetSummary = ({\n statefulset,\n numberOfCurrentPods,\n numberOfPodsWithErrors,\n hpa,\n}: StatefulSetSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={6} item>\n <StatefulSetDrawer statefulset={statefulset} />\n </Grid>\n {hpa && (\n <Grid item xs={3}>\n <HorizontalPodAutoscalerDrawer hpa={hpa}>\n <Grid\n item\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"subtitle2\">\n min replicas {hpa.spec?.minReplicas ?? '?'} / max replicas{' '}\n {hpa.spec?.maxReplicas ?? '?'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n current CPU usage:{' '}\n {hpa.status?.currentCPUUtilizationPercentage ?? '?'}%\n </Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n target CPU usage:{' '}\n {hpa.spec?.targetCPUUtilizationPercentage ?? '?'}%\n </Typography>\n </Grid>\n </Grid>\n </HorizontalPodAutoscalerDrawer>\n </Grid>\n )}\n <Grid\n item\n container\n xs={3}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfCurrentPods} pods</StatusOK>\n </Grid>\n <Grid item>\n {numberOfPodsWithErrors > 0 ? (\n <StatusError>\n {numberOfPodsWithErrors} pod\n {numberOfPodsWithErrors > 1 ? 's' : ''} with errors\n </StatusError>\n ) : (\n <StatusOK>No pods with errors</StatusOK>\n )}\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst StatefulSetAccordion = ({\n statefulset,\n ownedPods,\n matchingHpa,\n}: StatefulSetAccordionProps) => {\n const podNamesWithErrors = useContext(PodNamesWithErrorsContext);\n\n const podsWithErrors = ownedPods.filter(p =>\n podNamesWithErrors.has(p.metadata?.name ?? ''),\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <StatefulSetSummary\n statefulset={statefulset}\n numberOfCurrentPods={ownedPods.length}\n numberOfPodsWithErrors={podsWithErrors.length}\n hpa={matchingHpa}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PodsTable\n pods={ownedPods}\n extraColumns={[READY_COLUMNS, RESOURCE_COLUMNS]}\n />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const StatefulSetsAccordions = ({}: StatefulSetsAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n\n return (\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {groupedResponses.statefulsets.map((statefulset, i) => (\n <Grid container item key={i} xs>\n <Grid item xs>\n <StatefulSetAccordion\n matchingHpa={getMatchingHpa(\n {\n name: statefulset.metadata?.name,\n namespace: statefulset.metadata?.namespace,\n kind: 'statefulset',\n },\n groupedResponses.horizontalPodAutoscalers,\n )}\n ownedPods={getOwnedResources(statefulset, groupedResponses.pods)}\n statefulset={statefulset}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
|