@backstage/plugin-kubernetes-react 0.5.6-next.0 → 0.5.6
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 +32 -0
- package/dist/components/Cluster/Cluster.esm.js +64 -39
- package/dist/components/Cluster/Cluster.esm.js.map +1 -1
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js +44 -32
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js.map +1 -1
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js +20 -17
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js +149 -100
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js +20 -17
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js +8 -5
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js.map +1 -1
- package/dist/components/CustomResources/CustomResources.esm.js +8 -7
- package/dist/components/CustomResources/CustomResources.esm.js.map +1 -1
- package/dist/components/CustomResources/DefaultCustomResource.esm.js +41 -39
- package/dist/components/CustomResources/DefaultCustomResource.esm.js.map +1 -1
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js +19 -16
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -1
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js +59 -43
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -1
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js +19 -16
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -1
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js +19 -16
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -1
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js +102 -70
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -1
- package/dist/components/ErrorPanel/ErrorPanel.esm.js +21 -9
- package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -1
- package/dist/components/ErrorReporting/ErrorReporting.esm.js +7 -4
- package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -1
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js +6 -5
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -1
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js +19 -16
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -1
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js +15 -11
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js.map +1 -1
- package/dist/components/JobsAccordions/JobsAccordions.esm.js +49 -31
- package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -1
- package/dist/components/JobsAccordions/JobsDrawer.esm.js +18 -15
- package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js +40 -31
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js +57 -42
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js +95 -75
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js +36 -32
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js +4 -3
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js +7 -6
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -1
- package/dist/components/Pods/ErrorList/ErrorList.esm.js +27 -21
- package/dist/components/Pods/ErrorList/ErrorList.esm.js.map +1 -1
- package/dist/components/Pods/Events/Events.esm.js +30 -23
- package/dist/components/Pods/Events/Events.esm.js.map +1 -1
- package/dist/components/Pods/FixDialog/FixDialog.esm.js +85 -51
- package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -1
- package/dist/components/Pods/PodDelete/PodDeleteButton.esm.js +25 -21
- package/dist/components/Pods/PodDelete/PodDeleteButton.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js +137 -95
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js +36 -9
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js +89 -64
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -1
- package/dist/components/Pods/PodLogs/PodLogs.esm.js +30 -25
- package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -1
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js +6 -6
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -1
- package/dist/components/Pods/PodsTable.esm.js +12 -11
- package/dist/components/Pods/PodsTable.esm.js.map +1 -1
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js +24 -15
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js.map +1 -1
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js +19 -16
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -1
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js +21 -12
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js.map +1 -1
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js +19 -16
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -1
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js +98 -66
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -1
- package/dist/hooks/Cluster.esm.js +2 -2
- package/dist/hooks/Cluster.esm.js.map +1 -1
- package/dist/hooks/GroupedResponses.esm.js +2 -2
- package/dist/hooks/GroupedResponses.esm.js.map +1 -1
- package/dist/hooks/PodNamesWithErrors.esm.js +2 -2
- package/dist/hooks/PodNamesWithErrors.esm.js.map +1 -1
- package/dist/hooks/PodNamesWithMetrics.esm.js +2 -2
- package/dist/hooks/PodNamesWithMetrics.esm.js.map +1 -1
- package/dist/hooks/useMatchingErrors.esm.js +2 -2
- package/dist/hooks/useMatchingErrors.esm.js.map +1 -1
- package/dist/hooks/usePodMetrics.esm.js +4 -2
- package/dist/hooks/usePodMetrics.esm.js.map +1 -1
- package/dist/index.d.ts +47 -46
- package/dist/utils/pod.esm.js +25 -15
- package/dist/utils/pod.esm.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
1
2
|
import { StructuredMetadataTable } from '@backstage/core-components';
|
|
2
3
|
import Card from '@material-ui/core/Card';
|
|
3
4
|
import CardActions from '@material-ui/core/CardActions';
|
|
@@ -6,11 +7,11 @@ import CardHeader from '@material-ui/core/CardHeader';
|
|
|
6
7
|
import Grid from '@material-ui/core/Grid';
|
|
7
8
|
import Typography from '@material-ui/core/Typography';
|
|
8
9
|
import { DateTime } from 'luxon';
|
|
9
|
-
import React__default from 'react';
|
|
10
10
|
import '@backstage/core-plugin-api';
|
|
11
11
|
import { useIsPodExecTerminalEnabled } from '../../../hooks/useIsPodExecTerminalEnabled.esm.js';
|
|
12
12
|
import 'react-use/esm/useAsync';
|
|
13
13
|
import '../../../api/types.esm.js';
|
|
14
|
+
import 'react';
|
|
14
15
|
import 'react-use/esm/useInterval';
|
|
15
16
|
import 'react-use/esm/useAsyncRetry';
|
|
16
17
|
import '../../../kubernetes-auth-provider/types.esm.js';
|
|
@@ -55,9 +56,14 @@ const getStartedAtTime = (containerStatus) => {
|
|
|
55
56
|
return containerStatus.state?.running?.startedAt || containerStatus.state?.terminated?.startedAt;
|
|
56
57
|
};
|
|
57
58
|
const ContainerDatetime = ({ prefix, dateTime }) => {
|
|
58
|
-
return /* @__PURE__ */
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
return /* @__PURE__ */ jsxs(Typography, { variant: "subtitle2", children: [
|
|
60
|
+
prefix,
|
|
61
|
+
":",
|
|
62
|
+
" ",
|
|
63
|
+
DateTime.fromISO(dateTime).toRelative({
|
|
64
|
+
locale: "en"
|
|
65
|
+
})
|
|
66
|
+
] });
|
|
61
67
|
};
|
|
62
68
|
const ContainerCard = ({
|
|
63
69
|
podScope,
|
|
@@ -67,102 +73,138 @@ const ContainerCard = ({
|
|
|
67
73
|
}) => {
|
|
68
74
|
const isPodExecTerminalEnabled = useIsPodExecTerminalEnabled();
|
|
69
75
|
if (containerSpec === void 0) {
|
|
70
|
-
return /* @__PURE__ */
|
|
76
|
+
return /* @__PURE__ */ jsx(Typography, { children: "error reading pod from cluster" });
|
|
71
77
|
}
|
|
72
78
|
const containerStartedTime = getStartedAtTime(containerStatus);
|
|
73
79
|
const containerFinishedTime = containerStatus.state?.terminated?.finishedAt;
|
|
74
|
-
return /* @__PURE__ */
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
{
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
80
|
+
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
CardHeader,
|
|
83
|
+
{
|
|
84
|
+
title: containerStatus.name,
|
|
85
|
+
subheader: containerStatus.image
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(Grid, { container: true, children: [
|
|
89
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
|
|
90
|
+
containerStartedTime && /* @__PURE__ */ jsx(
|
|
91
|
+
ContainerDatetime,
|
|
92
|
+
{
|
|
93
|
+
prefix: "Started",
|
|
94
|
+
dateTime: containerStartedTime
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
containerFinishedTime && /* @__PURE__ */ jsx(
|
|
98
|
+
ContainerDatetime,
|
|
99
|
+
{
|
|
100
|
+
prefix: "Completed",
|
|
101
|
+
dateTime: containerFinishedTime
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
containerStartedTime && containerFinishedTime && /* @__PURE__ */ jsxs(Typography, { variant: "subtitle2", children: [
|
|
105
|
+
"Execution time:",
|
|
106
|
+
" ",
|
|
107
|
+
DateTime.fromISO(containerFinishedTime).diff(DateTime.fromISO(containerStartedTime), [
|
|
108
|
+
"hours",
|
|
109
|
+
"minutes",
|
|
110
|
+
"seconds"
|
|
111
|
+
]).toHuman()
|
|
112
|
+
] })
|
|
113
|
+
] }),
|
|
114
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs(Typography, { variant: "subtitle2", children: [
|
|
115
|
+
"Status: ",
|
|
116
|
+
getCurrentState(containerStatus)
|
|
117
|
+
] }) }),
|
|
118
|
+
containerStatus.restartCount > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs(Typography, { variant: "subtitle2", children: [
|
|
119
|
+
"Restarts: ",
|
|
120
|
+
containerStatus.restartCount
|
|
121
|
+
] }) }),
|
|
122
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", children: "Container health" }) }),
|
|
123
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(
|
|
124
|
+
StructuredMetadataTable,
|
|
125
|
+
{
|
|
126
|
+
metadata: getContainerHealthChecks(
|
|
127
|
+
containerSpec,
|
|
128
|
+
containerStatus
|
|
129
|
+
),
|
|
130
|
+
options: { nestedValuesAsYaml: true }
|
|
131
|
+
}
|
|
132
|
+
) }),
|
|
133
|
+
containerMetrics && /* @__PURE__ */ jsxs(Grid, { container: true, item: true, xs: 12, spacing: 0, children: [
|
|
134
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", children: "Resource utilization" }) }),
|
|
135
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, style: { minHeight: "5rem" }, children: [
|
|
136
|
+
/* @__PURE__ */ jsx(
|
|
137
|
+
ResourceUtilization,
|
|
138
|
+
{
|
|
139
|
+
compressed: true,
|
|
140
|
+
title: "CPU requests",
|
|
141
|
+
usage: containerMetrics.cpuUsage.currentUsage,
|
|
142
|
+
total: containerMetrics.cpuUsage.requestTotal,
|
|
143
|
+
totalFormatted: formatMillicores(
|
|
144
|
+
containerMetrics.cpuUsage.requestTotal
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
/* @__PURE__ */ jsx(
|
|
149
|
+
ResourceUtilization,
|
|
150
|
+
{
|
|
151
|
+
compressed: true,
|
|
152
|
+
title: "CPU limits",
|
|
153
|
+
usage: containerMetrics.cpuUsage.currentUsage,
|
|
154
|
+
total: containerMetrics.cpuUsage.limitTotal,
|
|
155
|
+
totalFormatted: formatMillicores(
|
|
156
|
+
containerMetrics.cpuUsage.limitTotal
|
|
157
|
+
)
|
|
158
|
+
}
|
|
159
|
+
),
|
|
160
|
+
/* @__PURE__ */ jsx(
|
|
161
|
+
ResourceUtilization,
|
|
162
|
+
{
|
|
163
|
+
compressed: true,
|
|
164
|
+
title: "Memory requests",
|
|
165
|
+
usage: containerMetrics.memoryUsage.currentUsage,
|
|
166
|
+
total: containerMetrics.memoryUsage.requestTotal,
|
|
167
|
+
totalFormatted: bytesToMiB(
|
|
168
|
+
containerMetrics.memoryUsage.requestTotal
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
ResourceUtilization,
|
|
174
|
+
{
|
|
175
|
+
compressed: true,
|
|
176
|
+
title: "Memory limits",
|
|
177
|
+
usage: containerMetrics.memoryUsage.currentUsage,
|
|
178
|
+
total: containerMetrics.memoryUsage.limitTotal,
|
|
179
|
+
totalFormatted: bytesToMiB(
|
|
180
|
+
containerMetrics.memoryUsage.limitTotal
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
] })
|
|
185
|
+
] })
|
|
186
|
+
] }) }),
|
|
187
|
+
/* @__PURE__ */ jsxs(CardActions, { children: [
|
|
188
|
+
/* @__PURE__ */ jsx(
|
|
189
|
+
PodLogsDialog,
|
|
190
|
+
{
|
|
191
|
+
containerScope: {
|
|
192
|
+
containerName: containerStatus.name,
|
|
193
|
+
...podScope
|
|
194
|
+
}
|
|
195
|
+
}
|
|
102
196
|
),
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
total: containerMetrics.cpuUsage.requestTotal,
|
|
112
|
-
totalFormatted: formatMillicores(
|
|
113
|
-
containerMetrics.cpuUsage.requestTotal
|
|
114
|
-
)
|
|
115
|
-
}
|
|
116
|
-
), /* @__PURE__ */ React__default.createElement(
|
|
117
|
-
ResourceUtilization,
|
|
118
|
-
{
|
|
119
|
-
compressed: true,
|
|
120
|
-
title: "CPU limits",
|
|
121
|
-
usage: containerMetrics.cpuUsage.currentUsage,
|
|
122
|
-
total: containerMetrics.cpuUsage.limitTotal,
|
|
123
|
-
totalFormatted: formatMillicores(
|
|
124
|
-
containerMetrics.cpuUsage.limitTotal
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
), /* @__PURE__ */ React__default.createElement(
|
|
128
|
-
ResourceUtilization,
|
|
129
|
-
{
|
|
130
|
-
compressed: true,
|
|
131
|
-
title: "Memory requests",
|
|
132
|
-
usage: containerMetrics.memoryUsage.currentUsage,
|
|
133
|
-
total: containerMetrics.memoryUsage.requestTotal,
|
|
134
|
-
totalFormatted: bytesToMiB(
|
|
135
|
-
containerMetrics.memoryUsage.requestTotal
|
|
197
|
+
isPodExecTerminalEnabled && /* @__PURE__ */ jsx(
|
|
198
|
+
PodExecTerminalDialog,
|
|
199
|
+
{
|
|
200
|
+
cluster: podScope.cluster,
|
|
201
|
+
containerName: containerStatus.name,
|
|
202
|
+
podName: podScope.podName,
|
|
203
|
+
podNamespace: podScope.podNamespace
|
|
204
|
+
}
|
|
136
205
|
)
|
|
137
|
-
}
|
|
138
|
-
)
|
|
139
|
-
ResourceUtilization,
|
|
140
|
-
{
|
|
141
|
-
compressed: true,
|
|
142
|
-
title: "Memory limits",
|
|
143
|
-
usage: containerMetrics.memoryUsage.currentUsage,
|
|
144
|
-
total: containerMetrics.memoryUsage.limitTotal,
|
|
145
|
-
totalFormatted: bytesToMiB(
|
|
146
|
-
containerMetrics.memoryUsage.limitTotal
|
|
147
|
-
)
|
|
148
|
-
}
|
|
149
|
-
))))), /* @__PURE__ */ React__default.createElement(CardActions, null, /* @__PURE__ */ React__default.createElement(
|
|
150
|
-
PodLogsDialog,
|
|
151
|
-
{
|
|
152
|
-
containerScope: {
|
|
153
|
-
containerName: containerStatus.name,
|
|
154
|
-
...podScope
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
), isPodExecTerminalEnabled && /* @__PURE__ */ React__default.createElement(
|
|
158
|
-
PodExecTerminalDialog,
|
|
159
|
-
{
|
|
160
|
-
cluster: podScope.cluster,
|
|
161
|
-
containerName: containerStatus.name,
|
|
162
|
-
podName: podScope.podName,
|
|
163
|
-
podNamespace: podScope.podNamespace
|
|
164
|
-
}
|
|
165
|
-
)));
|
|
206
|
+
] })
|
|
207
|
+
] });
|
|
166
208
|
};
|
|
167
209
|
|
|
168
210
|
export { ContainerCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainerCard.esm.js","sources":["../../../../src/components/Pods/PodDrawer/ContainerCard.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 { StructuredMetadataTable } from '@backstage/core-components';\nimport { ClientContainerStatus } from '@backstage/plugin-kubernetes-common';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { IContainer, IContainerStatus } from 'kubernetes-models/v1';\nimport { DateTime } from 'luxon';\nimport React from 'react';\n\nimport { useIsPodExecTerminalEnabled } from '../../../hooks';\nimport { bytesToMiB, formatMillicores } from '../../../utils/resources';\nimport { PodExecTerminalDialog } from '../../PodExecTerminal/PodExecTerminalDialog';\nimport { ResourceUtilization } from '../../ResourceUtilization';\nimport { PodLogsDialog, PodScope } from '../PodLogs';\n\nconst getContainerHealthChecks = (\n containerSpec: IContainer,\n containerStatus: IContainerStatus,\n): { [key: string]: boolean } => {\n const healthCheck = {\n 'not waiting to start': containerStatus.state?.waiting === undefined,\n 'no restarts': containerStatus.restartCount === 0,\n };\n if (containerStatus.state?.terminated?.reason === 'Completed') {\n return healthCheck;\n }\n Object.assign(\n healthCheck,\n { started: !!containerStatus.started },\n { ready: containerStatus.ready },\n { 'readiness probe set': containerSpec?.readinessProbe !== undefined },\n );\n if (containerSpec && containerSpec?.livenessProbe !== undefined) {\n Object.assign(healthCheck, {\n 'liveness probe set': containerSpec.livenessProbe,\n });\n }\n return healthCheck;\n};\n\nconst getCurrentState = (containerStatus: IContainerStatus): string => {\n return (\n containerStatus.state?.waiting?.reason ||\n containerStatus.state?.terminated?.reason ||\n (containerStatus.state?.running !== undefined ? 'Running' : 'Unknown')\n );\n};\n\nconst getStartedAtTime = (\n containerStatus: IContainerStatus,\n): string | undefined => {\n return (\n containerStatus.state?.running?.startedAt ||\n containerStatus.state?.terminated?.startedAt\n );\n};\n\ninterface ContainerDatetimeProps {\n prefix: string;\n dateTime: string;\n}\n\nconst ContainerDatetime = ({ prefix, dateTime }: ContainerDatetimeProps) => {\n return (\n <Typography variant=\"subtitle2\">\n {prefix}:{' '}\n {DateTime.fromISO(dateTime).toRelative({\n locale: 'en',\n })}\n </Typography>\n );\n};\n\n/**\n * Props for ContainerCard\n *\n * @public\n */\nexport interface ContainerCardProps {\n podScope: PodScope;\n containerSpec?: IContainer;\n containerStatus: IContainerStatus;\n containerMetrics?: ClientContainerStatus;\n}\n\n/**\n * Shows details about a container within a pod\n *\n * @public\n */\nexport const ContainerCard: React.FC<ContainerCardProps> = ({\n podScope,\n containerSpec,\n containerStatus,\n containerMetrics,\n}: ContainerCardProps) => {\n const isPodExecTerminalEnabled = useIsPodExecTerminalEnabled();\n\n // This should never be undefined\n if (containerSpec === undefined) {\n return <Typography>error reading pod from cluster</Typography>;\n }\n const containerStartedTime = getStartedAtTime(containerStatus);\n const containerFinishedTime = containerStatus.state?.terminated?.finishedAt;\n\n return (\n <Card>\n <CardHeader\n title={containerStatus.name}\n subheader={containerStatus.image}\n />\n <CardContent>\n <Grid container>\n <Grid item xs={12}>\n {containerStartedTime && (\n <ContainerDatetime\n prefix=\"Started\"\n dateTime={containerStartedTime}\n />\n )}\n {containerFinishedTime && (\n <ContainerDatetime\n prefix=\"Completed\"\n dateTime={containerFinishedTime}\n />\n )}\n {containerStartedTime && containerFinishedTime && (\n <Typography variant=\"subtitle2\">\n Execution time:{' '}\n {DateTime.fromISO(containerFinishedTime)\n .diff(DateTime.fromISO(containerStartedTime), [\n 'hours',\n 'minutes',\n 'seconds',\n ])\n .toHuman()}\n </Typography>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">\n Status: {getCurrentState(containerStatus)}\n </Typography>\n </Grid>\n {containerStatus.restartCount > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">\n Restarts: {containerStatus.restartCount}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Container health</Typography>\n </Grid>\n <Grid item xs={12}>\n <StructuredMetadataTable\n metadata={getContainerHealthChecks(\n containerSpec,\n containerStatus,\n )}\n options={{ nestedValuesAsYaml: true }}\n />\n </Grid>\n {containerMetrics && (\n <Grid container item xs={12} spacing={0}>\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\">\n Resource utilization\n </Typography>\n </Grid>\n <Grid item xs={12} style={{ minHeight: '5rem' }}>\n <ResourceUtilization\n compressed\n title=\"CPU requests\"\n usage={containerMetrics.cpuUsage.currentUsage}\n total={containerMetrics.cpuUsage.requestTotal}\n totalFormatted={formatMillicores(\n containerMetrics.cpuUsage.requestTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"CPU limits\"\n usage={containerMetrics.cpuUsage.currentUsage}\n total={containerMetrics.cpuUsage.limitTotal}\n totalFormatted={formatMillicores(\n containerMetrics.cpuUsage.limitTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"Memory requests\"\n usage={containerMetrics.memoryUsage.currentUsage}\n total={containerMetrics.memoryUsage.requestTotal}\n totalFormatted={bytesToMiB(\n containerMetrics.memoryUsage.requestTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"Memory limits\"\n usage={containerMetrics.memoryUsage.currentUsage}\n total={containerMetrics.memoryUsage.limitTotal}\n totalFormatted={bytesToMiB(\n containerMetrics.memoryUsage.limitTotal,\n )}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n <CardActions>\n <PodLogsDialog\n containerScope={{\n containerName: containerStatus.name,\n ...podScope,\n }}\n />\n {isPodExecTerminalEnabled && (\n <PodExecTerminalDialog\n cluster={podScope.cluster}\n containerName={containerStatus.name}\n podName={podScope.podName}\n podNamespace={podScope.podNamespace}\n />\n )}\n </CardActions>\n </Card>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContainerCard.esm.js","sources":["../../../../src/components/Pods/PodDrawer/ContainerCard.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 { StructuredMetadataTable } from '@backstage/core-components';\nimport { ClientContainerStatus } from '@backstage/plugin-kubernetes-common';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { IContainer, IContainerStatus } from 'kubernetes-models/v1';\nimport { DateTime } from 'luxon';\nimport { FC } from 'react';\n\nimport { useIsPodExecTerminalEnabled } from '../../../hooks';\nimport { bytesToMiB, formatMillicores } from '../../../utils/resources';\nimport { PodExecTerminalDialog } from '../../PodExecTerminal/PodExecTerminalDialog';\nimport { ResourceUtilization } from '../../ResourceUtilization';\nimport { PodLogsDialog, PodScope } from '../PodLogs';\n\nconst getContainerHealthChecks = (\n containerSpec: IContainer,\n containerStatus: IContainerStatus,\n): { [key: string]: boolean } => {\n const healthCheck = {\n 'not waiting to start': containerStatus.state?.waiting === undefined,\n 'no restarts': containerStatus.restartCount === 0,\n };\n if (containerStatus.state?.terminated?.reason === 'Completed') {\n return healthCheck;\n }\n Object.assign(\n healthCheck,\n { started: !!containerStatus.started },\n { ready: containerStatus.ready },\n { 'readiness probe set': containerSpec?.readinessProbe !== undefined },\n );\n if (containerSpec && containerSpec?.livenessProbe !== undefined) {\n Object.assign(healthCheck, {\n 'liveness probe set': containerSpec.livenessProbe,\n });\n }\n return healthCheck;\n};\n\nconst getCurrentState = (containerStatus: IContainerStatus): string => {\n return (\n containerStatus.state?.waiting?.reason ||\n containerStatus.state?.terminated?.reason ||\n (containerStatus.state?.running !== undefined ? 'Running' : 'Unknown')\n );\n};\n\nconst getStartedAtTime = (\n containerStatus: IContainerStatus,\n): string | undefined => {\n return (\n containerStatus.state?.running?.startedAt ||\n containerStatus.state?.terminated?.startedAt\n );\n};\n\ninterface ContainerDatetimeProps {\n prefix: string;\n dateTime: string;\n}\n\nconst ContainerDatetime = ({ prefix, dateTime }: ContainerDatetimeProps) => {\n return (\n <Typography variant=\"subtitle2\">\n {prefix}:{' '}\n {DateTime.fromISO(dateTime).toRelative({\n locale: 'en',\n })}\n </Typography>\n );\n};\n\n/**\n * Props for ContainerCard\n *\n * @public\n */\nexport interface ContainerCardProps {\n podScope: PodScope;\n containerSpec?: IContainer;\n containerStatus: IContainerStatus;\n containerMetrics?: ClientContainerStatus;\n}\n\n/**\n * Shows details about a container within a pod\n *\n * @public\n */\nexport const ContainerCard: FC<ContainerCardProps> = ({\n podScope,\n containerSpec,\n containerStatus,\n containerMetrics,\n}: ContainerCardProps) => {\n const isPodExecTerminalEnabled = useIsPodExecTerminalEnabled();\n\n // This should never be undefined\n if (containerSpec === undefined) {\n return <Typography>error reading pod from cluster</Typography>;\n }\n const containerStartedTime = getStartedAtTime(containerStatus);\n const containerFinishedTime = containerStatus.state?.terminated?.finishedAt;\n\n return (\n <Card>\n <CardHeader\n title={containerStatus.name}\n subheader={containerStatus.image}\n />\n <CardContent>\n <Grid container>\n <Grid item xs={12}>\n {containerStartedTime && (\n <ContainerDatetime\n prefix=\"Started\"\n dateTime={containerStartedTime}\n />\n )}\n {containerFinishedTime && (\n <ContainerDatetime\n prefix=\"Completed\"\n dateTime={containerFinishedTime}\n />\n )}\n {containerStartedTime && containerFinishedTime && (\n <Typography variant=\"subtitle2\">\n Execution time:{' '}\n {DateTime.fromISO(containerFinishedTime)\n .diff(DateTime.fromISO(containerStartedTime), [\n 'hours',\n 'minutes',\n 'seconds',\n ])\n .toHuman()}\n </Typography>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">\n Status: {getCurrentState(containerStatus)}\n </Typography>\n </Grid>\n {containerStatus.restartCount > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">\n Restarts: {containerStatus.restartCount}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Container health</Typography>\n </Grid>\n <Grid item xs={12}>\n <StructuredMetadataTable\n metadata={getContainerHealthChecks(\n containerSpec,\n containerStatus,\n )}\n options={{ nestedValuesAsYaml: true }}\n />\n </Grid>\n {containerMetrics && (\n <Grid container item xs={12} spacing={0}>\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\">\n Resource utilization\n </Typography>\n </Grid>\n <Grid item xs={12} style={{ minHeight: '5rem' }}>\n <ResourceUtilization\n compressed\n title=\"CPU requests\"\n usage={containerMetrics.cpuUsage.currentUsage}\n total={containerMetrics.cpuUsage.requestTotal}\n totalFormatted={formatMillicores(\n containerMetrics.cpuUsage.requestTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"CPU limits\"\n usage={containerMetrics.cpuUsage.currentUsage}\n total={containerMetrics.cpuUsage.limitTotal}\n totalFormatted={formatMillicores(\n containerMetrics.cpuUsage.limitTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"Memory requests\"\n usage={containerMetrics.memoryUsage.currentUsage}\n total={containerMetrics.memoryUsage.requestTotal}\n totalFormatted={bytesToMiB(\n containerMetrics.memoryUsage.requestTotal,\n )}\n />\n <ResourceUtilization\n compressed\n title=\"Memory limits\"\n usage={containerMetrics.memoryUsage.currentUsage}\n total={containerMetrics.memoryUsage.limitTotal}\n totalFormatted={bytesToMiB(\n containerMetrics.memoryUsage.limitTotal,\n )}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n <CardActions>\n <PodLogsDialog\n containerScope={{\n containerName: containerStatus.name,\n ...podScope,\n }}\n />\n {isPodExecTerminalEnabled && (\n <PodExecTerminalDialog\n cluster={podScope.cluster}\n containerName={containerStatus.name}\n podName={podScope.podName}\n podNamespace={podScope.podNamespace}\n />\n )}\n </CardActions>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import Grid from '@material-ui/core/Grid';
|
|
3
3
|
import List from '@material-ui/core/List';
|
|
4
4
|
import ListItem from '@material-ui/core/ListItem';
|
|
@@ -7,13 +7,37 @@ import { StatusError, StatusOK, StatusWarning } from '@backstage/core-components
|
|
|
7
7
|
import { DateTime } from 'luxon';
|
|
8
8
|
|
|
9
9
|
const PodCondition = ({ condition }) => {
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
11
|
+
condition.status === "False" && /* @__PURE__ */ jsxs(StatusError, { children: [
|
|
12
|
+
condition.type,
|
|
13
|
+
" - (",
|
|
14
|
+
condition.reason,
|
|
15
|
+
" ",
|
|
16
|
+
condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
|
|
17
|
+
locale: "en"
|
|
18
|
+
}),
|
|
19
|
+
") - ",
|
|
20
|
+
condition.message,
|
|
21
|
+
" "
|
|
22
|
+
] }),
|
|
23
|
+
condition.status === "True" && /* @__PURE__ */ jsxs(StatusOK, { children: [
|
|
24
|
+
condition.type,
|
|
25
|
+
" - (",
|
|
26
|
+
condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
|
|
27
|
+
locale: "en"
|
|
28
|
+
}),
|
|
29
|
+
")"
|
|
30
|
+
] }),
|
|
31
|
+
condition.status === "Unknown" && /* @__PURE__ */ jsxs(StatusWarning, { children: [
|
|
32
|
+
condition.type,
|
|
33
|
+
" - (",
|
|
34
|
+
condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
|
|
35
|
+
locale: "en"
|
|
36
|
+
}),
|
|
37
|
+
") ",
|
|
38
|
+
condition.message
|
|
39
|
+
] })
|
|
40
|
+
] });
|
|
17
41
|
};
|
|
18
42
|
const PendingPodContent = ({ pod }) => {
|
|
19
43
|
const startupConditions = [
|
|
@@ -22,7 +46,10 @@ const PendingPodContent = ({ pod }) => {
|
|
|
22
46
|
pod.status?.conditions?.find((c) => c.type === "ContainersReady"),
|
|
23
47
|
pod.status?.conditions?.find((c) => c.type === "Ready")
|
|
24
48
|
].filter((c) => !!c);
|
|
25
|
-
return /* @__PURE__ */
|
|
49
|
+
return /* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, children: /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
|
|
50
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h5", children: "Pod is Pending. Conditions:" }),
|
|
51
|
+
/* @__PURE__ */ jsx(List, { children: startupConditions.map((c) => /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(PodCondition, { condition: c }) }, c.type)) })
|
|
52
|
+
] }) });
|
|
26
53
|
};
|
|
27
54
|
|
|
28
55
|
export { PendingPodContent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingPodContent.esm.js","sources":["../../../../src/components/Pods/PodDrawer/PendingPodContent.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
|
|
1
|
+
{"version":3,"file":"PendingPodContent.esm.js","sources":["../../../../src/components/Pods/PodDrawer/PendingPodContent.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 List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport Typography from '@material-ui/core/Typography';\nimport { IPodCondition, Pod } from 'kubernetes-models/v1';\nimport {\n StatusError,\n StatusOK,\n StatusWarning,\n} from '@backstage/core-components';\nimport { DateTime } from 'luxon';\n\ninterface PodConditionProps {\n condition: IPodCondition;\n}\n\nconst PodCondition = ({ condition }: PodConditionProps) => {\n return (\n <>\n {condition.status === 'False' && (\n <StatusError>\n {condition.type} - ({condition.reason}{' '}\n {condition.lastTransitionTime &&\n DateTime.fromISO(condition.lastTransitionTime).toRelative({\n locale: 'en',\n })}\n ) - {condition.message}{' '}\n </StatusError>\n )}\n {condition.status === 'True' && (\n <StatusOK>\n {condition.type} - (\n {condition.lastTransitionTime &&\n DateTime.fromISO(condition.lastTransitionTime).toRelative({\n locale: 'en',\n })}\n )\n </StatusOK>\n )}\n {condition.status === 'Unknown' && (\n <StatusWarning>\n {condition.type} - (\n {condition.lastTransitionTime &&\n DateTime.fromISO(condition.lastTransitionTime).toRelative({\n locale: 'en',\n })}\n ) {condition.message}\n </StatusWarning>\n )}\n </>\n );\n};\n\n/**\n * Props for PendingPodContent\n *\n * @public\n */\nexport interface PendingPodContentProps {\n pod: Pod;\n}\n\n/**\n * Shows details about pod's conditions as it starts\n *\n * @public\n */\nexport const PendingPodContent = ({ pod }: PendingPodContentProps) => {\n // TODO add PodHasNetwork when it's out of alpha\n // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions\n const startupConditions = [\n pod.status?.conditions?.find(c => c.type === 'PodScheduled'),\n pod.status?.conditions?.find(c => c.type === 'Initialized'),\n pod.status?.conditions?.find(c => c.type === 'ContainersReady'),\n pod.status?.conditions?.find(c => c.type === 'Ready'),\n ].filter((c): c is IPodCondition => !!c); // filter out undefined\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Typography variant=\"h5\">Pod is Pending. Conditions:</Typography>\n <List>\n {startupConditions.map(c => (\n <ListItem key={c.type}>\n <PodCondition condition={c} />\n </ListItem>\n ))}\n </List>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AA+BA,MAAM,YAAe,GAAA,CAAC,EAAE,SAAA,EAAmC,KAAA;AACzD,EAAA,uBAEK,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IAAU,SAAA,CAAA,MAAA,KAAW,OACpB,oBAAA,IAAA,CAAC,WACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAU,SAAA,CAAA,IAAA;AAAA,MAAK,MAAA;AAAA,MAAK,SAAU,CAAA,MAAA;AAAA,MAAQ,GAAA;AAAA,MACtC,UAAU,kBACT,IAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,kBAAkB,EAAE,UAAW,CAAA;AAAA,QACxD,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA,MAAE,MAAA;AAAA,MACA,SAAU,CAAA,OAAA;AAAA,MAAS;AAAA,KAC1B,EAAA,CAAA;AAAA,IAED,SAAU,CAAA,MAAA,KAAW,MACpB,oBAAA,IAAA,CAAC,QACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAU,SAAA,CAAA,IAAA;AAAA,MAAK,MAAA;AAAA,MACf,UAAU,kBACT,IAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,kBAAkB,EAAE,UAAW,CAAA;AAAA,QACxD,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA,MAAE;AAAA,KAEP,EAAA,CAAA;AAAA,IAED,SAAU,CAAA,MAAA,KAAW,SACpB,oBAAA,IAAA,CAAC,aACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAU,SAAA,CAAA,IAAA;AAAA,MAAK,MAAA;AAAA,MACf,UAAU,kBACT,IAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,kBAAkB,EAAE,UAAW,CAAA;AAAA,QACxD,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA,MAAE,IAAA;AAAA,MACF,SAAU,CAAA;AAAA,KACf,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ,CAAA;AAgBO,MAAM,iBAAoB,GAAA,CAAC,EAAE,GAAA,EAAkC,KAAA;AAGpE,EAAA,MAAM,iBAAoB,GAAA;AAAA,IACxB,IAAI,MAAQ,EAAA,UAAA,EAAY,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,cAAc,CAAA;AAAA,IAC3D,IAAI,MAAQ,EAAA,UAAA,EAAY,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,aAAa,CAAA;AAAA,IAC1D,IAAI,MAAQ,EAAA,UAAA,EAAY,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,iBAAiB,CAAA;AAAA,IAC9D,IAAI,MAAQ,EAAA,UAAA,EAAY,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,OAAO;AAAA,IACpD,MAAO,CAAA,CAAC,CAA0B,KAAA,CAAC,CAAC,CAAC,CAAA;AACvC,EACE,uBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,OAAA,EAAS,CACvB,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,IAAA,EAAK,QAA2B,EAAA,6BAAA,EAAA,CAAA;AAAA,oBACnD,GAAA,CAAA,IAAA,EAAA,EACE,QAAkB,EAAA,iBAAA,CAAA,GAAA,CAAI,uBACpB,GAAA,CAAA,QAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,YAAA,EAAA,EAAa,WAAW,CAAG,EAAA,CAAA,EAAA,EADf,CAAE,CAAA,IAEjB,CACD,CACH,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { ItemCardGrid } from '@backstage/core-components';
|
|
3
3
|
import Grid from '@material-ui/core/Grid';
|
|
4
4
|
import Typography from '@material-ui/core/Typography';
|
|
@@ -9,6 +9,7 @@ import { KubernetesDrawer } from '../../KubernetesDrawer/KubernetesDrawer.esm.js
|
|
|
9
9
|
import '@material-ui/core/FormControlLabel';
|
|
10
10
|
import '@material-ui/core/Switch';
|
|
11
11
|
import 'js-yaml';
|
|
12
|
+
import 'react';
|
|
12
13
|
import { PodDeleteButton } from '../PodDelete/PodDeleteButton.esm.js';
|
|
13
14
|
import { PendingPodContent } from './PendingPodContent.esm.js';
|
|
14
15
|
import { ErrorList } from '../ErrorList/ErrorList.esm.js';
|
|
@@ -55,78 +56,102 @@ const PodDrawer = ({ podAndErrors, open }) => {
|
|
|
55
56
|
const classes = useDrawerContentStyles();
|
|
56
57
|
const podMetrics = usePodMetrics(podAndErrors.cluster.name, podAndErrors.pod);
|
|
57
58
|
const isPodDeleteEnabled = useIsPodDeleteEnabled();
|
|
58
|
-
return /* @__PURE__ */
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
59
60
|
KubernetesDrawer,
|
|
60
61
|
{
|
|
61
62
|
open,
|
|
62
|
-
drawerContentsHeader: /* @__PURE__ */
|
|
63
|
+
drawerContentsHeader: /* @__PURE__ */ jsxs(Typography, { variant: "subtitle1", children: [
|
|
64
|
+
"Pod",
|
|
65
|
+
" ",
|
|
66
|
+
podAndErrors.pod.status?.podIP && `(${podAndErrors.pod.status?.podIP})`
|
|
67
|
+
] }),
|
|
63
68
|
kubernetesObject: podAndErrors.pod,
|
|
64
|
-
label: /* @__PURE__ */
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{
|
|
69
|
-
podScope: {
|
|
70
|
-
podName: podAndErrors.pod.metadata?.name ?? "unknown",
|
|
71
|
-
podNamespace: podAndErrors.pod.metadata?.namespace ?? "default",
|
|
72
|
-
cluster: podAndErrors.cluster
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
), podMetrics && /* @__PURE__ */ React__default.createElement(Grid, { container: true, item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5" }, "Resource utilization")), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
76
|
-
ResourceUtilization,
|
|
77
|
-
{
|
|
78
|
-
title: "CPU requests",
|
|
79
|
-
usage: podMetrics.cpu.currentUsage,
|
|
80
|
-
total: podMetrics.cpu.requestTotal,
|
|
81
|
-
totalFormatted: formatMillicores(podMetrics.cpu.requestTotal)
|
|
82
|
-
}
|
|
83
|
-
), /* @__PURE__ */ React__default.createElement(
|
|
84
|
-
ResourceUtilization,
|
|
85
|
-
{
|
|
86
|
-
title: "CPU limits",
|
|
87
|
-
usage: podMetrics.cpu.currentUsage,
|
|
88
|
-
total: podMetrics.cpu.limitTotal,
|
|
89
|
-
totalFormatted: formatMillicores(podMetrics.cpu.limitTotal)
|
|
90
|
-
}
|
|
91
|
-
)), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
92
|
-
ResourceUtilization,
|
|
93
|
-
{
|
|
94
|
-
title: "Memory requests",
|
|
95
|
-
usage: podMetrics.memory.currentUsage,
|
|
96
|
-
total: podMetrics.memory.requestTotal,
|
|
97
|
-
totalFormatted: bytesToMiB(podMetrics.memory.requestTotal)
|
|
98
|
-
}
|
|
99
|
-
), /* @__PURE__ */ React__default.createElement(
|
|
100
|
-
ResourceUtilization,
|
|
101
|
-
{
|
|
102
|
-
title: "Memory limits",
|
|
103
|
-
usage: podMetrics.memory.currentUsage,
|
|
104
|
-
total: podMetrics.memory.limitTotal,
|
|
105
|
-
totalFormatted: bytesToMiB(podMetrics.memory.limitTotal)
|
|
106
|
-
}
|
|
107
|
-
))), podAndErrors.pod.status?.phase === "Pending" && /* @__PURE__ */ React__default.createElement(PendingPodContent, { pod: podAndErrors.pod }), podAndErrors.pod.status?.containerStatuses?.length && /* @__PURE__ */ React__default.createElement(Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5" }, "Containers")), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(ItemCardGrid, null, podAndErrors.pod.status?.containerStatuses?.map(
|
|
108
|
-
(containerStatus, i) => {
|
|
109
|
-
const containerSpec = getContainerSpecByName(
|
|
110
|
-
podAndErrors.pod,
|
|
111
|
-
containerStatus.name
|
|
112
|
-
);
|
|
113
|
-
const containerMetrics = (podMetrics?.containers ?? []).find((c) => c.container === containerStatus.name);
|
|
114
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
115
|
-
ContainerCard,
|
|
69
|
+
label: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", children: podAndErrors.pod.metadata?.name ?? "unknown" }),
|
|
70
|
+
children: /* @__PURE__ */ jsxs("div", { className: classes.content, children: [
|
|
71
|
+
isPodDeleteEnabled && /* @__PURE__ */ jsx(
|
|
72
|
+
PodDeleteButton,
|
|
116
73
|
{
|
|
117
|
-
key: `container-card-${podAndErrors.pod.metadata?.name}-${i}`,
|
|
118
|
-
containerMetrics,
|
|
119
74
|
podScope: {
|
|
120
75
|
podName: podAndErrors.pod.metadata?.name ?? "unknown",
|
|
121
|
-
podNamespace: podAndErrors.pod.metadata?.namespace ?? "
|
|
76
|
+
podNamespace: podAndErrors.pod.metadata?.namespace ?? "default",
|
|
122
77
|
cluster: podAndErrors.cluster
|
|
123
|
-
}
|
|
124
|
-
containerSpec,
|
|
125
|
-
containerStatus
|
|
78
|
+
}
|
|
126
79
|
}
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
|
|
80
|
+
),
|
|
81
|
+
podMetrics && /* @__PURE__ */ jsxs(Grid, { container: true, item: true, xs: 12, children: [
|
|
82
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: "Resource utilization" }) }),
|
|
83
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 6, children: [
|
|
84
|
+
/* @__PURE__ */ jsx(
|
|
85
|
+
ResourceUtilization,
|
|
86
|
+
{
|
|
87
|
+
title: "CPU requests",
|
|
88
|
+
usage: podMetrics.cpu.currentUsage,
|
|
89
|
+
total: podMetrics.cpu.requestTotal,
|
|
90
|
+
totalFormatted: formatMillicores(podMetrics.cpu.requestTotal)
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsx(
|
|
94
|
+
ResourceUtilization,
|
|
95
|
+
{
|
|
96
|
+
title: "CPU limits",
|
|
97
|
+
usage: podMetrics.cpu.currentUsage,
|
|
98
|
+
total: podMetrics.cpu.limitTotal,
|
|
99
|
+
totalFormatted: formatMillicores(podMetrics.cpu.limitTotal)
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
] }),
|
|
103
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 6, children: [
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
ResourceUtilization,
|
|
106
|
+
{
|
|
107
|
+
title: "Memory requests",
|
|
108
|
+
usage: podMetrics.memory.currentUsage,
|
|
109
|
+
total: podMetrics.memory.requestTotal,
|
|
110
|
+
totalFormatted: bytesToMiB(podMetrics.memory.requestTotal)
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
/* @__PURE__ */ jsx(
|
|
114
|
+
ResourceUtilization,
|
|
115
|
+
{
|
|
116
|
+
title: "Memory limits",
|
|
117
|
+
usage: podMetrics.memory.currentUsage,
|
|
118
|
+
total: podMetrics.memory.limitTotal,
|
|
119
|
+
totalFormatted: bytesToMiB(podMetrics.memory.limitTotal)
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
] })
|
|
123
|
+
] }),
|
|
124
|
+
podAndErrors.pod.status?.phase === "Pending" && /* @__PURE__ */ jsx(PendingPodContent, { pod: podAndErrors.pod }),
|
|
125
|
+
podAndErrors.pod.status?.containerStatuses?.length && /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
|
|
126
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: "Containers" }) }),
|
|
127
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(ItemCardGrid, { children: podAndErrors.pod.status?.containerStatuses?.map(
|
|
128
|
+
(containerStatus, i) => {
|
|
129
|
+
const containerSpec = getContainerSpecByName(
|
|
130
|
+
podAndErrors.pod,
|
|
131
|
+
containerStatus.name
|
|
132
|
+
);
|
|
133
|
+
const containerMetrics = (podMetrics?.containers ?? []).find((c) => c.container === containerStatus.name);
|
|
134
|
+
return /* @__PURE__ */ jsx(
|
|
135
|
+
ContainerCard,
|
|
136
|
+
{
|
|
137
|
+
containerMetrics,
|
|
138
|
+
podScope: {
|
|
139
|
+
podName: podAndErrors.pod.metadata?.name ?? "unknown",
|
|
140
|
+
podNamespace: podAndErrors.pod.metadata?.namespace ?? "unknown",
|
|
141
|
+
cluster: podAndErrors.cluster
|
|
142
|
+
},
|
|
143
|
+
containerSpec,
|
|
144
|
+
containerStatus
|
|
145
|
+
},
|
|
146
|
+
`container-card-${podAndErrors.pod.metadata?.name}-${i}`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
) }) }),
|
|
150
|
+
podAndErrors.errors.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: "Errors" }) }),
|
|
151
|
+
podAndErrors.errors.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(ErrorList, { podAndErrors: [podAndErrors] }) })
|
|
152
|
+
] })
|
|
153
|
+
] })
|
|
154
|
+
}
|
|
130
155
|
);
|
|
131
156
|
};
|
|
132
157
|
|