@backstage/plugin-kubernetes-react 0.5.5 → 0.5.6-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/components/Cluster/Cluster.esm.js +64 -39
  3. package/dist/components/Cluster/Cluster.esm.js.map +1 -1
  4. package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js +44 -32
  5. package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js.map +1 -1
  6. package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js +20 -17
  7. package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -1
  8. package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js +149 -100
  9. package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -1
  10. package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js +20 -17
  11. package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -1
  12. package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js +8 -5
  13. package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js.map +1 -1
  14. package/dist/components/CustomResources/CustomResources.esm.js +8 -7
  15. package/dist/components/CustomResources/CustomResources.esm.js.map +1 -1
  16. package/dist/components/CustomResources/DefaultCustomResource.esm.js +41 -39
  17. package/dist/components/CustomResources/DefaultCustomResource.esm.js.map +1 -1
  18. package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js +19 -16
  19. package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -1
  20. package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js +59 -43
  21. package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -1
  22. package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js +19 -16
  23. package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -1
  24. package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js +19 -16
  25. package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -1
  26. package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js +102 -70
  27. package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -1
  28. package/dist/components/ErrorPanel/ErrorPanel.esm.js +21 -9
  29. package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -1
  30. package/dist/components/ErrorReporting/ErrorReporting.esm.js +7 -4
  31. package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -1
  32. package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js +6 -5
  33. package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -1
  34. package/dist/components/IngressesAccordions/IngressDrawer.esm.js +19 -16
  35. package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -1
  36. package/dist/components/IngressesAccordions/IngressesAccordions.esm.js +15 -11
  37. package/dist/components/IngressesAccordions/IngressesAccordions.esm.js.map +1 -1
  38. package/dist/components/JobsAccordions/JobsAccordions.esm.js +49 -31
  39. package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -1
  40. package/dist/components/JobsAccordions/JobsDrawer.esm.js +18 -15
  41. package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -1
  42. package/dist/components/KubernetesDialog/KubernetesDialog.esm.js +40 -31
  43. package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -1
  44. package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js +57 -42
  45. package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -1
  46. package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js +95 -75
  47. package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -1
  48. package/dist/components/KubernetesDrawer/ManifestYaml.esm.js +36 -32
  49. package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -1
  50. package/dist/components/PodExecTerminal/PodExecTerminal.esm.js +4 -3
  51. package/dist/components/PodExecTerminal/PodExecTerminal.esm.js.map +1 -1
  52. package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js +7 -6
  53. package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -1
  54. package/dist/components/Pods/ErrorList/ErrorList.esm.js +27 -21
  55. package/dist/components/Pods/ErrorList/ErrorList.esm.js.map +1 -1
  56. package/dist/components/Pods/Events/Events.esm.js +30 -23
  57. package/dist/components/Pods/Events/Events.esm.js.map +1 -1
  58. package/dist/components/Pods/FixDialog/FixDialog.esm.js +85 -51
  59. package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -1
  60. package/dist/components/Pods/PodDelete/PodDeleteButton.esm.js +25 -21
  61. package/dist/components/Pods/PodDelete/PodDeleteButton.esm.js.map +1 -1
  62. package/dist/components/Pods/PodDrawer/ContainerCard.esm.js +137 -95
  63. package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -1
  64. package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js +36 -9
  65. package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js.map +1 -1
  66. package/dist/components/Pods/PodDrawer/PodDrawer.esm.js +89 -64
  67. package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -1
  68. package/dist/components/Pods/PodLogs/PodLogs.esm.js +30 -25
  69. package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -1
  70. package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js +6 -6
  71. package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -1
  72. package/dist/components/Pods/PodsTable.esm.js +12 -11
  73. package/dist/components/Pods/PodsTable.esm.js.map +1 -1
  74. package/dist/components/ResourceUtilization/ResourceUtilization.esm.js +24 -15
  75. package/dist/components/ResourceUtilization/ResourceUtilization.esm.js.map +1 -1
  76. package/dist/components/ServicesAccordions/ServiceDrawer.esm.js +19 -16
  77. package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -1
  78. package/dist/components/ServicesAccordions/ServicesAccordions.esm.js +21 -12
  79. package/dist/components/ServicesAccordions/ServicesAccordions.esm.js.map +1 -1
  80. package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js +19 -16
  81. package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -1
  82. package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js +98 -66
  83. package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -1
  84. package/dist/hooks/Cluster.esm.js +2 -2
  85. package/dist/hooks/Cluster.esm.js.map +1 -1
  86. package/dist/hooks/GroupedResponses.esm.js +2 -2
  87. package/dist/hooks/GroupedResponses.esm.js.map +1 -1
  88. package/dist/hooks/PodNamesWithErrors.esm.js +2 -2
  89. package/dist/hooks/PodNamesWithErrors.esm.js.map +1 -1
  90. package/dist/hooks/PodNamesWithMetrics.esm.js +2 -2
  91. package/dist/hooks/PodNamesWithMetrics.esm.js.map +1 -1
  92. package/dist/hooks/useMatchingErrors.esm.js +2 -2
  93. package/dist/hooks/useMatchingErrors.esm.js.map +1 -1
  94. package/dist/hooks/usePodMetrics.esm.js +4 -2
  95. package/dist/hooks/usePodMetrics.esm.js.map +1 -1
  96. package/dist/index.d.ts +47 -46
  97. package/dist/utils/pod.esm.js +25 -15
  98. package/dist/utils/pod.esm.js.map +1 -1
  99. 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__ */ React__default.createElement(Typography, { variant: "subtitle2" }, prefix, ":", " ", DateTime.fromISO(dateTime).toRelative({
59
- locale: "en"
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__ */ React__default.createElement(Typography, null, "error reading pod from cluster");
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__ */ React__default.createElement(Card, null, /* @__PURE__ */ React__default.createElement(
75
- CardHeader,
76
- {
77
- title: containerStatus.name,
78
- subheader: containerStatus.image
79
- }
80
- ), /* @__PURE__ */ React__default.createElement(CardContent, null, /* @__PURE__ */ React__default.createElement(Grid, { container: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, containerStartedTime && /* @__PURE__ */ React__default.createElement(
81
- ContainerDatetime,
82
- {
83
- prefix: "Started",
84
- dateTime: containerStartedTime
85
- }
86
- ), containerFinishedTime && /* @__PURE__ */ React__default.createElement(
87
- ContainerDatetime,
88
- {
89
- prefix: "Completed",
90
- dateTime: containerFinishedTime
91
- }
92
- ), containerStartedTime && containerFinishedTime && /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "Execution time:", " ", DateTime.fromISO(containerFinishedTime).diff(DateTime.fromISO(containerStartedTime), [
93
- "hours",
94
- "minutes",
95
- "seconds"
96
- ]).toHuman())), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "Status: ", getCurrentState(containerStatus))), containerStatus.restartCount > 0 && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "Restarts: ", containerStatus.restartCount)), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "Container health")), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
97
- StructuredMetadataTable,
98
- {
99
- metadata: getContainerHealthChecks(
100
- containerSpec,
101
- containerStatus
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
- options: { nestedValuesAsYaml: true }
104
- }
105
- )), containerMetrics && /* @__PURE__ */ React__default.createElement(Grid, { container: true, item: true, xs: 12, spacing: 0 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle1" }, "Resource utilization")), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12, style: { minHeight: "5rem" } }, /* @__PURE__ */ React__default.createElement(
106
- ResourceUtilization,
107
- {
108
- compressed: true,
109
- title: "CPU requests",
110
- usage: containerMetrics.cpuUsage.currentUsage,
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
- ), /* @__PURE__ */ React__default.createElement(
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAM,wBAAA,GAA2B,CAC/B,aAAA,EACA,eAC+B,KAAA;AAC/B,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,sBAAA,EAAwB,eAAgB,CAAA,KAAA,EAAO,OAAY,KAAA,KAAA,CAAA;AAAA,IAC3D,aAAA,EAAe,gBAAgB,YAAiB,KAAA;AAAA,GAClD;AACA,EAAA,IAAI,eAAgB,CAAA,KAAA,EAAO,UAAY,EAAA,MAAA,KAAW,WAAa,EAAA;AAC7D,IAAO,OAAA,WAAA;AAAA;AAET,EAAO,MAAA,CAAA,MAAA;AAAA,IACL,WAAA;AAAA,IACA,EAAE,OAAA,EAAS,CAAC,CAAC,gBAAgB,OAAQ,EAAA;AAAA,IACrC,EAAE,KAAO,EAAA,eAAA,CAAgB,KAAM,EAAA;AAAA,IAC/B,EAAE,qBAAA,EAAuB,aAAe,EAAA,cAAA,KAAmB,KAAU,CAAA;AAAA,GACvE;AACA,EAAI,IAAA,aAAA,IAAiB,aAAe,EAAA,aAAA,KAAkB,KAAW,CAAA,EAAA;AAC/D,IAAA,MAAA,CAAO,OAAO,WAAa,EAAA;AAAA,MACzB,sBAAsB,aAAc,CAAA;AAAA,KACrC,CAAA;AAAA;AAEH,EAAO,OAAA,WAAA;AACT,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,eAA8C,KAAA;AACrE,EAAA,OACE,eAAgB,CAAA,KAAA,EAAO,OAAS,EAAA,MAAA,IAChC,eAAgB,CAAA,KAAA,EAAO,UAAY,EAAA,MAAA,KAClC,eAAgB,CAAA,KAAA,EAAO,OAAY,KAAA,KAAA,CAAA,GAAY,SAAY,GAAA,SAAA,CAAA;AAEhE,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,eACuB,KAAA;AACvB,EAAA,OACE,gBAAgB,KAAO,EAAA,OAAA,EAAS,SAChC,IAAA,eAAA,CAAgB,OAAO,UAAY,EAAA,SAAA;AAEvC,CAAA;AAOA,MAAM,iBAAoB,GAAA,CAAC,EAAE,MAAA,EAAQ,UAAuC,KAAA;AAC1E,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WACjB,EAAA,EAAA,MAAA,EAAO,GAAE,EAAA,GAAA,EACT,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,UAAW,CAAA;AAAA,IACrC,MAAQ,EAAA;AAAA,GACT,CACH,CAAA;AAEJ,CAAA;AAmBO,MAAM,gBAA8C,CAAC;AAAA,EAC1D,QAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAA0B,KAAA;AACxB,EAAA,MAAM,2BAA2B,2BAA4B,EAAA;AAG7D,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,kBAAW,gCAA8B,CAAA;AAAA;AAEnD,EAAM,MAAA,oBAAA,GAAuB,iBAAiB,eAAe,CAAA;AAC7D,EAAM,MAAA,qBAAA,GAAwB,eAAgB,CAAA,KAAA,EAAO,UAAY,EAAA,UAAA;AAEjE,EAAA,oDACG,IACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAO,eAAgB,CAAA,IAAA;AAAA,MACvB,WAAW,eAAgB,CAAA;AAAA;AAAA,GAE7B,kBAAAA,cAAA,CAAA,aAAA,CAAC,WACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,MACZ,oBACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA;AAAA;AAAA,KAGb,qBACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,WAAA;AAAA,MACP,QAAU,EAAA;AAAA;AAAA,KAGb,oBAAwB,IAAA,qBAAA,oBACtBA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,WAAY,EAAA,EAAA,iBAAA,EACd,GACf,EAAA,QAAA,CAAS,QAAQ,qBAAqB,CAAA,CACpC,KAAK,QAAS,CAAA,OAAA,CAAQ,oBAAoB,CAAG,EAAA;AAAA,IAC5C,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CACA,CAAA,OAAA,EACL,CAEJ,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,EAAA,UAAA,EACrB,eAAgB,CAAA,eAAe,CAC1C,CACF,CACC,EAAA,eAAA,CAAgB,YAAe,GAAA,CAAA,oBAC7BA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,EAAA,YAAA,EACnB,eAAgB,CAAA,YAC7B,CACF,CAAA,kBAEDA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,WAAA,EAAA,EAAY,kBAAgB,CAClD,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,wBAAA;AAAA,QACR,aAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAS,EAAE,kBAAA,EAAoB,IAAK;AAAA;AAAA,GAExC,CACC,EAAA,gBAAA,oBACEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IAAC,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,IAAI,OAAS,EAAA,CAAA,EAAA,kBACnCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,WAAA,EAAA,EAAY,sBAEhC,CACF,mBACCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EAAI,EAAA,KAAA,EAAO,EAAE,SAAA,EAAW,QACrC,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,UAAU,EAAA,IAAA;AAAA,MACV,KAAM,EAAA,cAAA;AAAA,MACN,KAAA,EAAO,iBAAiB,QAAS,CAAA,YAAA;AAAA,MACjC,KAAA,EAAO,iBAAiB,QAAS,CAAA,YAAA;AAAA,MACjC,cAAgB,EAAA,gBAAA;AAAA,QACd,iBAAiB,QAAS,CAAA;AAAA;AAC5B;AAAA,GAEF,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,UAAU,EAAA,IAAA;AAAA,MACV,KAAM,EAAA,YAAA;AAAA,MACN,KAAA,EAAO,iBAAiB,QAAS,CAAA,YAAA;AAAA,MACjC,KAAA,EAAO,iBAAiB,QAAS,CAAA,UAAA;AAAA,MACjC,cAAgB,EAAA,gBAAA;AAAA,QACd,iBAAiB,QAAS,CAAA;AAAA;AAC5B;AAAA,GAEF,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,UAAU,EAAA,IAAA;AAAA,MACV,KAAM,EAAA,iBAAA;AAAA,MACN,KAAA,EAAO,iBAAiB,WAAY,CAAA,YAAA;AAAA,MACpC,KAAA,EAAO,iBAAiB,WAAY,CAAA,YAAA;AAAA,MACpC,cAAgB,EAAA,UAAA;AAAA,QACd,iBAAiB,WAAY,CAAA;AAAA;AAC/B;AAAA,GAEF,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,UAAU,EAAA,IAAA;AAAA,MACV,KAAM,EAAA,eAAA;AAAA,MACN,KAAA,EAAO,iBAAiB,WAAY,CAAA,YAAA;AAAA,MACpC,KAAA,EAAO,iBAAiB,WAAY,CAAA,UAAA;AAAA,MACpC,cAAgB,EAAA,UAAA;AAAA,QACd,iBAAiB,WAAY,CAAA;AAAA;AAC/B;AAAA,GAEJ,CACF,CAEJ,CACF,CAAA,+CACC,WACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,cAAgB,EAAA;AAAA,QACd,eAAe,eAAgB,CAAA,IAAA;AAAA,QAC/B,GAAG;AAAA;AACL;AAAA,KAED,wBACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,eAAe,eAAgB,CAAA,IAAA;AAAA,MAC/B,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,cAAc,QAAS,CAAA;AAAA;AAAA,GAG7B,CACF,CAAA;AAEJ;;;;"}
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 React__default from 'react';
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__ */ React__default.createElement(React__default.Fragment, null, condition.status === "False" && /* @__PURE__ */ React__default.createElement(StatusError, null, condition.type, " - (", condition.reason, " ", condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
11
- locale: "en"
12
- }), ") - ", condition.message, " "), condition.status === "True" && /* @__PURE__ */ React__default.createElement(StatusOK, null, condition.type, " - (", condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
13
- locale: "en"
14
- }), ")"), condition.status === "Unknown" && /* @__PURE__ */ React__default.createElement(StatusWarning, null, condition.type, " - (", condition.lastTransitionTime && DateTime.fromISO(condition.lastTransitionTime).toRelative({
15
- locale: "en"
16
- }), ") ", condition.message));
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__ */ React__default.createElement(Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5" }, "Pod is Pending. Conditions:"), /* @__PURE__ */ React__default.createElement(List, null, startupConditions.map((c) => /* @__PURE__ */ React__default.createElement(ListItem, { key: c.type }, /* @__PURE__ */ React__default.createElement(PodCondition, { condition: c }))))));
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 React from 'react';\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":["React"],"mappings":";;;;;;;;AAgCA,MAAM,YAAe,GAAA,CAAC,EAAE,SAAA,EAAmC,KAAA;AACzD,EAAA,mFAEK,SAAU,CAAA,MAAA,KAAW,2BACnBA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAA,EACE,UAAU,IAAK,EAAA,MAAA,EAAK,UAAU,MAAQ,EAAA,GAAA,EACtC,UAAU,kBACT,IAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,kBAAkB,EAAE,UAAW,CAAA;AAAA,IACxD,MAAQ,EAAA;AAAA,GACT,GAAE,MACA,EAAA,SAAA,CAAU,SAAS,GAC1B,CAAA,EAED,SAAU,CAAA,MAAA,KAAW,MACpB,oBAAAA,cAAA,CAAA,aAAA,CAAC,gBACE,SAAU,CAAA,IAAA,EAAK,QACf,SAAU,CAAA,kBAAA,IACT,SAAS,OAAQ,CAAA,SAAA,CAAU,kBAAkB,CAAA,CAAE,UAAW,CAAA;AAAA,IACxD,MAAQ,EAAA;AAAA,GACT,CAAE,EAAA,GAEP,GAED,SAAU,CAAA,MAAA,KAAW,6BACnBA,cAAA,CAAA,aAAA,CAAA,aAAA,EAAA,IAAA,EACE,UAAU,IAAK,EAAA,MAAA,EACf,UAAU,kBACT,IAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,kBAAkB,EAAE,UAAW,CAAA;AAAA,IACxD,MAAQ,EAAA;AAAA,GACT,CAAA,EAAE,IACF,EAAA,SAAA,CAAU,OACf,CAEJ,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,EAAA,oDACG,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,OAAA,EAAS,qBACtBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,QAAK,6BAA2B,CAAA,kBACnDA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,EACE,kBAAkB,GAAI,CAAA,CAAA,CAAA,qBACpBA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,KAAK,CAAE,CAAA,IAAA,EAAA,kBACdA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,WAAW,CAAG,EAAA,CAC9B,CACD,CACH,CACF,CACF,CAAA;AAEJ;;;;"}
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 React__default from 'react';
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__ */ React__default.createElement(
59
+ return /* @__PURE__ */ jsx(
59
60
  KubernetesDrawer,
60
61
  {
61
62
  open,
62
- drawerContentsHeader: /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle1" }, "Pod", " ", podAndErrors.pod.status?.podIP && `(${podAndErrors.pod.status?.podIP})`),
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__ */ React__default.createElement(Typography, { variant: "subtitle1" }, podAndErrors.pod.metadata?.name ?? "unknown")
65
- },
66
- /* @__PURE__ */ React__default.createElement("div", { className: classes.content }, isPodDeleteEnabled && /* @__PURE__ */ React__default.createElement(
67
- PodDeleteButton,
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 ?? "unknown",
76
+ podNamespace: podAndErrors.pod.metadata?.namespace ?? "default",
122
77
  cluster: podAndErrors.cluster
123
- },
124
- containerSpec,
125
- containerStatus
78
+ }
126
79
  }
127
- );
128
- }
129
- ))), podAndErrors.errors.length > 0 && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5" }, "Errors")), podAndErrors.errors.length > 0 && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(ErrorList, { podAndErrors: [podAndErrors] }))))
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