@backstage/plugin-kubernetes-react 0.3.4-next.1 → 0.3.5-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/api/KubernetesBackendClient.esm.js +137 -0
- package/dist/api/KubernetesBackendClient.esm.js.map +1 -0
- package/dist/api/KubernetesClusterLinkFormatter.esm.js +38 -0
- package/dist/api/KubernetesClusterLinkFormatter.esm.js.map +1 -0
- package/dist/api/KubernetesProxyClient.esm.js +76 -0
- package/dist/api/KubernetesProxyClient.esm.js.map +1 -0
- package/dist/api/formatters/AksClusterLinksFormatter.esm.js +35 -0
- package/dist/api/formatters/AksClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/EksClusterLinksFormatter.esm.js +10 -0
- package/dist/api/formatters/EksClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/GkeClusterLinksFormatter.esm.js +62 -0
- package/dist/api/formatters/GkeClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/OpenshiftClusterLinksFormatter.esm.js +41 -0
- package/dist/api/formatters/OpenshiftClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/RancherClusterLinksFormatter.esm.js +33 -0
- package/dist/api/formatters/RancherClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/StandardClusterLinksFormatter.esm.js +37 -0
- package/dist/api/formatters/StandardClusterLinksFormatter.esm.js.map +1 -0
- package/dist/api/formatters/index.esm.js +21 -0
- package/dist/api/formatters/index.esm.js.map +1 -0
- package/dist/api/types.esm.js +14 -0
- package/dist/api/types.esm.js.map +1 -0
- package/dist/components/Cluster/Cluster.esm.js +88 -0
- package/dist/components/Cluster/Cluster.esm.js.map +1 -0
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js +80 -0
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js.map +1 -0
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js +51 -0
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js +222 -0
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js +40 -0
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -0
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js +32 -0
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js.map +1 -0
- package/dist/components/CustomResources/CustomResources.esm.js +44 -0
- package/dist/components/CustomResources/CustomResources.esm.js.map +1 -0
- package/dist/components/CustomResources/DefaultCustomResource.esm.js +79 -0
- package/dist/components/CustomResources/DefaultCustomResource.esm.js.map +1 -0
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js +43 -0
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js +126 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js +55 -0
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -0
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js +56 -0
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -0
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js +160 -0
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -0
- package/dist/components/ErrorPanel/ErrorPanel.esm.js +27 -0
- package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -0
- package/dist/components/ErrorReporting/ErrorReporting.esm.js +63 -0
- package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -0
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js +34 -0
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -0
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js +42 -0
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -0
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js +62 -0
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js.map +1 -0
- package/dist/components/JobsAccordions/JobsAccordions.esm.js +101 -0
- package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -0
- package/dist/components/JobsAccordions/JobsDrawer.esm.js +48 -0
- package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js +72 -0
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js +117 -0
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js +199 -0
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -0
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js +44 -0
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js +88 -0
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminalAttachAddon.esm.js +40 -0
- package/dist/components/PodExecTerminal/PodExecTerminalAttachAddon.esm.js.map +1 -0
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js +35 -0
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -0
- package/dist/components/Pods/ErrorList/ErrorList.esm.js +52 -0
- package/dist/components/Pods/ErrorList/ErrorList.esm.js.map +1 -0
- package/dist/components/Pods/Events/Events.esm.js +74 -0
- package/dist/components/Pods/Events/Events.esm.js.map +1 -0
- package/dist/components/Pods/Events/useEvents.esm.js +21 -0
- package/dist/components/Pods/Events/useEvents.esm.js.map +1 -0
- package/dist/components/Pods/FixDialog/FixDialog.esm.js +107 -0
- package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js +166 -0
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js +30 -0
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js.map +1 -0
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js +114 -0
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/PodLogs.esm.js +44 -0
- package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js +21 -0
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -0
- package/dist/components/Pods/PodLogs/usePodLogs.esm.js +19 -0
- package/dist/components/Pods/PodLogs/usePodLogs.esm.js.map +1 -0
- package/dist/components/Pods/PodsTable.esm.js +153 -0
- package/dist/components/Pods/PodsTable.esm.js.map +1 -0
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js +50 -0
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js.map +1 -0
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js +42 -0
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -0
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js +79 -0
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js.map +1 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js +58 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js +156 -0
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -0
- package/dist/hooks/Cluster.esm.js +8 -0
- package/dist/hooks/Cluster.esm.js.map +1 -0
- package/dist/hooks/GroupedResponses.esm.js +19 -0
- package/dist/hooks/GroupedResponses.esm.js.map +1 -0
- package/dist/hooks/PodNamesWithErrors.esm.js +8 -0
- package/dist/hooks/PodNamesWithErrors.esm.js.map +1 -0
- package/dist/hooks/PodNamesWithMetrics.esm.js +6 -0
- package/dist/hooks/PodNamesWithMetrics.esm.js.map +1 -0
- package/dist/hooks/auth.esm.js +24 -0
- package/dist/hooks/auth.esm.js.map +1 -0
- package/dist/hooks/useCustomResources.esm.js +42 -0
- package/dist/hooks/useCustomResources.esm.js.map +1 -0
- package/dist/hooks/useIsPodExecTerminalEnabled.esm.js +9 -0
- package/dist/hooks/useIsPodExecTerminalEnabled.esm.js.map +1 -0
- package/dist/hooks/useIsPodExecTerminalSupported.esm.js +21 -0
- package/dist/hooks/useIsPodExecTerminalSupported.esm.js.map +1 -0
- package/dist/hooks/useKubernetesObjects.esm.js +36 -0
- package/dist/hooks/useKubernetesObjects.esm.js.map +1 -0
- package/dist/hooks/useMatchingErrors.esm.js +20 -0
- package/dist/hooks/useMatchingErrors.esm.js.map +1 -0
- package/dist/hooks/usePodMetrics.esm.js +20 -0
- package/dist/hooks/usePodMetrics.esm.js.map +1 -0
- package/dist/index.esm.js +53 -3441
- package/dist/index.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/AksKubernetesAuthProvider.esm.js +21 -0
- package/dist/kubernetes-auth-provider/AksKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/GoogleKubernetesAuthProvider.esm.js +31 -0
- package/dist/kubernetes-auth-provider/GoogleKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/KubernetesAuthProviders.esm.js +89 -0
- package/dist/kubernetes-auth-provider/KubernetesAuthProviders.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/OidcKubernetesAuthProvider.esm.js +33 -0
- package/dist/kubernetes-auth-provider/OidcKubernetesAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/ServerSideAuthProvider.esm.js +11 -0
- package/dist/kubernetes-auth-provider/ServerSideAuthProvider.esm.js.map +1 -0
- package/dist/kubernetes-auth-provider/types.esm.js +8 -0
- package/dist/kubernetes-auth-provider/types.esm.js.map +1 -0
- package/dist/utils/crons.esm.js +22 -0
- package/dist/utils/crons.esm.js.map +1 -0
- package/dist/utils/owner.esm.js +30 -0
- package/dist/utils/owner.esm.js.map +1 -0
- package/dist/utils/pod.esm.js +120 -0
- package/dist/utils/pod.esm.js.map +1 -0
- package/dist/utils/resources.esm.js +19 -0
- package/dist/utils/resources.esm.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import Accordion from '@material-ui/core/Accordion';
|
|
3
|
+
import AccordionDetails from '@material-ui/core/AccordionDetails';
|
|
4
|
+
import AccordionSummary from '@material-ui/core/AccordionSummary';
|
|
5
|
+
import Grid from '@material-ui/core/Grid';
|
|
6
|
+
import Typography from '@material-ui/core/Typography';
|
|
7
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
8
|
+
import '../Pods/PodDrawer/PodDrawer.esm.js';
|
|
9
|
+
import { StatusOK, StatusError } from '@backstage/core-components';
|
|
10
|
+
import '@material-ui/core/Card';
|
|
11
|
+
import '@material-ui/core/CardActions';
|
|
12
|
+
import '@material-ui/core/CardContent';
|
|
13
|
+
import '@material-ui/core/CardHeader';
|
|
14
|
+
import 'luxon';
|
|
15
|
+
import '@backstage/core-plugin-api';
|
|
16
|
+
import 'react-use/esm/useAsync';
|
|
17
|
+
import '../../api/types.esm.js';
|
|
18
|
+
import 'react-use/esm/useInterval';
|
|
19
|
+
import 'react-use/esm/useAsyncRetry';
|
|
20
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
21
|
+
import { PodNamesWithErrorsContext } from '../../hooks/PodNamesWithErrors.esm.js';
|
|
22
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
23
|
+
import { GroupedResponsesContext } from '../../hooks/GroupedResponses.esm.js';
|
|
24
|
+
import '../../hooks/Cluster.esm.js';
|
|
25
|
+
import '../../hooks/usePodMetrics.esm.js';
|
|
26
|
+
import '../../hooks/useMatchingErrors.esm.js';
|
|
27
|
+
import '@material-ui/icons/OpenInBrowser';
|
|
28
|
+
import '../KubernetesDialog/KubernetesDialog.esm.js';
|
|
29
|
+
import '../PodExecTerminal/PodExecTerminal.esm.js';
|
|
30
|
+
import '@material-ui/core/Paper';
|
|
31
|
+
import '@material-ui/lab/Skeleton';
|
|
32
|
+
import '@material-ui/icons/Subject';
|
|
33
|
+
import '@material-ui/core/List';
|
|
34
|
+
import '@material-ui/core/ListItem';
|
|
35
|
+
import '../Pods/FixDialog/FixDialog.esm.js';
|
|
36
|
+
import '@material-ui/core/Avatar';
|
|
37
|
+
import '@material-ui/core/Container';
|
|
38
|
+
import '@material-ui/core/ListItemAvatar';
|
|
39
|
+
import '@material-ui/core/ListItemText';
|
|
40
|
+
import '@material-ui/core/Tooltip';
|
|
41
|
+
import '@material-ui/icons/Info';
|
|
42
|
+
import '@material-ui/icons/Warning';
|
|
43
|
+
import '../Pods/ErrorList/ErrorList.esm.js';
|
|
44
|
+
import { PodsTable, READY_COLUMNS, RESOURCE_COLUMNS } from '../Pods/PodsTable.esm.js';
|
|
45
|
+
import { DeploymentDrawer } from './DeploymentDrawer.esm.js';
|
|
46
|
+
import { HorizontalPodAutoscalerDrawer } from '../HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js';
|
|
47
|
+
import { getMatchingHpa, getOwnedPodsThroughReplicaSets } from '../../utils/owner.esm.js';
|
|
48
|
+
|
|
49
|
+
const DeploymentSummary = ({
|
|
50
|
+
deployment,
|
|
51
|
+
numberOfCurrentPods,
|
|
52
|
+
numberOfPodsWithErrors,
|
|
53
|
+
hpa
|
|
54
|
+
}) => {
|
|
55
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
56
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
57
|
+
Grid,
|
|
58
|
+
{
|
|
59
|
+
container: true,
|
|
60
|
+
direction: "row",
|
|
61
|
+
justifyContent: "space-between",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
spacing: 0
|
|
64
|
+
},
|
|
65
|
+
/* @__PURE__ */ React__default.createElement(Grid, { xs: 4, item: true }, /* @__PURE__ */ React__default.createElement(DeploymentDrawer, { deployment })),
|
|
66
|
+
hpa && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 4 }, /* @__PURE__ */ React__default.createElement(HorizontalPodAutoscalerDrawer, { hpa }, /* @__PURE__ */ React__default.createElement(
|
|
67
|
+
Grid,
|
|
68
|
+
{
|
|
69
|
+
item: true,
|
|
70
|
+
container: true,
|
|
71
|
+
direction: "column",
|
|
72
|
+
justifyContent: "flex-start",
|
|
73
|
+
alignItems: "flex-start",
|
|
74
|
+
spacing: 0
|
|
75
|
+
},
|
|
76
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "min replicas ", (_b = (_a = hpa.spec) == null ? void 0 : _a.minReplicas) != null ? _b : "?", " / max replicas", " ", (_d = (_c = hpa.spec) == null ? void 0 : _c.maxReplicas) != null ? _d : "?")),
|
|
77
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "current CPU usage:", " ", (_f = (_e = hpa.status) == null ? void 0 : _e.currentCPUUtilizationPercentage) != null ? _f : "?", "%")),
|
|
78
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle2" }, "target CPU usage:", " ", (_h = (_g = hpa.spec) == null ? void 0 : _g.targetCPUUtilizationPercentage) != null ? _h : "?", "%"))
|
|
79
|
+
))),
|
|
80
|
+
/* @__PURE__ */ React__default.createElement(
|
|
81
|
+
Grid,
|
|
82
|
+
{
|
|
83
|
+
item: true,
|
|
84
|
+
container: true,
|
|
85
|
+
xs: 4,
|
|
86
|
+
direction: "column",
|
|
87
|
+
justifyContent: "flex-start",
|
|
88
|
+
alignItems: "flex-end",
|
|
89
|
+
spacing: 0
|
|
90
|
+
},
|
|
91
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(StatusOK, null, numberOfCurrentPods, " pods")),
|
|
92
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, numberOfPodsWithErrors > 0 ? /* @__PURE__ */ React__default.createElement(StatusError, null, numberOfPodsWithErrors, " pod", numberOfPodsWithErrors > 1 ? "s" : "", " with errors") : /* @__PURE__ */ React__default.createElement(StatusOK, null, "No pods with errors"))
|
|
93
|
+
)
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
const DeploymentAccordion = ({
|
|
97
|
+
deployment,
|
|
98
|
+
ownedPods,
|
|
99
|
+
matchingHpa
|
|
100
|
+
}) => {
|
|
101
|
+
const podNamesWithErrors = useContext(PodNamesWithErrorsContext);
|
|
102
|
+
const podsWithErrors = ownedPods.filter(
|
|
103
|
+
(p) => {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
return podNamesWithErrors.has((_b = (_a = p.metadata) == null ? void 0 : _a.name) != null ? _b : "");
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
return /* @__PURE__ */ React__default.createElement(Accordion, { TransitionProps: { unmountOnExit: true }, variant: "outlined" }, /* @__PURE__ */ React__default.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React__default.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React__default.createElement(
|
|
109
|
+
DeploymentSummary,
|
|
110
|
+
{
|
|
111
|
+
deployment,
|
|
112
|
+
numberOfCurrentPods: ownedPods.length,
|
|
113
|
+
numberOfPodsWithErrors: podsWithErrors.length,
|
|
114
|
+
hpa: matchingHpa
|
|
115
|
+
}
|
|
116
|
+
)), /* @__PURE__ */ React__default.createElement(AccordionDetails, null, /* @__PURE__ */ React__default.createElement(
|
|
117
|
+
PodsTable,
|
|
118
|
+
{
|
|
119
|
+
pods: ownedPods,
|
|
120
|
+
extraColumns: [READY_COLUMNS, RESOURCE_COLUMNS]
|
|
121
|
+
}
|
|
122
|
+
)));
|
|
123
|
+
};
|
|
124
|
+
const DeploymentsAccordions = ({}) => {
|
|
125
|
+
const groupedResponses = useContext(GroupedResponsesContext);
|
|
126
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
127
|
+
Grid,
|
|
128
|
+
{
|
|
129
|
+
container: true,
|
|
130
|
+
direction: "column",
|
|
131
|
+
justifyContent: "flex-start",
|
|
132
|
+
alignItems: "flex-start"
|
|
133
|
+
},
|
|
134
|
+
groupedResponses.deployments.map((deployment, i) => {
|
|
135
|
+
var _a, _b;
|
|
136
|
+
return /* @__PURE__ */ React__default.createElement(Grid, { container: true, item: true, key: i, xs: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: true }, /* @__PURE__ */ React__default.createElement(
|
|
137
|
+
DeploymentAccordion,
|
|
138
|
+
{
|
|
139
|
+
matchingHpa: getMatchingHpa(
|
|
140
|
+
{
|
|
141
|
+
name: (_a = deployment.metadata) == null ? void 0 : _a.name,
|
|
142
|
+
namespace: (_b = deployment.metadata) == null ? void 0 : _b.namespace,
|
|
143
|
+
kind: "deployment"
|
|
144
|
+
},
|
|
145
|
+
groupedResponses.horizontalPodAutoscalers
|
|
146
|
+
),
|
|
147
|
+
ownedPods: getOwnedPodsThroughReplicaSets(
|
|
148
|
+
deployment,
|
|
149
|
+
groupedResponses.replicaSets,
|
|
150
|
+
groupedResponses.pods
|
|
151
|
+
),
|
|
152
|
+
deployment
|
|
153
|
+
}
|
|
154
|
+
)));
|
|
155
|
+
})
|
|
156
|
+
);
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
export { DeploymentsAccordions };
|
|
160
|
+
//# sourceMappingURL=DeploymentsAccordions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeploymentsAccordions.esm.js","sources":["../../../src/components/DeploymentsAccordions/DeploymentsAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {\n V1Deployment,\n V1Pod,\n V1HorizontalPodAutoscaler,\n} from '@kubernetes/client-node';\nimport { PodsTable } from '../Pods';\nimport { DeploymentDrawer } from './DeploymentDrawer';\nimport { HorizontalPodAutoscalerDrawer } from '../HorizontalPodAutoscalers';\nimport {\n getOwnedPodsThroughReplicaSets,\n getMatchingHpa,\n} from '../../utils/owner';\nimport {\n GroupedResponsesContext,\n PodNamesWithErrorsContext,\n} from '../../hooks';\nimport { StatusError, StatusOK } from '@backstage/core-components';\nimport { READY_COLUMNS, RESOURCE_COLUMNS } from '../Pods/PodsTable';\n\ntype DeploymentsAccordionsProps = {\n children?: React.ReactNode;\n};\n\ntype DeploymentAccordionProps = {\n deployment: V1Deployment;\n ownedPods: V1Pod[];\n matchingHpa?: V1HorizontalPodAutoscaler;\n children?: React.ReactNode;\n};\n\ntype DeploymentSummaryProps = {\n deployment: V1Deployment;\n numberOfCurrentPods: number;\n numberOfPodsWithErrors: number;\n hpa?: V1HorizontalPodAutoscaler;\n children?: React.ReactNode;\n};\n\nconst DeploymentSummary = ({\n deployment,\n numberOfCurrentPods,\n numberOfPodsWithErrors,\n hpa,\n}: DeploymentSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={4} item>\n <DeploymentDrawer deployment={deployment} />\n </Grid>\n {hpa && (\n <Grid item xs={4}>\n <HorizontalPodAutoscalerDrawer hpa={hpa}>\n <Grid\n item\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"subtitle2\">\n min replicas {hpa.spec?.minReplicas ?? '?'} / max replicas{' '}\n {hpa.spec?.maxReplicas ?? '?'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n current CPU usage:{' '}\n {hpa.status?.currentCPUUtilizationPercentage ?? '?'}%\n </Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n target CPU usage:{' '}\n {hpa.spec?.targetCPUUtilizationPercentage ?? '?'}%\n </Typography>\n </Grid>\n </Grid>\n </HorizontalPodAutoscalerDrawer>\n </Grid>\n )}\n <Grid\n item\n container\n xs={4}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfCurrentPods} pods</StatusOK>\n </Grid>\n <Grid item>\n {numberOfPodsWithErrors > 0 ? (\n <StatusError>\n {numberOfPodsWithErrors} pod\n {numberOfPodsWithErrors > 1 ? 's' : ''} with errors\n </StatusError>\n ) : (\n <StatusOK>No pods with errors</StatusOK>\n )}\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst DeploymentAccordion = ({\n deployment,\n ownedPods,\n matchingHpa,\n}: DeploymentAccordionProps) => {\n const podNamesWithErrors = useContext(PodNamesWithErrorsContext);\n\n const podsWithErrors = ownedPods.filter(p =>\n podNamesWithErrors.has(p.metadata?.name ?? ''),\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <DeploymentSummary\n deployment={deployment}\n numberOfCurrentPods={ownedPods.length}\n numberOfPodsWithErrors={podsWithErrors.length}\n hpa={matchingHpa}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PodsTable\n pods={ownedPods}\n extraColumns={[READY_COLUMNS, RESOURCE_COLUMNS]}\n />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const DeploymentsAccordions = ({}: DeploymentsAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n\n return (\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {groupedResponses.deployments.map((deployment, i) => (\n <Grid container item key={i} xs>\n <Grid item xs>\n <DeploymentAccordion\n matchingHpa={getMatchingHpa(\n {\n name: deployment.metadata?.name,\n namespace: deployment.metadata?.namespace,\n kind: 'deployment',\n },\n groupedResponses.horizontalPodAutoscalers,\n )}\n ownedPods={getOwnedPodsThroughReplicaSets(\n deployment,\n groupedResponses.replicaSets,\n groupedResponses.pods,\n )}\n deployment={deployment}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import Typography from '@material-ui/core/Typography';
|
|
3
|
+
import { WarningPanel } from '@backstage/core-components';
|
|
4
|
+
|
|
5
|
+
const clustersWithErrorsToErrorMessage = (clustersWithErrors) => {
|
|
6
|
+
return clustersWithErrors.map((c, i) => {
|
|
7
|
+
return /* @__PURE__ */ React__default.createElement("div", { key: i }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "body2" }, `Cluster: ${c.cluster.title || c.cluster.name}`), c.errors.map((e, j) => {
|
|
8
|
+
return /* @__PURE__ */ React__default.createElement(Typography, { variant: "body2", key: j }, e.errorType === "FETCH_ERROR" ? `Error communicating with Kubernetes: ${e.errorType}, message: ${e.message}` : `Error fetching Kubernetes resource: '${e.resourcePath}', error: ${e.errorType}, status code: ${e.statusCode}`);
|
|
9
|
+
}), /* @__PURE__ */ React__default.createElement("br", null));
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
const ErrorPanel = ({
|
|
13
|
+
entityName,
|
|
14
|
+
errorMessage,
|
|
15
|
+
clustersWithErrors
|
|
16
|
+
}) => /* @__PURE__ */ React__default.createElement(
|
|
17
|
+
WarningPanel,
|
|
18
|
+
{
|
|
19
|
+
title: "There was a problem retrieving Kubernetes objects",
|
|
20
|
+
message: `There was a problem retrieving some Kubernetes resources for the entity: ${entityName}. This could mean that the Error Reporting card is not completely accurate.`
|
|
21
|
+
},
|
|
22
|
+
clustersWithErrors && /* @__PURE__ */ React__default.createElement("div", null, "Errors: ", clustersWithErrorsToErrorMessage(clustersWithErrors)),
|
|
23
|
+
errorMessage && /* @__PURE__ */ React__default.createElement(Typography, { variant: "body2" }, "Errors: ", errorMessage)
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export { ErrorPanel };
|
|
27
|
+
//# sourceMappingURL=ErrorPanel.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorPanel.esm.js","sources":["../../../src/components/ErrorPanel/ErrorPanel.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport { ClusterObjects } from '@backstage/plugin-kubernetes-common';\nimport { WarningPanel } from '@backstage/core-components';\n\nconst clustersWithErrorsToErrorMessage = (\n clustersWithErrors: ClusterObjects[],\n): React.ReactNode => {\n return clustersWithErrors.map((c, i) => {\n return (\n <div key={i}>\n <Typography variant=\"body2\">{`Cluster: ${\n c.cluster.title || c.cluster.name\n }`}</Typography>\n {c.errors.map((e, j) => {\n return (\n <Typography variant=\"body2\" key={j}>\n {e.errorType === 'FETCH_ERROR'\n ? `Error communicating with Kubernetes: ${e.errorType}, message: ${e.message}`\n : `Error fetching Kubernetes resource: '${e.resourcePath}', error: ${e.errorType}, status code: ${e.statusCode}`}\n </Typography>\n );\n })}\n <br />\n </div>\n );\n });\n};\n\n/**\n *\n *\n * @public\n */\nexport type ErrorPanelProps = {\n entityName: string;\n errorMessage?: string;\n clustersWithErrors?: ClusterObjects[];\n children?: React.ReactNode;\n};\n\n/**\n *\n *\n * @public\n */\nexport const ErrorPanel = ({\n entityName,\n errorMessage,\n clustersWithErrors,\n}: ErrorPanelProps) => (\n <WarningPanel\n title=\"There was a problem retrieving Kubernetes objects\"\n message={`There was a problem retrieving some Kubernetes resources for the entity: ${entityName}. This could mean that the Error Reporting card is not completely accurate.`}\n >\n {clustersWithErrors && (\n <div>Errors: {clustersWithErrorsToErrorMessage(clustersWithErrors)}</div>\n )}\n {errorMessage && (\n <Typography variant=\"body2\">Errors: {errorMessage}</Typography>\n )}\n </WarningPanel>\n);\n"],"names":["React"],"mappings":";;;;AAqBA,MAAM,gCAAA,GAAmC,CACvC,kBACoB,KAAA;AACpB,EAAA,OAAO,kBAAmB,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA;AACtC,IACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,SAAI,GAAK,EAAA,CAAA,EAAA,+CACP,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAS,EAAA,EAAA,CAAA,SAAA,EAC3B,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAE,CAAA,OAAA,CAAQ,IAC/B,CAAG,CAAA,CAAA,EACF,EAAE,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA;AACtB,MACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,GAAA,EAAK,KAC9B,CAAE,CAAA,SAAA,KAAc,aACb,GAAA,CAAA,qCAAA,EAAwC,CAAE,CAAA,SAAS,cAAc,CAAE,CAAA,OAAO,CAC1E,CAAA,GAAA,CAAA,qCAAA,EAAwC,CAAE,CAAA,YAAY,CAAa,UAAA,EAAA,CAAA,CAAE,SAAS,CAAA,eAAA,EAAkB,CAAE,CAAA,UAAU,CAClH,CAAA,CAAA,CAAA;AAAA,KAEH,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAG,CACN,CAAA,CAAA;AAAA,GAEH,CAAA,CAAA;AACH,CAAA,CAAA;AAmBO,MAAM,aAAa,CAAC;AAAA,EACzB,UAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AACF,CACE,qBAAAA,cAAA,CAAA,aAAA;AAAA,EAAC,YAAA;AAAA,EAAA;AAAA,IACC,KAAM,EAAA,mDAAA;AAAA,IACN,OAAA,EAAS,4EAA4E,UAAU,CAAA,2EAAA,CAAA;AAAA,GAAA;AAAA,EAE9F,sCACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAI,UAAS,EAAA,gCAAA,CAAiC,kBAAkB,CAAE,CAAA;AAAA,EAEpE,gCACEA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAA,EAAQ,YAAS,YAAa,CAAA;AAEtD;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Table } from '@backstage/core-components';
|
|
3
|
+
|
|
4
|
+
const columns = [
|
|
5
|
+
{
|
|
6
|
+
title: "cluster",
|
|
7
|
+
width: "10%",
|
|
8
|
+
render: (row) => row.cluster.title || row.cluster.name
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
title: "namespace",
|
|
12
|
+
width: "10%",
|
|
13
|
+
render: (row) => row.error.sourceRef.namespace
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
title: "kind",
|
|
17
|
+
width: "10%",
|
|
18
|
+
render: (row) => row.error.sourceRef.kind
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: "name",
|
|
22
|
+
width: "30%",
|
|
23
|
+
render: (row) => {
|
|
24
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, row.error.sourceRef.name, " ");
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: "messages",
|
|
29
|
+
width: "40%",
|
|
30
|
+
render: (row) => row.error.message
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
const sortBySeverity = (a, b) => {
|
|
34
|
+
if (a.error.severity < b.error.severity) {
|
|
35
|
+
return 1;
|
|
36
|
+
} else if (b.error.severity < a.error.severity) {
|
|
37
|
+
return -1;
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
};
|
|
41
|
+
const ErrorReporting = ({
|
|
42
|
+
detectedErrors,
|
|
43
|
+
clusters
|
|
44
|
+
}) => {
|
|
45
|
+
const errors = Array.from(detectedErrors.entries()).flatMap(([clusterName, resourceErrors]) => {
|
|
46
|
+
return resourceErrors.map((e) => ({
|
|
47
|
+
cluster: clusters.find((c) => c.name === clusterName),
|
|
48
|
+
error: e
|
|
49
|
+
}));
|
|
50
|
+
}).sort(sortBySeverity);
|
|
51
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, errors.length !== 0 && /* @__PURE__ */ React.createElement(
|
|
52
|
+
Table,
|
|
53
|
+
{
|
|
54
|
+
title: "Error Reporting",
|
|
55
|
+
data: errors,
|
|
56
|
+
columns,
|
|
57
|
+
options: { paging: true, search: false, emptyRowsWhenPaging: false }
|
|
58
|
+
}
|
|
59
|
+
));
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { ErrorReporting };
|
|
63
|
+
//# sourceMappingURL=ErrorReporting.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorReporting.esm.js","sources":["../../../src/components/ErrorReporting/ErrorReporting.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\nimport {\n ClusterAttributes,\n DetectedError,\n DetectedErrorsByCluster,\n} from '@backstage/plugin-kubernetes-common';\nimport { Table, TableColumn } from '@backstage/core-components';\n\n/**\n *\n *\n * @public\n */\nexport type ErrorReportingProps = {\n detectedErrors: DetectedErrorsByCluster;\n clusters: ClusterAttributes[];\n};\n\nconst columns: TableColumn<Row>[] = [\n {\n title: 'cluster',\n width: '10%',\n render: (row: Row) => row.cluster.title || row.cluster.name,\n },\n {\n title: 'namespace',\n width: '10%',\n render: (row: Row) => row.error.sourceRef.namespace,\n },\n {\n title: 'kind',\n width: '10%',\n render: (row: Row) => row.error.sourceRef.kind,\n },\n {\n title: 'name',\n width: '30%',\n render: (row: Row) => {\n return <>{row.error.sourceRef.name} </>;\n },\n },\n {\n title: 'messages',\n width: '40%',\n render: (row: Row) => row.error.message,\n },\n];\n\ninterface Row {\n cluster: ClusterAttributes;\n error: DetectedError;\n}\n\nconst sortBySeverity = (a: Row, b: Row) => {\n if (a.error.severity < b.error.severity) {\n return 1;\n } else if (b.error.severity < a.error.severity) {\n return -1;\n }\n return 0;\n};\n\n/**\n *\n *\n * @public\n */\nexport const ErrorReporting = ({\n detectedErrors,\n clusters,\n}: ErrorReportingProps) => {\n const errors = Array.from(detectedErrors.entries())\n .flatMap(([clusterName, resourceErrors]) => {\n return resourceErrors.map(e => ({\n cluster: clusters.find(c => c.name === clusterName)!,\n error: e,\n }));\n })\n .sort(sortBySeverity);\n\n return (\n <>\n {errors.length !== 0 && (\n <Table\n title=\"Error Reporting\"\n data={errors}\n columns={columns}\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":";;;AAiCA,MAAM,OAA8B,GAAA;AAAA,EAClC;AAAA,IACE,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,KAAA;AAAA,IACP,QAAQ,CAAC,GAAA,KAAa,IAAI,OAAQ,CAAA,KAAA,IAAS,IAAI,OAAQ,CAAA,IAAA;AAAA,GACzD;AAAA,EACA;AAAA,IACE,KAAO,EAAA,WAAA;AAAA,IACP,KAAO,EAAA,KAAA;AAAA,IACP,MAAQ,EAAA,CAAC,GAAa,KAAA,GAAA,CAAI,MAAM,SAAU,CAAA,SAAA;AAAA,GAC5C;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,KAAA;AAAA,IACP,MAAQ,EAAA,CAAC,GAAa,KAAA,GAAA,CAAI,MAAM,SAAU,CAAA,IAAA;AAAA,GAC5C;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,KAAA;AAAA,IACP,MAAA,EAAQ,CAAC,GAAa,KAAA;AACpB,MAAA,uBAAU,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAA,GAAA,CAAI,KAAM,CAAA,SAAA,CAAU,MAAK,GAAC,CAAA,CAAA;AAAA,KACtC;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAO,EAAA,UAAA;AAAA,IACP,KAAO,EAAA,KAAA;AAAA,IACP,MAAQ,EAAA,CAAC,GAAa,KAAA,GAAA,CAAI,KAAM,CAAA,OAAA;AAAA,GAClC;AACF,CAAA,CAAA;AAOA,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAQ,CAAW,KAAA;AACzC,EAAA,IAAI,CAAE,CAAA,KAAA,CAAM,QAAW,GAAA,CAAA,CAAE,MAAM,QAAU,EAAA;AACvC,IAAO,OAAA,CAAA,CAAA;AAAA,aACE,CAAE,CAAA,KAAA,CAAM,QAAW,GAAA,CAAA,CAAE,MAAM,QAAU,EAAA;AAC9C,IAAO,OAAA,CAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,CAAA,CAAA;AACT,CAAA,CAAA;AAOO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAA;AAAA,EACA,QAAA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,MAAS,GAAA,KAAA,CAAM,IAAK,CAAA,cAAA,CAAe,OAAQ,EAAC,CAC/C,CAAA,OAAA,CAAQ,CAAC,CAAC,WAAa,EAAA,cAAc,CAAM,KAAA;AAC1C,IAAO,OAAA,cAAA,CAAe,IAAI,CAAM,CAAA,MAAA;AAAA,MAC9B,SAAS,QAAS,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,WAAW,CAAA;AAAA,MAClD,KAAO,EAAA,CAAA;AAAA,KACP,CAAA,CAAA,CAAA;AAAA,GACH,CACA,CAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AAEtB,EACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,MAAO,CAAA,MAAA,KAAW,CACjB,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,iBAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,OAAA;AAAA,MACA,SAAS,EAAE,MAAA,EAAQ,MAAM,MAAQ,EAAA,KAAA,EAAO,qBAAqB,KAAM,EAAA;AAAA,KAAA;AAAA,GAGzE,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js';
|
|
3
|
+
import '../KubernetesDrawer/KubernetesDrawer.esm.js';
|
|
4
|
+
import '@backstage/core-components';
|
|
5
|
+
import '@material-ui/core/FormControlLabel';
|
|
6
|
+
import '@material-ui/core/Switch';
|
|
7
|
+
import 'js-yaml';
|
|
8
|
+
|
|
9
|
+
const HorizontalPodAutoscalerDrawer = (props) => {
|
|
10
|
+
const { hpa, expanded, children } = props;
|
|
11
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
12
|
+
KubernetesStructuredMetadataTableDrawer,
|
|
13
|
+
{
|
|
14
|
+
kind: "HorizontalPodAutoscaler",
|
|
15
|
+
object: hpa,
|
|
16
|
+
expanded,
|
|
17
|
+
renderObject: (hpaObject) => {
|
|
18
|
+
var _a, _b, _c, _d, _e, _f;
|
|
19
|
+
return {
|
|
20
|
+
targetCPUUtilizationPercentage: (_a = hpaObject.spec) == null ? void 0 : _a.targetCPUUtilizationPercentage,
|
|
21
|
+
currentCPUUtilizationPercentage: (_b = hpaObject.status) == null ? void 0 : _b.currentCPUUtilizationPercentage,
|
|
22
|
+
minReplicas: (_c = hpaObject.spec) == null ? void 0 : _c.minReplicas,
|
|
23
|
+
maxReplicas: (_d = hpaObject.spec) == null ? void 0 : _d.maxReplicas,
|
|
24
|
+
currentReplicas: (_e = hpaObject.status) == null ? void 0 : _e.currentReplicas,
|
|
25
|
+
desiredReplicas: (_f = hpaObject.status) == null ? void 0 : _f.desiredReplicas
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
children
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { HorizontalPodAutoscalerDrawer };
|
|
34
|
+
//# sourceMappingURL=HorizontalPodAutoscalerDrawer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HorizontalPodAutoscalerDrawer.esm.js","sources":["../../../src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { V1HorizontalPodAutoscaler } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\n\n/** @public */\nexport const HorizontalPodAutoscalerDrawer = (props: {\n hpa: V1HorizontalPodAutoscaler;\n expanded?: boolean;\n children?: React.ReactNode;\n}) => {\n const { hpa, expanded, children } = props;\n\n return (\n <KubernetesStructuredMetadataTableDrawer\n kind=\"HorizontalPodAutoscaler\"\n object={hpa}\n expanded={expanded}\n renderObject={(hpaObject: V1HorizontalPodAutoscaler) => {\n return {\n targetCPUUtilizationPercentage:\n hpaObject.spec?.targetCPUUtilizationPercentage,\n currentCPUUtilizationPercentage:\n hpaObject.status?.currentCPUUtilizationPercentage,\n minReplicas: hpaObject.spec?.minReplicas,\n maxReplicas: hpaObject.spec?.maxReplicas,\n currentReplicas: hpaObject.status?.currentReplicas,\n desiredReplicas: hpaObject.status?.desiredReplicas,\n };\n }}\n >\n {children}\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;AAqBa,MAAA,6BAAA,GAAgC,CAAC,KAIxC,KAAA;AACJ,EAAA,MAAM,EAAE,GAAA,EAAK,QAAU,EAAA,QAAA,EAAa,GAAA,KAAA,CAAA;AAEpC,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,yBAAA;AAAA,MACL,MAAQ,EAAA,GAAA;AAAA,MACR,QAAA;AAAA,MACA,YAAA,EAAc,CAAC,SAAyC,KAAA;AAjC9D,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAkCQ,QAAO,OAAA;AAAA,UACL,8BAAA,EAAA,CACE,EAAU,GAAA,SAAA,CAAA,IAAA,KAAV,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,8BAAA;AAAA,UAClB,+BAAA,EAAA,CACE,EAAU,GAAA,SAAA,CAAA,MAAA,KAAV,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,+BAAA;AAAA,UACpB,WAAA,EAAA,CAAa,EAAU,GAAA,SAAA,CAAA,IAAA,KAAV,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA;AAAA,UAC7B,WAAA,EAAA,CAAa,EAAU,GAAA,SAAA,CAAA,IAAA,KAAV,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA;AAAA,UAC7B,eAAA,EAAA,CAAiB,EAAU,GAAA,SAAA,CAAA,MAAA,KAAV,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAA;AAAA,UACnC,eAAA,EAAA,CAAiB,EAAU,GAAA,SAAA,CAAA,MAAA,KAAV,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAA;AAAA,SACrC,CAAA;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA;AAAA,GACH,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js';
|
|
3
|
+
import '../KubernetesDrawer/KubernetesDrawer.esm.js';
|
|
4
|
+
import '@backstage/core-components';
|
|
5
|
+
import '@material-ui/core/FormControlLabel';
|
|
6
|
+
import '@material-ui/core/Switch';
|
|
7
|
+
import 'js-yaml';
|
|
8
|
+
import Typography from '@material-ui/core/Typography';
|
|
9
|
+
import Grid from '@material-ui/core/Grid';
|
|
10
|
+
|
|
11
|
+
const IngressDrawer = ({
|
|
12
|
+
ingress,
|
|
13
|
+
expanded
|
|
14
|
+
}) => {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
17
|
+
KubernetesStructuredMetadataTableDrawer,
|
|
18
|
+
{
|
|
19
|
+
object: ingress,
|
|
20
|
+
expanded,
|
|
21
|
+
kind: "Ingress",
|
|
22
|
+
renderObject: (ingressObject) => {
|
|
23
|
+
return ingressObject.spec || {};
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
/* @__PURE__ */ React__default.createElement(
|
|
27
|
+
Grid,
|
|
28
|
+
{
|
|
29
|
+
container: true,
|
|
30
|
+
direction: "column",
|
|
31
|
+
justifyContent: "flex-start",
|
|
32
|
+
alignItems: "flex-start",
|
|
33
|
+
spacing: 0
|
|
34
|
+
},
|
|
35
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "body1" }, (_b = (_a = ingress.metadata) == null ? void 0 : _a.name) != null ? _b : "unknown object")),
|
|
36
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { color: "textSecondary", variant: "subtitle1" }, "Ingress"))
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { IngressDrawer };
|
|
42
|
+
//# sourceMappingURL=IngressDrawer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IngressDrawer.esm.js","sources":["../../../src/components/IngressesAccordions/IngressDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { V1Ingress } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\n\nexport const IngressDrawer = ({\n ingress,\n expanded,\n}: {\n ingress: V1Ingress;\n expanded?: boolean;\n}) => {\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={ingress}\n expanded={expanded}\n kind=\"Ingress\"\n renderObject={(ingressObject: V1Ingress) => {\n return ingressObject.spec || {};\n }}\n >\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"body1\">\n {ingress.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n Ingress\n </Typography>\n </Grid>\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;AAsBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,OAAA;AAAA,EACA,QAAA;AACF,CAGM,KAAA;AA5BN,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA6BE,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA,OAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAK,EAAA,SAAA;AAAA,MACL,YAAA,EAAc,CAAC,aAA6B,KAAA;AAC1C,QAAO,OAAA,aAAA,CAAc,QAAQ,EAAC,CAAA;AAAA,OAChC;AAAA,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAS,EAAA,IAAA;AAAA,QACT,SAAU,EAAA,QAAA;AAAA,QACV,cAAe,EAAA,YAAA;AAAA,QACf,UAAW,EAAA,YAAA;AAAA,QACX,OAAS,EAAA,CAAA;AAAA,OAAA;AAAA,sBAERA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAA,+CACP,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAlB,KAAA,IAAA,GAAA,EAAA,GAA0B,gBAC7B,CACF,CAAA;AAAA,sBACAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACR,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAM,eAAgB,EAAA,OAAA,EAAQ,WAAY,EAAA,EAAA,SAEtD,CACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import Accordion from '@material-ui/core/Accordion';
|
|
3
|
+
import AccordionDetails from '@material-ui/core/AccordionDetails';
|
|
4
|
+
import AccordionSummary from '@material-ui/core/AccordionSummary';
|
|
5
|
+
import Grid from '@material-ui/core/Grid';
|
|
6
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
7
|
+
import { IngressDrawer } from './IngressDrawer.esm.js';
|
|
8
|
+
import '@backstage/core-plugin-api';
|
|
9
|
+
import 'react-use/esm/useAsync';
|
|
10
|
+
import '../../api/types.esm.js';
|
|
11
|
+
import 'react-use/esm/useInterval';
|
|
12
|
+
import 'react-use/esm/useAsyncRetry';
|
|
13
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
14
|
+
import '../../hooks/PodNamesWithErrors.esm.js';
|
|
15
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
16
|
+
import { GroupedResponsesContext } from '../../hooks/GroupedResponses.esm.js';
|
|
17
|
+
import '../../hooks/Cluster.esm.js';
|
|
18
|
+
import '../../hooks/usePodMetrics.esm.js';
|
|
19
|
+
import '../../hooks/useMatchingErrors.esm.js';
|
|
20
|
+
import { StructuredMetadataTable } from '@backstage/core-components';
|
|
21
|
+
|
|
22
|
+
const IngressSummary = ({ ingress }) => {
|
|
23
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
24
|
+
Grid,
|
|
25
|
+
{
|
|
26
|
+
container: true,
|
|
27
|
+
direction: "row",
|
|
28
|
+
justifyContent: "flex-start",
|
|
29
|
+
alignItems: "center"
|
|
30
|
+
},
|
|
31
|
+
/* @__PURE__ */ React__default.createElement(Grid, { xs: 12, item: true }, /* @__PURE__ */ React__default.createElement(IngressDrawer, { ingress }))
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
const IngressCard = ({ ingress }) => {
|
|
35
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
36
|
+
StructuredMetadataTable,
|
|
37
|
+
{
|
|
38
|
+
metadata: {
|
|
39
|
+
...ingress.spec
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
const IngressAccordion = ({ ingress }) => {
|
|
45
|
+
return /* @__PURE__ */ React__default.createElement(Accordion, { TransitionProps: { unmountOnExit: true } }, /* @__PURE__ */ React__default.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React__default.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React__default.createElement(IngressSummary, { ingress })), /* @__PURE__ */ React__default.createElement(AccordionDetails, null, /* @__PURE__ */ React__default.createElement(IngressCard, { ingress })));
|
|
46
|
+
};
|
|
47
|
+
const IngressesAccordions = ({}) => {
|
|
48
|
+
const groupedResponses = useContext(GroupedResponsesContext);
|
|
49
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
50
|
+
Grid,
|
|
51
|
+
{
|
|
52
|
+
container: true,
|
|
53
|
+
direction: "row",
|
|
54
|
+
justifyContent: "flex-start",
|
|
55
|
+
alignItems: "flex-start"
|
|
56
|
+
},
|
|
57
|
+
groupedResponses.ingresses.map((ingress, i) => /* @__PURE__ */ React__default.createElement(Grid, { item: true, key: i, xs: true }, /* @__PURE__ */ React__default.createElement(IngressAccordion, { ingress })))
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export { IngressesAccordions };
|
|
62
|
+
//# sourceMappingURL=IngressesAccordions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IngressesAccordions.esm.js","sources":["../../../src/components/IngressesAccordions/IngressesAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { V1Ingress } from '@kubernetes/client-node';\nimport { IngressDrawer } from './IngressDrawer';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StructuredMetadataTable } from '@backstage/core-components';\n\n/**\n *\n *\n * @public\n */\nexport type IngressesAccordionsProps = {};\n\ntype IngressAccordionProps = {\n ingress: V1Ingress;\n};\n\ntype IngressSummaryProps = {\n ingress: V1Ingress;\n};\n\nconst IngressSummary = ({ ingress }: IngressSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid xs={12} item>\n <IngressDrawer ingress={ingress} />\n </Grid>\n </Grid>\n );\n};\n\ntype IngressCardProps = {\n ingress: V1Ingress;\n};\n\nconst IngressCard = ({ ingress }: IngressCardProps) => {\n return (\n <StructuredMetadataTable\n metadata={{\n ...ingress.spec,\n }}\n />\n );\n};\n\nconst IngressAccordion = ({ ingress }: IngressAccordionProps) => {\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <IngressSummary ingress={ingress} />\n </AccordionSummary>\n <AccordionDetails>\n <IngressCard ingress={ingress} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport const IngressesAccordions = ({}: IngressesAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {groupedResponses.ingresses.map((ingress, i) => (\n <Grid item key={i} xs>\n <IngressAccordion ingress={ingress} />\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0CA,MAAM,cAAiB,GAAA,CAAC,EAAE,OAAA,EAAmC,KAAA;AAC3D,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,SAAU,EAAA,KAAA;AAAA,MACV,cAAe,EAAA,YAAA;AAAA,MACf,UAAW,EAAA,QAAA;AAAA,KAAA;AAAA,oBAEXA,cAAA,CAAA,aAAA,CAAC,QAAK,EAAI,EAAA,EAAA,EAAI,MAAI,IAChB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,OAAA,EAAkB,CACnC,CAAA;AAAA,GACF,CAAA;AAEJ,CAAA,CAAA;AAMA,MAAM,WAAc,GAAA,CAAC,EAAE,OAAA,EAAgC,KAAA;AACrD,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA;AAAA,QACR,GAAG,OAAQ,CAAA,IAAA;AAAA,OACb;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,CAAA,CAAA;AAEA,MAAM,gBAAmB,GAAA,CAAC,EAAE,OAAA,EAAqC,KAAA;AAC/D,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,SAAU,EAAA,EAAA,eAAA,EAAiB,EAAE,aAAA,EAAe,MAC3C,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,UAAA,kBAAaA,cAAA,CAAA,aAAA,CAAA,cAAA,EAAA,IAAe,qBAC3CA,cAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,OAAkB,EAAA,CACpC,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,wCACEA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,OAAkB,EAAA,CACjC,CACF,CAAA,CAAA;AAEJ,CAAA,CAAA;AAOa,MAAA,mBAAA,GAAsB,CAAC,EAAiC,KAAA;AACnE,EAAM,MAAA,gBAAA,GAAmB,WAAW,uBAAuB,CAAA,CAAA;AAC3D,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,SAAU,EAAA,KAAA;AAAA,MACV,cAAe,EAAA,YAAA;AAAA,MACf,UAAW,EAAA,YAAA;AAAA,KAAA;AAAA,IAEV,iBAAiB,SAAU,CAAA,GAAA,CAAI,CAAC,OAAS,EAAA,CAAA,kDACvC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,GAAA,EAAK,GAAG,EAAE,EAAA,IAAA,EAAA,+CAClB,gBAAiB,EAAA,EAAA,OAAA,EAAkB,CACtC,CACD,CAAA;AAAA,GACH,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import Accordion from '@material-ui/core/Accordion';
|
|
3
|
+
import AccordionDetails from '@material-ui/core/AccordionDetails';
|
|
4
|
+
import AccordionSummary from '@material-ui/core/AccordionSummary';
|
|
5
|
+
import Grid from '@material-ui/core/Grid';
|
|
6
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
7
|
+
import '../Pods/PodDrawer/PodDrawer.esm.js';
|
|
8
|
+
import { StatusOK, StatusPending, StatusError } from '@backstage/core-components';
|
|
9
|
+
import '@material-ui/core/Card';
|
|
10
|
+
import '@material-ui/core/CardActions';
|
|
11
|
+
import '@material-ui/core/CardContent';
|
|
12
|
+
import '@material-ui/core/CardHeader';
|
|
13
|
+
import '@material-ui/core/Typography';
|
|
14
|
+
import 'luxon';
|
|
15
|
+
import '@backstage/core-plugin-api';
|
|
16
|
+
import 'react-use/esm/useAsync';
|
|
17
|
+
import '../../api/types.esm.js';
|
|
18
|
+
import 'react-use/esm/useInterval';
|
|
19
|
+
import 'react-use/esm/useAsyncRetry';
|
|
20
|
+
import '../../kubernetes-auth-provider/types.esm.js';
|
|
21
|
+
import '../../hooks/PodNamesWithErrors.esm.js';
|
|
22
|
+
import '../../hooks/PodNamesWithMetrics.esm.js';
|
|
23
|
+
import { GroupedResponsesContext } from '../../hooks/GroupedResponses.esm.js';
|
|
24
|
+
import '../../hooks/Cluster.esm.js';
|
|
25
|
+
import '../../hooks/usePodMetrics.esm.js';
|
|
26
|
+
import '../../hooks/useMatchingErrors.esm.js';
|
|
27
|
+
import '@material-ui/icons/OpenInBrowser';
|
|
28
|
+
import '../KubernetesDialog/KubernetesDialog.esm.js';
|
|
29
|
+
import '../PodExecTerminal/PodExecTerminal.esm.js';
|
|
30
|
+
import '@material-ui/core/Paper';
|
|
31
|
+
import '@material-ui/lab/Skeleton';
|
|
32
|
+
import '@material-ui/icons/Subject';
|
|
33
|
+
import '@material-ui/core/List';
|
|
34
|
+
import '@material-ui/core/ListItem';
|
|
35
|
+
import '../Pods/FixDialog/FixDialog.esm.js';
|
|
36
|
+
import '@material-ui/core/Avatar';
|
|
37
|
+
import '@material-ui/core/Container';
|
|
38
|
+
import '@material-ui/core/ListItemAvatar';
|
|
39
|
+
import '@material-ui/core/ListItemText';
|
|
40
|
+
import '@material-ui/core/Tooltip';
|
|
41
|
+
import '@material-ui/icons/Info';
|
|
42
|
+
import '@material-ui/icons/Warning';
|
|
43
|
+
import '../Pods/ErrorList/ErrorList.esm.js';
|
|
44
|
+
import { PodsTable } from '../Pods/PodsTable.esm.js';
|
|
45
|
+
import { JobDrawer } from './JobsDrawer.esm.js';
|
|
46
|
+
import { getOwnedResources } from '../../utils/owner.esm.js';
|
|
47
|
+
|
|
48
|
+
const JobSummary = ({ job }) => {
|
|
49
|
+
var _a, _b, _c, _d, _e, _f;
|
|
50
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
51
|
+
Grid,
|
|
52
|
+
{
|
|
53
|
+
container: true,
|
|
54
|
+
direction: "row",
|
|
55
|
+
justifyContent: "space-between",
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
spacing: 0
|
|
58
|
+
},
|
|
59
|
+
/* @__PURE__ */ React__default.createElement(Grid, { xs: 6, item: true }, /* @__PURE__ */ React__default.createElement(JobDrawer, { job })),
|
|
60
|
+
/* @__PURE__ */ React__default.createElement(
|
|
61
|
+
Grid,
|
|
62
|
+
{
|
|
63
|
+
item: true,
|
|
64
|
+
container: true,
|
|
65
|
+
xs: 6,
|
|
66
|
+
direction: "column",
|
|
67
|
+
justifyContent: "flex-start",
|
|
68
|
+
alignItems: "flex-end",
|
|
69
|
+
spacing: 0
|
|
70
|
+
},
|
|
71
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, ((_a = job.status) == null ? void 0 : _a.succeeded) && /* @__PURE__ */ React__default.createElement(StatusOK, null, "Succeeded"), ((_b = job.status) == null ? void 0 : _b.active) && /* @__PURE__ */ React__default.createElement(StatusPending, null, "Running"), ((_c = job.status) == null ? void 0 : _c.failed) && /* @__PURE__ */ React__default.createElement(StatusError, null, "Failed")),
|
|
72
|
+
/* @__PURE__ */ React__default.createElement(Grid, { item: true }, "Start time: ", (_e = (_d = job.status) == null ? void 0 : _d.startTime) == null ? void 0 : _e.toString()),
|
|
73
|
+
((_f = job.status) == null ? void 0 : _f.completionTime) && /* @__PURE__ */ React__default.createElement(Grid, { item: true }, "Completion time: ", job.status.completionTime.toString())
|
|
74
|
+
)
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
const JobAccordion = ({ job, ownedPods }) => {
|
|
78
|
+
return /* @__PURE__ */ React__default.createElement(Accordion, { TransitionProps: { unmountOnExit: true }, variant: "outlined" }, /* @__PURE__ */ React__default.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React__default.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React__default.createElement(JobSummary, { job })), /* @__PURE__ */ React__default.createElement(AccordionDetails, null, /* @__PURE__ */ React__default.createElement(PodsTable, { pods: ownedPods })));
|
|
79
|
+
};
|
|
80
|
+
const JobsAccordions = ({ jobs }) => {
|
|
81
|
+
const groupedResponses = useContext(GroupedResponsesContext);
|
|
82
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
83
|
+
Grid,
|
|
84
|
+
{
|
|
85
|
+
container: true,
|
|
86
|
+
direction: "column",
|
|
87
|
+
justifyContent: "flex-start",
|
|
88
|
+
alignItems: "flex-start"
|
|
89
|
+
},
|
|
90
|
+
jobs.map((job, i) => /* @__PURE__ */ React__default.createElement(Grid, { container: true, item: true, key: i, xs: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: true }, /* @__PURE__ */ React__default.createElement(
|
|
91
|
+
JobAccordion,
|
|
92
|
+
{
|
|
93
|
+
ownedPods: getOwnedResources(job, groupedResponses.pods),
|
|
94
|
+
job
|
|
95
|
+
}
|
|
96
|
+
))))
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { JobsAccordions };
|
|
101
|
+
//# sourceMappingURL=JobsAccordions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobsAccordions.esm.js","sources":["../../../src/components/JobsAccordions/JobsAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2021 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, { useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { V1Job, V1Pod } from '@kubernetes/client-node';\nimport { PodsTable } from '../Pods';\nimport { JobDrawer } from './JobsDrawer';\nimport { getOwnedResources } from '../../utils/owner';\nimport { GroupedResponsesContext } from '../../hooks';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\n\n/**\n *\n *\n * @public\n */\nexport type JobsAccordionsProps = {\n jobs: V1Job[];\n children?: React.ReactNode;\n};\n\ntype JobAccordionProps = {\n job: V1Job;\n ownedPods: V1Pod[];\n children?: React.ReactNode;\n};\n\ntype JobSummaryProps = {\n job: V1Job;\n children?: React.ReactNode;\n};\n\nconst JobSummary = ({ job }: JobSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={6} item>\n <JobDrawer job={job} />\n </Grid>\n <Grid\n item\n container\n xs={6}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n {job.status?.succeeded && <StatusOK>Succeeded</StatusOK>}\n {job.status?.active && <StatusPending>Running</StatusPending>}\n {job.status?.failed && <StatusError>Failed</StatusError>}\n </Grid>\n <Grid item>Start time: {job.status?.startTime?.toString()}</Grid>\n {job.status?.completionTime && (\n <Grid item>\n Completion time: {job.status.completionTime.toString()}\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst JobAccordion = ({ job, ownedPods }: JobAccordionProps) => {\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <JobSummary job={job} />\n </AccordionSummary>\n <AccordionDetails>\n <PodsTable pods={ownedPods} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport const JobsAccordions = ({ jobs }: JobsAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n\n return (\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {jobs.map((job, i) => (\n <Grid container item key={i} xs>\n <Grid item xs>\n <JobAccordion\n ownedPods={getOwnedResources(job, groupedResponses.pods)}\n job={job}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
|