@skyhook-io/k8s-ui 1.0.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/package.json +63 -0
- package/src/components/dock/BottomDock.tsx +204 -0
- package/src/components/dock/DockContext.tsx +212 -0
- package/src/components/dock/TerminalTab.tsx +333 -0
- package/src/components/dock/index.ts +3 -0
- package/src/components/gitops/GitOpsActions.tsx +227 -0
- package/src/components/gitops/GitOpsStatusBadge.tsx +221 -0
- package/src/components/gitops/ManagedResourcesList.tsx +210 -0
- package/src/components/gitops/SyncCountdown.tsx +146 -0
- package/src/components/gitops/index.ts +4 -0
- package/src/components/logs/JsonLogLine.tsx +90 -0
- package/src/components/logs/LogCore.tsx +553 -0
- package/src/components/logs/LogToolbarSelects.tsx +74 -0
- package/src/components/logs/LogsViewer.tsx +146 -0
- package/src/components/logs/WorkloadLogsViewer.tsx +263 -0
- package/src/components/logs/index.ts +13 -0
- package/src/components/logs/useLogBuffer.ts +138 -0
- package/src/components/logs/useLogSearch.ts +151 -0
- package/src/components/logs/useLogStream.ts +61 -0
- package/src/components/resources/ResourcesView.tsx +5494 -0
- package/src/components/resources/index.ts +17 -0
- package/src/components/resources/renderers/AlertRenderer.tsx +166 -0
- package/src/components/resources/renderers/ArgoApplicationRenderer.tsx +233 -0
- package/src/components/resources/renderers/CNPGBackupRenderer.tsx +89 -0
- package/src/components/resources/renderers/CNPGClusterRenderer.tsx +194 -0
- package/src/components/resources/renderers/CNPGPoolerRenderer.tsx +79 -0
- package/src/components/resources/renderers/CNPGScheduledBackupRenderer.tsx +68 -0
- package/src/components/resources/renderers/CertificateRenderer.tsx +209 -0
- package/src/components/resources/renderers/CertificateRequestRenderer.tsx +123 -0
- package/src/components/resources/renderers/ChallengeRenderer.tsx +111 -0
- package/src/components/resources/renderers/ClusterComplianceReportRenderer.tsx +164 -0
- package/src/components/resources/renderers/ClusterExternalSecretRenderer.tsx +140 -0
- package/src/components/resources/renderers/ClusterIssuerRenderer.tsx +153 -0
- package/src/components/resources/renderers/ConfigAuditReportRenderer.tsx +221 -0
- package/src/components/resources/renderers/ConfigMapRenderer.tsx +124 -0
- package/src/components/resources/renderers/CronJobRenderer.tsx +86 -0
- package/src/components/resources/renderers/EventRenderer.tsx +175 -0
- package/src/components/resources/renderers/ExposedSecretReportRenderer.tsx +119 -0
- package/src/components/resources/renderers/ExternalSecretRenderer.tsx +172 -0
- package/src/components/resources/renderers/FluxHelmReleaseRenderer.tsx +242 -0
- package/src/components/resources/renderers/GRPCRouteRenderer.tsx +263 -0
- package/src/components/resources/renderers/GatewayClassRenderer.tsx +68 -0
- package/src/components/resources/renderers/GatewayRenderer.tsx +218 -0
- package/src/components/resources/renderers/GenericRenderer.tsx +476 -0
- package/src/components/resources/renderers/GitRepositoryRenderer.tsx +154 -0
- package/src/components/resources/renderers/HPARenderer.tsx +164 -0
- package/src/components/resources/renderers/HTTPRouteRenderer.tsx +303 -0
- package/src/components/resources/renderers/HelmRepositoryRenderer.tsx +167 -0
- package/src/components/resources/renderers/IngressClassRenderer.tsx +49 -0
- package/src/components/resources/renderers/IngressRenderer.tsx +104 -0
- package/src/components/resources/renderers/IstioAuthorizationPolicyRenderer.tsx +175 -0
- package/src/components/resources/renderers/IstioDestinationRuleRenderer.tsx +176 -0
- package/src/components/resources/renderers/IstioGatewayRenderer.tsx +125 -0
- package/src/components/resources/renderers/IstioPeerAuthenticationRenderer.tsx +84 -0
- package/src/components/resources/renderers/IstioServiceEntryRenderer.tsx +112 -0
- package/src/components/resources/renderers/IstioVirtualServiceRenderer.tsx +288 -0
- package/src/components/resources/renderers/JobRenderer.tsx +103 -0
- package/src/components/resources/renderers/KarpenterEC2NodeClassRenderer.tsx +157 -0
- package/src/components/resources/renderers/KarpenterNodeClaimRenderer.tsx +188 -0
- package/src/components/resources/renderers/KarpenterNodePoolRenderer.tsx +148 -0
- package/src/components/resources/renderers/KedaScaledJobRenderer.tsx +90 -0
- package/src/components/resources/renderers/KedaScaledObjectRenderer.tsx +136 -0
- package/src/components/resources/renderers/KedaTriggerAuthRenderer.tsx +151 -0
- package/src/components/resources/renderers/KnativeConfigurationRenderer.tsx +70 -0
- package/src/components/resources/renderers/KnativeEventingRenderer.tsx +309 -0
- package/src/components/resources/renderers/KnativeFlowRenderer.tsx +142 -0
- package/src/components/resources/renderers/KnativeNetworkingRenderer.tsx +232 -0
- package/src/components/resources/renderers/KnativeRevisionRenderer.tsx +97 -0
- package/src/components/resources/renderers/KnativeRouteRenderer.tsx +74 -0
- package/src/components/resources/renderers/KnativeServiceRenderer.tsx +138 -0
- package/src/components/resources/renderers/KnativeSourceRenderer.tsx +220 -0
- package/src/components/resources/renderers/KustomizationRenderer.tsx +151 -0
- package/src/components/resources/renderers/KyvernoPolicyReportRenderer.tsx +352 -0
- package/src/components/resources/renderers/LeaseRenderer.tsx +93 -0
- package/src/components/resources/renderers/NetworkPolicyRenderer.tsx +208 -0
- package/src/components/resources/renderers/NodeRenderer.tsx +282 -0
- package/src/components/resources/renderers/OCIRepositoryRenderer.tsx +153 -0
- package/src/components/resources/renderers/OrderRenderer.tsx +108 -0
- package/src/components/resources/renderers/PVCRenderer.tsx +98 -0
- package/src/components/resources/renderers/PersistentVolumeRenderer.tsx +138 -0
- package/src/components/resources/renderers/PodDisruptionBudgetRenderer.tsx +126 -0
- package/src/components/resources/renderers/PodMonitorRenderer.tsx +63 -0
- package/src/components/resources/renderers/PodRenderer.tsx +677 -0
- package/src/components/resources/renderers/PriorityClassRenderer.tsx +50 -0
- package/src/components/resources/renderers/PrometheusRuleRenderer.tsx +62 -0
- package/src/components/resources/renderers/ReplicaSetRenderer.tsx +71 -0
- package/src/components/resources/renderers/RoleBindingRenderer.tsx +97 -0
- package/src/components/resources/renderers/RoleRenderer.tsx +192 -0
- package/src/components/resources/renderers/RolloutRenderer.tsx +227 -0
- package/src/components/resources/renderers/RuntimeClassRenderer.tsx +75 -0
- package/src/components/resources/renderers/SbomReportRenderer.tsx +98 -0
- package/src/components/resources/renderers/SealedSecretRenderer.tsx +121 -0
- package/src/components/resources/renderers/SecretRenderer.tsx +321 -0
- package/src/components/resources/renderers/SecretStoreRenderer.tsx +111 -0
- package/src/components/resources/renderers/ServiceAccountRenderer.tsx +81 -0
- package/src/components/resources/renderers/ServiceMonitorRenderer.tsx +65 -0
- package/src/components/resources/renderers/ServiceRenderer.tsx +98 -0
- package/src/components/resources/renderers/SimpleRouteRenderer.tsx +195 -0
- package/src/components/resources/renderers/StorageClassRenderer.tsx +82 -0
- package/src/components/resources/renderers/TraefikIngressRouteRenderer.tsx +257 -0
- package/src/components/resources/renderers/VPARenderer.tsx +193 -0
- package/src/components/resources/renderers/VeleroBSLRenderer.tsx +73 -0
- package/src/components/resources/renderers/VeleroBackupRenderer.tsx +193 -0
- package/src/components/resources/renderers/VeleroRestoreRenderer.tsx +161 -0
- package/src/components/resources/renderers/VeleroScheduleRenderer.tsx +134 -0
- package/src/components/resources/renderers/VeleroVSLRenderer.tsx +36 -0
- package/src/components/resources/renderers/VulnerabilityReportRenderer.tsx +347 -0
- package/src/components/resources/renderers/WebhookConfigRenderer.tsx +156 -0
- package/src/components/resources/renderers/WorkflowRenderer.tsx +202 -0
- package/src/components/resources/renderers/WorkflowTemplateRenderer.tsx +91 -0
- package/src/components/resources/renderers/WorkloadRenderer.tsx +311 -0
- package/src/components/resources/renderers/argo-cells.tsx +118 -0
- package/src/components/resources/renderers/certmanager-cells.tsx +164 -0
- package/src/components/resources/renderers/cnpg-cells.tsx +161 -0
- package/src/components/resources/renderers/eso-cells.tsx +115 -0
- package/src/components/resources/renderers/flux-cells.tsx +253 -0
- package/src/components/resources/renderers/index.ts +105 -0
- package/src/components/resources/renderers/istio-cells.tsx +210 -0
- package/src/components/resources/renderers/karpenter-cells.tsx +107 -0
- package/src/components/resources/renderers/keda-cells.tsx +94 -0
- package/src/components/resources/renderers/knative-cells.tsx +396 -0
- package/src/components/resources/renderers/kyverno-cells.tsx +85 -0
- package/src/components/resources/renderers/prometheus-cells.tsx +74 -0
- package/src/components/resources/renderers/traefik-cells.tsx +120 -0
- package/src/components/resources/renderers/trivy-cells.tsx +153 -0
- package/src/components/resources/renderers/trivy-shared.tsx +67 -0
- package/src/components/resources/renderers/velero-cells.tsx +164 -0
- package/src/components/resources/resource-utils-argo.ts +155 -0
- package/src/components/resources/resource-utils-certmanager.ts +198 -0
- package/src/components/resources/resource-utils-cnpg.ts +344 -0
- package/src/components/resources/resource-utils-eso.ts +385 -0
- package/src/components/resources/resource-utils-flux.ts +186 -0
- package/src/components/resources/resource-utils-istio.ts +372 -0
- package/src/components/resources/resource-utils-karpenter.ts +150 -0
- package/src/components/resources/resource-utils-keda.ts +203 -0
- package/src/components/resources/resource-utils-knative.ts +218 -0
- package/src/components/resources/resource-utils-kyverno.ts +224 -0
- package/src/components/resources/resource-utils-prometheus.ts +159 -0
- package/src/components/resources/resource-utils-traefik.ts +180 -0
- package/src/components/resources/resource-utils-trivy.ts +146 -0
- package/src/components/resources/resource-utils-velero.ts +293 -0
- package/src/components/resources/resource-utils.ts +1558 -0
- package/src/components/shared/EditableYamlView.tsx +302 -0
- package/src/components/shared/ResourceActionsBar.tsx +924 -0
- package/src/components/shared/ResourceRendererDispatch.tsx +557 -0
- package/src/components/shared/index.ts +3 -0
- package/src/components/timeline/index.ts +1 -0
- package/src/components/timeline/shared.tsx +614 -0
- package/src/components/topology/GroupNode.tsx +198 -0
- package/src/components/topology/K8sResourceNode.tsx +440 -0
- package/src/components/topology/TopologyControls.tsx +62 -0
- package/src/components/topology/TopologyFilterSidebar.tsx +377 -0
- package/src/components/topology/TopologyGraph.tsx +748 -0
- package/src/components/topology/TopologySearch.tsx +304 -0
- package/src/components/topology/index.ts +7 -0
- package/src/components/topology/layout.ts +734 -0
- package/src/components/topology/layout.worker.ts +272 -0
- package/src/components/topology/topology.css +129 -0
- package/src/components/ui/CodeViewer.tsx +451 -0
- package/src/components/ui/ConfirmDialog.tsx +188 -0
- package/src/components/ui/ForceDeleteConfirmDialog.tsx +57 -0
- package/src/components/ui/HealthRing.tsx +72 -0
- package/src/components/ui/MetricsChart.tsx +259 -0
- package/src/components/ui/ResourceBar.tsx +68 -0
- package/src/components/ui/Toast.tsx +225 -0
- package/src/components/ui/Tooltip.tsx +165 -0
- package/src/components/ui/YamlEditor.tsx +280 -0
- package/src/components/ui/drawer-components.tsx +792 -0
- package/src/components/ui/index.ts +10 -0
- package/src/components/workload/ResourceDetailDrawer.tsx +158 -0
- package/src/components/workload/WorkloadView.tsx +1109 -0
- package/src/components/workload/index.ts +2 -0
- package/src/hooks/index.ts +9 -0
- package/src/hooks/useAnimatedUnmount.ts +30 -0
- package/src/hooks/useKeyboardShortcuts.tsx +336 -0
- package/src/hooks/useRefreshAnimation.ts +58 -0
- package/src/index.ts +35 -0
- package/src/types/core.ts +894 -0
- package/src/types/gitops.ts +458 -0
- package/src/types/index.ts +2 -0
- package/src/utils/animation.ts +40 -0
- package/src/utils/api-resources.ts +185 -0
- package/src/utils/badge-colors.ts +399 -0
- package/src/utils/context-name.ts +72 -0
- package/src/utils/download.ts +19 -0
- package/src/utils/format.ts +233 -0
- package/src/utils/index.ts +10 -0
- package/src/utils/log-format.ts +300 -0
- package/src/utils/navigation.ts +119 -0
- package/src/utils/resource-hierarchy.ts +630 -0
- package/src/utils/resource-icons.ts +206 -0
- package/src/vite-env.d.ts +1 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { clsx } from 'clsx'
|
|
2
|
+
import {
|
|
3
|
+
getPodStatus,
|
|
4
|
+
getWorkloadStatus,
|
|
5
|
+
getJobStatus,
|
|
6
|
+
getCronJobStatus,
|
|
7
|
+
getHPAStatus,
|
|
8
|
+
getServiceStatus,
|
|
9
|
+
getNodeStatus,
|
|
10
|
+
getPVCStatus,
|
|
11
|
+
getRolloutStatus,
|
|
12
|
+
getWorkflowStatus,
|
|
13
|
+
getCertificateStatus,
|
|
14
|
+
getPVStatus,
|
|
15
|
+
getClusterIssuerStatus,
|
|
16
|
+
getIssuerStatus,
|
|
17
|
+
getOrderState,
|
|
18
|
+
getChallengeState,
|
|
19
|
+
getCertificateRequestStatus,
|
|
20
|
+
getGatewayStatus,
|
|
21
|
+
getGatewayClassStatus,
|
|
22
|
+
getRouteStatus,
|
|
23
|
+
getSealedSecretStatus,
|
|
24
|
+
getPDBStatus,
|
|
25
|
+
getGitRepositoryStatus,
|
|
26
|
+
getOCIRepositoryStatus,
|
|
27
|
+
getHelmRepositoryStatus,
|
|
28
|
+
getKustomizationStatus,
|
|
29
|
+
getFluxHelmReleaseStatus,
|
|
30
|
+
getFluxAlertStatus,
|
|
31
|
+
getArgoApplicationStatus,
|
|
32
|
+
getVulnerabilityReportStatus,
|
|
33
|
+
getConfigAuditReportStatus,
|
|
34
|
+
getExposedSecretReportStatus,
|
|
35
|
+
getRbacAssessmentReportStatus,
|
|
36
|
+
getClusterComplianceReportStatus,
|
|
37
|
+
getSbomReportStatus,
|
|
38
|
+
} from '../resources/resource-utils'
|
|
39
|
+
import {
|
|
40
|
+
LabelsSection,
|
|
41
|
+
AnnotationsSection,
|
|
42
|
+
MetadataSection,
|
|
43
|
+
EventsSection,
|
|
44
|
+
RelatedResourcesSection,
|
|
45
|
+
ExternalLinksSection,
|
|
46
|
+
AppInfoSection,
|
|
47
|
+
} from '../ui/drawer-components'
|
|
48
|
+
import { getNodePoolStatus, getNodeClaimStatus, getEC2NodeClassStatus } from '../resources/resource-utils-karpenter'
|
|
49
|
+
import { getScaledObjectStatus, getScaledJobStatus } from '../resources/resource-utils-keda'
|
|
50
|
+
import { getServiceMonitorStatus, getPrometheusRuleStatus, getPodMonitorStatus } from '../resources/resource-utils-prometheus'
|
|
51
|
+
import { getPolicyReportStatus, getKyvernoPolicyStatus } from '../resources/resource-utils-kyverno'
|
|
52
|
+
import { getBackupStatus, getRestoreStatus, getScheduleStatus, getBSLStatus } from '../resources/resource-utils-velero'
|
|
53
|
+
import {
|
|
54
|
+
getVirtualServiceStatus,
|
|
55
|
+
getDestinationRuleStatus,
|
|
56
|
+
getIstioGatewayStatus,
|
|
57
|
+
getServiceEntryStatus,
|
|
58
|
+
getPeerAuthenticationStatus,
|
|
59
|
+
getAuthorizationPolicyStatus,
|
|
60
|
+
} from '../resources/resource-utils-istio'
|
|
61
|
+
import { getCNPGClusterStatus, getCNPGBackupStatus, getCNPGScheduledBackupStatus, getCNPGPoolerStatus } from '../resources/resource-utils-cnpg'
|
|
62
|
+
import { getExternalSecretStatus, getClusterExternalSecretStatus, getSecretStoreStatus, getClusterSecretStoreStatus } from '../resources/resource-utils-eso'
|
|
63
|
+
import {
|
|
64
|
+
getKnativeConditionStatus,
|
|
65
|
+
getRevisionStatus,
|
|
66
|
+
} from '../resources/resource-utils-knative'
|
|
67
|
+
import {
|
|
68
|
+
PodRenderer,
|
|
69
|
+
WorkloadRenderer,
|
|
70
|
+
ReplicaSetRenderer,
|
|
71
|
+
ServiceRenderer,
|
|
72
|
+
IngressRenderer,
|
|
73
|
+
ConfigMapRenderer,
|
|
74
|
+
SecretRenderer,
|
|
75
|
+
JobRenderer,
|
|
76
|
+
CronJobRenderer,
|
|
77
|
+
HPARenderer,
|
|
78
|
+
NodeRenderer,
|
|
79
|
+
PVCRenderer,
|
|
80
|
+
RolloutRenderer,
|
|
81
|
+
CertificateRenderer,
|
|
82
|
+
WorkflowRenderer,
|
|
83
|
+
PersistentVolumeRenderer,
|
|
84
|
+
StorageClassRenderer,
|
|
85
|
+
CertificateRequestRenderer,
|
|
86
|
+
ClusterIssuerRenderer,
|
|
87
|
+
IssuerRenderer,
|
|
88
|
+
OrderRenderer,
|
|
89
|
+
ChallengeRenderer,
|
|
90
|
+
GatewayRenderer,
|
|
91
|
+
GatewayClassRenderer,
|
|
92
|
+
HTTPRouteRenderer,
|
|
93
|
+
GRPCRouteRenderer,
|
|
94
|
+
SimpleRouteRenderer,
|
|
95
|
+
SealedSecretRenderer,
|
|
96
|
+
WorkflowTemplateRenderer,
|
|
97
|
+
NetworkPolicyRenderer,
|
|
98
|
+
PodDisruptionBudgetRenderer,
|
|
99
|
+
ServiceAccountRenderer,
|
|
100
|
+
RoleRenderer,
|
|
101
|
+
RoleBindingRenderer,
|
|
102
|
+
WebhookConfigRenderer,
|
|
103
|
+
EventRenderer,
|
|
104
|
+
GenericRenderer,
|
|
105
|
+
GitRepositoryRenderer,
|
|
106
|
+
OCIRepositoryRenderer,
|
|
107
|
+
HelmRepositoryRenderer,
|
|
108
|
+
KustomizationRenderer,
|
|
109
|
+
FluxHelmReleaseRenderer,
|
|
110
|
+
AlertRenderer,
|
|
111
|
+
ArgoApplicationRenderer,
|
|
112
|
+
VulnerabilityReportRenderer,
|
|
113
|
+
ConfigAuditReportRenderer,
|
|
114
|
+
ExposedSecretReportRenderer,
|
|
115
|
+
ClusterComplianceReportRenderer,
|
|
116
|
+
SbomReportRenderer,
|
|
117
|
+
KarpenterNodePoolRenderer,
|
|
118
|
+
KarpenterNodeClaimRenderer,
|
|
119
|
+
KarpenterEC2NodeClassRenderer,
|
|
120
|
+
KedaScaledObjectRenderer,
|
|
121
|
+
KedaScaledJobRenderer,
|
|
122
|
+
KedaTriggerAuthRenderer,
|
|
123
|
+
VPARenderer,
|
|
124
|
+
ServiceMonitorRenderer,
|
|
125
|
+
PrometheusRuleRenderer,
|
|
126
|
+
PodMonitorRenderer,
|
|
127
|
+
PolicyReportRenderer,
|
|
128
|
+
KyvernoPolicyRenderer,
|
|
129
|
+
VeleroBackupRenderer,
|
|
130
|
+
VeleroRestoreRenderer,
|
|
131
|
+
VeleroScheduleRenderer,
|
|
132
|
+
VeleroBSLRenderer,
|
|
133
|
+
VeleroVSLRenderer,
|
|
134
|
+
CNPGClusterRenderer,
|
|
135
|
+
CNPGBackupRenderer,
|
|
136
|
+
CNPGScheduledBackupRenderer,
|
|
137
|
+
CNPGPoolerRenderer,
|
|
138
|
+
ExternalSecretRenderer,
|
|
139
|
+
ClusterExternalSecretRenderer,
|
|
140
|
+
SecretStoreRenderer,
|
|
141
|
+
IstioVirtualServiceRenderer,
|
|
142
|
+
IstioDestinationRuleRenderer,
|
|
143
|
+
IstioGatewayRenderer,
|
|
144
|
+
IstioServiceEntryRenderer,
|
|
145
|
+
IstioPeerAuthenticationRenderer,
|
|
146
|
+
IstioAuthorizationPolicyRenderer,
|
|
147
|
+
KnativeServiceRenderer,
|
|
148
|
+
KnativeRevisionRenderer,
|
|
149
|
+
KnativeRouteRenderer,
|
|
150
|
+
KnativeConfigurationRenderer,
|
|
151
|
+
KnativeIngressRenderer,
|
|
152
|
+
KnativeCertificateRenderer,
|
|
153
|
+
ServerlessServiceRenderer,
|
|
154
|
+
BrokerRenderer,
|
|
155
|
+
TriggerRenderer,
|
|
156
|
+
EventTypeRenderer,
|
|
157
|
+
ChannelRenderer,
|
|
158
|
+
InMemoryChannelRenderer,
|
|
159
|
+
SubscriptionRenderer,
|
|
160
|
+
PingSourceRenderer,
|
|
161
|
+
ApiServerSourceRenderer,
|
|
162
|
+
ContainerSourceRenderer,
|
|
163
|
+
SinkBindingRenderer,
|
|
164
|
+
SequenceRenderer,
|
|
165
|
+
ParallelRenderer,
|
|
166
|
+
DomainMappingRenderer,
|
|
167
|
+
IngressClassRenderer,
|
|
168
|
+
PriorityClassRenderer,
|
|
169
|
+
RuntimeClassRenderer,
|
|
170
|
+
LeaseRenderer,
|
|
171
|
+
TraefikIngressRouteRenderer,
|
|
172
|
+
} from '../resources/renderers'
|
|
173
|
+
import type { SelectedResource, Relationships, ResourceRef, SecretCertificateInfo } from '../../types'
|
|
174
|
+
|
|
175
|
+
// Known resource types with specific renderers (module-level to avoid re-allocation)
|
|
176
|
+
const KNOWN_KINDS = new Set([
|
|
177
|
+
'pods', 'deployments', 'statefulsets', 'daemonsets', 'replicasets',
|
|
178
|
+
'services', 'ingresses', 'configmaps', 'secrets', 'jobs', 'cronjobs',
|
|
179
|
+
'hpas', 'horizontalpodautoscalers', 'nodes', 'persistentvolumeclaims',
|
|
180
|
+
'rollouts', 'certificates', 'workflows', 'persistentvolumes',
|
|
181
|
+
'storageclasses', 'certificaterequests', 'clusterissuers', 'issuers',
|
|
182
|
+
'orders', 'challenges',
|
|
183
|
+
'gateways', 'gatewayclasses', 'httproutes', 'grpcroutes', 'tcproutes', 'tlsroutes', 'sealedsecrets', 'workflowtemplates',
|
|
184
|
+
'networkpolicies', 'poddisruptionbudgets', 'serviceaccounts',
|
|
185
|
+
'roles', 'clusterroles', 'rolebindings', 'clusterrolebindings',
|
|
186
|
+
'events', 'gitrepositories', 'ocirepositories', 'helmrepositories',
|
|
187
|
+
'kustomizations', 'helmreleases', 'alerts', 'applications',
|
|
188
|
+
'nodepools', 'nodeclaims', 'ec2nodeclasses', 'scaledobjects', 'scaledjobs',
|
|
189
|
+
'triggerauthentications', 'clustertriggerauthentications',
|
|
190
|
+
'servicemonitors', 'prometheusrules', 'podmonitors',
|
|
191
|
+
'policyreports', 'clusterpolicyreports', 'kyvernopolicies', 'clusterpolicies',
|
|
192
|
+
'vulnerabilityreports', 'configauditreports', 'exposedsecretreports',
|
|
193
|
+
'rbacassessmentreports', 'clusterrbacassessmentreports',
|
|
194
|
+
'clustercompliancereports', 'sbomreports', 'clustersbomreports',
|
|
195
|
+
'infraassessmentreports', 'clusterinfraassessmentreports',
|
|
196
|
+
'verticalpodautoscalers',
|
|
197
|
+
'backups', 'restores', 'schedules', 'backupstoragelocations', 'volumesnapshotlocations',
|
|
198
|
+
'externalsecrets', 'clusterexternalsecrets', 'secretstores', 'clustersecretstores',
|
|
199
|
+
'clusters', 'scheduledbackups', 'poolers',
|
|
200
|
+
'virtualservices', 'destinationrules', 'serviceentries',
|
|
201
|
+
'peerauthentications', 'authorizationpolicies',
|
|
202
|
+
'mutatingwebhookconfigurations', 'validatingwebhookconfigurations',
|
|
203
|
+
'ingressclasses', 'priorityclasses', 'runtimeclasses', 'leases',
|
|
204
|
+
'knativeservices', 'knativeconfigurations', 'knativerevisions', 'knativeroutes',
|
|
205
|
+
'brokers', 'triggers', 'eventtypes', 'pingsources', 'apiserversources', 'containersources', 'sinkbindings',
|
|
206
|
+
'channels', 'inmemorychannels', 'subscriptions', 'sequences', 'parallels',
|
|
207
|
+
'knativeingresses', 'knativecertificates', 'serverlessservices', 'domainmappings',
|
|
208
|
+
'ingressroutes', 'ingressroutetcps', 'ingressrouteudps',
|
|
209
|
+
])
|
|
210
|
+
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// RESOURCE CONTENT - Delegates to specific renderers
|
|
213
|
+
// ============================================================================
|
|
214
|
+
|
|
215
|
+
interface ResourceRendererDispatchProps {
|
|
216
|
+
resource: SelectedResource
|
|
217
|
+
data: any
|
|
218
|
+
relationships?: Relationships
|
|
219
|
+
certificateInfo?: SecretCertificateInfo
|
|
220
|
+
onCopy: (text: string, key: string) => void
|
|
221
|
+
copied: string | null
|
|
222
|
+
onNavigate?: (ref: ResourceRef) => void
|
|
223
|
+
onSaveSecretValue?: (yaml: string) => Promise<void>
|
|
224
|
+
isSavingSecret?: boolean
|
|
225
|
+
/** Set to false to skip common trailing sections (events, labels, annotations, metadata, metrics, related) */
|
|
226
|
+
showCommonSections?: boolean
|
|
227
|
+
/** Set to false to skip Prometheus charts (useful when a parent view has a dedicated Metrics tab) */
|
|
228
|
+
showMetrics?: boolean
|
|
229
|
+
/** When provided, container-level Logs buttons call this instead of opening the dock */
|
|
230
|
+
onOpenLogs?: (podName: string, containerName: string) => void
|
|
231
|
+
/** Optional hint shown in the Events section (e.g. link to Timeline tab) */
|
|
232
|
+
eventsHint?: React.ReactNode
|
|
233
|
+
/** When provided, sidebar sections (related resources, events, labels, annotations, metadata) are passed to this render prop instead of being rendered inline */
|
|
234
|
+
renderSidebar?: (sections: React.ReactNode) => React.ReactNode
|
|
235
|
+
/** Resource events — injected by the platform wrapper */
|
|
236
|
+
events?: any[]
|
|
237
|
+
/** Whether events are still loading */
|
|
238
|
+
eventsLoading?: boolean
|
|
239
|
+
/** Render prop for Prometheus metrics charts — injected by the platform wrapper */
|
|
240
|
+
renderMetrics?: (props: { kind: string; namespace: string; name: string }) => React.ReactNode
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export function ResourceRendererDispatch({
|
|
244
|
+
resource,
|
|
245
|
+
data,
|
|
246
|
+
relationships,
|
|
247
|
+
certificateInfo,
|
|
248
|
+
onCopy,
|
|
249
|
+
copied,
|
|
250
|
+
onNavigate,
|
|
251
|
+
onSaveSecretValue,
|
|
252
|
+
isSavingSecret,
|
|
253
|
+
showCommonSections = true,
|
|
254
|
+
showMetrics = true,
|
|
255
|
+
onOpenLogs,
|
|
256
|
+
eventsHint,
|
|
257
|
+
renderSidebar,
|
|
258
|
+
events,
|
|
259
|
+
eventsLoading,
|
|
260
|
+
renderMetrics,
|
|
261
|
+
}: ResourceRendererDispatchProps) {
|
|
262
|
+
const kind = resource.kind.toLowerCase()
|
|
263
|
+
|
|
264
|
+
const isKnownKind = KNOWN_KINDS.has(kind)
|
|
265
|
+
|
|
266
|
+
const sidebarContent = showCommonSections && (
|
|
267
|
+
<>
|
|
268
|
+
<RelatedResourcesSection relationships={relationships} onNavigate={onNavigate} />
|
|
269
|
+
{kind !== 'events' && <EventsSection events={events || []} isLoading={eventsLoading ?? false} hint={eventsHint} />}
|
|
270
|
+
<LabelsSection data={data} />
|
|
271
|
+
<AnnotationsSection data={data} />
|
|
272
|
+
<MetadataSection data={data} />
|
|
273
|
+
</>
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
return (
|
|
277
|
+
<div className={renderSidebar ? 'lg:flex' : ''}>
|
|
278
|
+
<div className={clsx('p-4 space-y-4', renderSidebar && 'lg:flex-1 lg:min-w-0')}>
|
|
279
|
+
{/* Kind-specific content - delegates to modular renderers */}
|
|
280
|
+
{kind === 'pods' && <PodRenderer data={data} onCopy={onCopy} copied={copied} onNavigate={onNavigate} onOpenLogs={onOpenLogs} />}
|
|
281
|
+
{['deployments', 'statefulsets', 'daemonsets'].includes(kind) && <WorkloadRenderer kind={kind} data={data} onNavigate={onNavigate} />}
|
|
282
|
+
{kind === 'replicasets' && <ReplicaSetRenderer data={data} />}
|
|
283
|
+
{kind === 'services' && !data?.apiVersion?.includes('serving.knative.dev') && <ServiceRenderer data={data} onCopy={onCopy} copied={copied} />}
|
|
284
|
+
{kind === 'ingresses' && !data?.apiVersion?.includes('networking.internal.knative.dev') && <IngressRenderer data={data} onNavigate={onNavigate} />}
|
|
285
|
+
{kind === 'configmaps' && <ConfigMapRenderer data={data} />}
|
|
286
|
+
{kind === 'secrets' && <SecretRenderer data={data} certificateInfo={certificateInfo} resourceData={data} onSaveSecretValue={onSaveSecretValue} isSaving={isSavingSecret} />}
|
|
287
|
+
{kind === 'jobs' && <JobRenderer data={data} />}
|
|
288
|
+
{kind === 'cronjobs' && <CronJobRenderer data={data} onNavigate={onNavigate} />}
|
|
289
|
+
{(kind === 'hpas' || kind === 'horizontalpodautoscalers') && <HPARenderer data={data} onNavigate={onNavigate} />}
|
|
290
|
+
{kind === 'nodes' && <NodeRenderer data={data} relationships={relationships} />}
|
|
291
|
+
{kind === 'persistentvolumeclaims' && <PVCRenderer data={data} onNavigate={onNavigate} />}
|
|
292
|
+
{kind === 'rollouts' && <RolloutRenderer data={data} />}
|
|
293
|
+
{kind === 'certificates' && !data?.apiVersion?.includes('networking.internal.knative.dev') && <CertificateRenderer data={data} />}
|
|
294
|
+
{kind === 'workflows' && <WorkflowRenderer data={data} />}
|
|
295
|
+
{kind === 'persistentvolumes' && <PersistentVolumeRenderer data={data} onNavigate={onNavigate} />}
|
|
296
|
+
{kind === 'storageclasses' && <StorageClassRenderer data={data} />}
|
|
297
|
+
{kind === 'certificaterequests' && <CertificateRequestRenderer data={data} />}
|
|
298
|
+
{kind === 'clusterissuers' && <ClusterIssuerRenderer data={data} />}
|
|
299
|
+
{kind === 'issuers' && <IssuerRenderer data={data} />}
|
|
300
|
+
{kind === 'orders' && <OrderRenderer data={data} />}
|
|
301
|
+
{kind === 'challenges' && <ChallengeRenderer data={data} />}
|
|
302
|
+
{kind === 'gateways' && (data.apiVersion?.includes('networking.istio.io') ? <IstioGatewayRenderer data={data} /> : <GatewayRenderer data={data} onNavigate={onNavigate} />)}
|
|
303
|
+
{kind === 'gatewayclasses' && <GatewayClassRenderer data={data} />}
|
|
304
|
+
{kind === 'httproutes' && <HTTPRouteRenderer data={data} onNavigate={onNavigate} />}
|
|
305
|
+
{kind === 'grpcroutes' && <GRPCRouteRenderer data={data} onNavigate={onNavigate} />}
|
|
306
|
+
{kind === 'tcproutes' && <SimpleRouteRenderer data={data} kind="TCPRoute" onNavigate={onNavigate} />}
|
|
307
|
+
{kind === 'tlsroutes' && <SimpleRouteRenderer data={data} kind="TLSRoute" onNavigate={onNavigate} />}
|
|
308
|
+
{kind === 'sealedsecrets' && <SealedSecretRenderer data={data} />}
|
|
309
|
+
{kind === 'workflowtemplates' && <WorkflowTemplateRenderer data={data} />}
|
|
310
|
+
{kind === 'networkpolicies' && <NetworkPolicyRenderer data={data} />}
|
|
311
|
+
{kind === 'poddisruptionbudgets' && <PodDisruptionBudgetRenderer data={data} />}
|
|
312
|
+
{kind === 'serviceaccounts' && <ServiceAccountRenderer data={data} />}
|
|
313
|
+
{(kind === 'roles' || kind === 'clusterroles') && <RoleRenderer data={data} />}
|
|
314
|
+
{(kind === 'rolebindings' || kind === 'clusterrolebindings') && <RoleBindingRenderer data={data} onNavigate={onNavigate} />}
|
|
315
|
+
{kind === 'events' && <EventRenderer data={data} onNavigate={onNavigate} />}
|
|
316
|
+
{kind === 'gitrepositories' && <GitRepositoryRenderer data={data} />}
|
|
317
|
+
{kind === 'ocirepositories' && <OCIRepositoryRenderer data={data} />}
|
|
318
|
+
{kind === 'helmrepositories' && <HelmRepositoryRenderer data={data} />}
|
|
319
|
+
{kind === 'kustomizations' && <KustomizationRenderer data={data} />}
|
|
320
|
+
{kind === 'helmreleases' && <FluxHelmReleaseRenderer data={data} />}
|
|
321
|
+
{kind === 'alerts' && <AlertRenderer data={data} />}
|
|
322
|
+
{kind === 'applications' && <ArgoApplicationRenderer data={data} />}
|
|
323
|
+
{kind === 'nodepools' && <KarpenterNodePoolRenderer data={data} onNavigate={onNavigate} />}
|
|
324
|
+
{kind === 'nodeclaims' && <KarpenterNodeClaimRenderer data={data} onNavigate={onNavigate} />}
|
|
325
|
+
{kind === 'ec2nodeclasses' && <KarpenterEC2NodeClassRenderer data={data} />}
|
|
326
|
+
{kind === 'scaledobjects' && <KedaScaledObjectRenderer data={data} onNavigate={onNavigate} />}
|
|
327
|
+
{kind === 'scaledjobs' && <KedaScaledJobRenderer data={data} />}
|
|
328
|
+
{(kind === 'triggerauthentications' || kind === 'clustertriggerauthentications') && <KedaTriggerAuthRenderer data={data} onNavigate={onNavigate} />}
|
|
329
|
+
{kind === 'vulnerabilityreports' && <VulnerabilityReportRenderer data={data} />}
|
|
330
|
+
{kind === 'configauditreports' && <ConfigAuditReportRenderer data={data} />}
|
|
331
|
+
{kind === 'exposedsecretreports' && <ExposedSecretReportRenderer data={data} />}
|
|
332
|
+
{(kind === 'rbacassessmentreports' || kind === 'clusterrbacassessmentreports' || kind === 'infraassessmentreports' || kind === 'clusterinfraassessmentreports') && <ConfigAuditReportRenderer data={data} />}
|
|
333
|
+
{kind === 'clustercompliancereports' && <ClusterComplianceReportRenderer data={data} />}
|
|
334
|
+
{(kind === 'sbomreports' || kind === 'clustersbomreports') && <SbomReportRenderer data={data} />}
|
|
335
|
+
{kind === 'verticalpodautoscalers' && <VPARenderer data={data} onNavigate={onNavigate} />}
|
|
336
|
+
{kind === 'servicemonitors' && <ServiceMonitorRenderer data={data} />}
|
|
337
|
+
{kind === 'prometheusrules' && <PrometheusRuleRenderer data={data} />}
|
|
338
|
+
{kind === 'podmonitors' && <PodMonitorRenderer data={data} />}
|
|
339
|
+
{(kind === 'policyreports' || kind === 'clusterpolicyreports') && <PolicyReportRenderer data={data} />}
|
|
340
|
+
{(kind === 'kyvernopolicies' || kind === 'clusterpolicies') && <KyvernoPolicyRenderer data={data} />}
|
|
341
|
+
{kind === 'backups' && data.apiVersion?.includes('cnpg.io') && <CNPGBackupRenderer data={data} onNavigate={onNavigate} />}
|
|
342
|
+
{kind === 'backups' && !data.apiVersion?.includes('cnpg.io') && <VeleroBackupRenderer data={data} />}
|
|
343
|
+
{kind === 'restores' && <VeleroRestoreRenderer data={data} />}
|
|
344
|
+
{kind === 'schedules' && <VeleroScheduleRenderer data={data} />}
|
|
345
|
+
{kind === 'backupstoragelocations' && <VeleroBSLRenderer data={data} />}
|
|
346
|
+
{kind === 'volumesnapshotlocations' && <VeleroVSLRenderer data={data} />}
|
|
347
|
+
{kind === 'externalsecrets' && <ExternalSecretRenderer data={data} onNavigate={onNavigate} />}
|
|
348
|
+
{kind === 'clusterexternalsecrets' && <ClusterExternalSecretRenderer data={data} />}
|
|
349
|
+
{(kind === 'secretstores' || kind === 'clustersecretstores') && <SecretStoreRenderer data={data} />}
|
|
350
|
+
{kind === 'clusters' && <CNPGClusterRenderer data={data} onNavigate={onNavigate} />}
|
|
351
|
+
{kind === 'scheduledbackups' && <CNPGScheduledBackupRenderer data={data} onNavigate={onNavigate} />}
|
|
352
|
+
{kind === 'poolers' && <CNPGPoolerRenderer data={data} onNavigate={onNavigate} />}
|
|
353
|
+
{kind === 'virtualservices' && <IstioVirtualServiceRenderer data={data} onNavigate={onNavigate} />}
|
|
354
|
+
{kind === 'destinationrules' && <IstioDestinationRuleRenderer data={data} onNavigate={onNavigate} />}
|
|
355
|
+
{kind === 'serviceentries' && <IstioServiceEntryRenderer data={data} />}
|
|
356
|
+
{kind === 'peerauthentications' && <IstioPeerAuthenticationRenderer data={data} />}
|
|
357
|
+
{kind === 'authorizationpolicies' && <IstioAuthorizationPolicyRenderer data={data} />}
|
|
358
|
+
{kind === 'mutatingwebhookconfigurations' && <WebhookConfigRenderer data={data} isMutating />}
|
|
359
|
+
{kind === 'validatingwebhookconfigurations' && <WebhookConfigRenderer data={data} />}
|
|
360
|
+
{kind === 'ingressclasses' && <IngressClassRenderer data={data} />}
|
|
361
|
+
{kind === 'priorityclasses' && <PriorityClassRenderer data={data} />}
|
|
362
|
+
{kind === 'runtimeclasses' && <RuntimeClassRenderer data={data} />}
|
|
363
|
+
{kind === 'leases' && <LeaseRenderer data={data} />}
|
|
364
|
+
{/* Knative Serving */}
|
|
365
|
+
{(kind === 'services' && data?.apiVersion?.includes('serving.knative.dev')) && <KnativeServiceRenderer data={data} onNavigate={onNavigate} />}
|
|
366
|
+
{kind === 'knativeservices' && <KnativeServiceRenderer data={data} onNavigate={onNavigate} />}
|
|
367
|
+
{kind === 'knativeconfigurations' && <KnativeConfigurationRenderer data={data} onNavigate={onNavigate} />}
|
|
368
|
+
{kind === 'knativerevisions' && <KnativeRevisionRenderer data={data} onNavigate={onNavigate} />}
|
|
369
|
+
{kind === 'knativeroutes' && <KnativeRouteRenderer data={data} onNavigate={onNavigate} />}
|
|
370
|
+
{(kind === 'ingresses' && data?.apiVersion?.includes('networking.internal.knative.dev')) && <KnativeIngressRenderer data={data} />}
|
|
371
|
+
{kind === 'knativeingresses' && <KnativeIngressRenderer data={data} />}
|
|
372
|
+
{(kind === 'certificates' && data?.apiVersion?.includes('networking.internal.knative.dev')) && <KnativeCertificateRenderer data={data} />}
|
|
373
|
+
{kind === 'knativecertificates' && <KnativeCertificateRenderer data={data} />}
|
|
374
|
+
{kind === 'serverlessservices' && <ServerlessServiceRenderer data={data} onNavigate={onNavigate} />}
|
|
375
|
+
{kind === 'domainmappings' && <DomainMappingRenderer data={data} onNavigate={onNavigate} />}
|
|
376
|
+
{/* Knative Eventing */}
|
|
377
|
+
{kind === 'brokers' && <BrokerRenderer data={data} onNavigate={onNavigate} />}
|
|
378
|
+
{kind === 'triggers' && <TriggerRenderer data={data} onNavigate={onNavigate} />}
|
|
379
|
+
{kind === 'pingsources' && <PingSourceRenderer data={data} onNavigate={onNavigate} />}
|
|
380
|
+
{kind === 'apiserversources' && <ApiServerSourceRenderer data={data} onNavigate={onNavigate} />}
|
|
381
|
+
{kind === 'containersources' && <ContainerSourceRenderer data={data} onNavigate={onNavigate} />}
|
|
382
|
+
{kind === 'sinkbindings' && <SinkBindingRenderer data={data} onNavigate={onNavigate} />}
|
|
383
|
+
{kind === 'eventtypes' && <EventTypeRenderer data={data} />}
|
|
384
|
+
{kind === 'channels' && <ChannelRenderer data={data} onNavigate={onNavigate} />}
|
|
385
|
+
{kind === 'inmemorychannels' && <InMemoryChannelRenderer data={data} onNavigate={onNavigate} />}
|
|
386
|
+
{kind === 'subscriptions' && <SubscriptionRenderer data={data} onNavigate={onNavigate} />}
|
|
387
|
+
{kind === 'sequences' && <SequenceRenderer data={data} onNavigate={onNavigate} />}
|
|
388
|
+
{kind === 'parallels' && <ParallelRenderer data={data} onNavigate={onNavigate} />}
|
|
389
|
+
|
|
390
|
+
{/* Traefik */}
|
|
391
|
+
{(kind === 'ingressroutes' || kind === 'ingressroutetcps' || kind === 'ingressrouteudps') && <TraefikIngressRouteRenderer data={data} onNavigate={onNavigate} />}
|
|
392
|
+
|
|
393
|
+
{/* Generic renderer for CRDs and unknown resource types */}
|
|
394
|
+
{!isKnownKind && <GenericRenderer data={data} />}
|
|
395
|
+
|
|
396
|
+
{/* Common sections - can be disabled when parent handles them separately */}
|
|
397
|
+
{showCommonSections && (
|
|
398
|
+
<>
|
|
399
|
+
<AppInfoSection data={data} />
|
|
400
|
+
<ExternalLinksSection data={data} />
|
|
401
|
+
|
|
402
|
+
{/* Prometheus Metrics Charts — skip for Pending pods, and when parent has dedicated Metrics tab */}
|
|
403
|
+
{showMetrics && renderMetrics && !(kind === 'pods' && data?.status?.phase === 'Pending') && (
|
|
404
|
+
renderMetrics({ kind: data?.kind || resource.kind, namespace: resource.namespace, name: resource.name })
|
|
405
|
+
)}
|
|
406
|
+
|
|
407
|
+
{/* Sidebar sections rendered inline when no renderSidebar */}
|
|
408
|
+
{!renderSidebar && sidebarContent}
|
|
409
|
+
</>
|
|
410
|
+
)}
|
|
411
|
+
</div>
|
|
412
|
+
{renderSidebar && sidebarContent && renderSidebar(sidebarContent)}
|
|
413
|
+
</div>
|
|
414
|
+
)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// ============================================================================
|
|
418
|
+
// RESOURCE STATUS HELPER
|
|
419
|
+
// ============================================================================
|
|
420
|
+
|
|
421
|
+
export function getResourceStatus(kind: string, data: any): { text: string; color: string } | null {
|
|
422
|
+
if (!data) return null
|
|
423
|
+
const k = kind.toLowerCase()
|
|
424
|
+
|
|
425
|
+
if (k === 'pods') return getPodStatus(data)
|
|
426
|
+
if (['deployments', 'statefulsets', 'replicasets', 'daemonsets'].includes(k)) return getWorkloadStatus(data, k)
|
|
427
|
+
if (k === 'services') {
|
|
428
|
+
if (data.apiVersion?.includes('serving.knative.dev')) {
|
|
429
|
+
const status = getKnativeConditionStatus(data)
|
|
430
|
+
return { text: status.text, color: status.color }
|
|
431
|
+
}
|
|
432
|
+
return getServiceStatus(data)
|
|
433
|
+
}
|
|
434
|
+
if (k === 'jobs') return getJobStatus(data)
|
|
435
|
+
if (k === 'cronjobs') return getCronJobStatus(data)
|
|
436
|
+
if (k === 'hpas' || k === 'horizontalpodautoscalers') return getHPAStatus(data)
|
|
437
|
+
if (k === 'nodes') return getNodeStatus(data)
|
|
438
|
+
if (k === 'persistentvolumeclaims') return getPVCStatus(data)
|
|
439
|
+
if (k === 'rollouts') return getRolloutStatus(data)
|
|
440
|
+
if (k === 'workflows') return getWorkflowStatus(data)
|
|
441
|
+
if (k === 'certificates') {
|
|
442
|
+
if (data.apiVersion?.includes('networking.internal.knative.dev')) {
|
|
443
|
+
const status = getKnativeConditionStatus(data)
|
|
444
|
+
return { text: status.text, color: status.color }
|
|
445
|
+
}
|
|
446
|
+
return getCertificateStatus(data)
|
|
447
|
+
}
|
|
448
|
+
if (k === 'persistentvolumes') return getPVStatus(data)
|
|
449
|
+
if (k === 'certificaterequests') return getCertificateRequestStatus(data)
|
|
450
|
+
if (k === 'clusterissuers') return getClusterIssuerStatus(data)
|
|
451
|
+
if (k === 'issuers') return getIssuerStatus(data)
|
|
452
|
+
if (k === 'orders') return getOrderState(data)
|
|
453
|
+
if (k === 'challenges') return getChallengeState(data)
|
|
454
|
+
if (k === 'gateways') {
|
|
455
|
+
if (data.apiVersion?.includes('networking.istio.io')) return getIstioGatewayStatus(data)
|
|
456
|
+
return getGatewayStatus(data)
|
|
457
|
+
}
|
|
458
|
+
if (k === 'gatewayclasses') return getGatewayClassStatus(data)
|
|
459
|
+
if (k === 'httproutes' || k === 'grpcroutes' || k === 'tcproutes' || k === 'tlsroutes') return getRouteStatus(data)
|
|
460
|
+
if (k === 'sealedsecrets') return getSealedSecretStatus(data)
|
|
461
|
+
if (k === 'poddisruptionbudgets') return getPDBStatus(data)
|
|
462
|
+
if (k === 'gitrepositories') return getGitRepositoryStatus(data)
|
|
463
|
+
if (k === 'ocirepositories') return getOCIRepositoryStatus(data)
|
|
464
|
+
if (k === 'helmrepositories') return getHelmRepositoryStatus(data)
|
|
465
|
+
if (k === 'kustomizations') return getKustomizationStatus(data)
|
|
466
|
+
if (k === 'helmreleases') return getFluxHelmReleaseStatus(data)
|
|
467
|
+
if (k === 'alerts') return getFluxAlertStatus(data)
|
|
468
|
+
if (k === 'applications') return getArgoApplicationStatus(data)
|
|
469
|
+
if (k === 'nodepools') return getNodePoolStatus(data)
|
|
470
|
+
if (k === 'nodeclaims') return getNodeClaimStatus(data)
|
|
471
|
+
if (k === 'ec2nodeclasses') return getEC2NodeClassStatus(data)
|
|
472
|
+
if (k === 'scaledobjects') return getScaledObjectStatus(data)
|
|
473
|
+
if (k === 'scaledjobs') return getScaledJobStatus(data)
|
|
474
|
+
if (k === 'servicemonitors') return getServiceMonitorStatus(data)
|
|
475
|
+
if (k === 'prometheusrules') return getPrometheusRuleStatus(data)
|
|
476
|
+
if (k === 'podmonitors') return getPodMonitorStatus(data)
|
|
477
|
+
if (k === 'vulnerabilityreports') return getVulnerabilityReportStatus(data)
|
|
478
|
+
if (k === 'configauditreports') return getConfigAuditReportStatus(data)
|
|
479
|
+
if (k === 'exposedsecretreports') return getExposedSecretReportStatus(data)
|
|
480
|
+
if (k === 'rbacassessmentreports' || k === 'clusterrbacassessmentreports' || k === 'infraassessmentreports' || k === 'clusterinfraassessmentreports') return getRbacAssessmentReportStatus(data)
|
|
481
|
+
if (k === 'clustercompliancereports') return getClusterComplianceReportStatus(data)
|
|
482
|
+
if (k === 'sbomreports' || k === 'clustersbomreports') return getSbomReportStatus(data)
|
|
483
|
+
if (k === 'policyreports' || k === 'clusterpolicyreports') return getPolicyReportStatus(data)
|
|
484
|
+
if (k === 'kyvernopolicies' || k === 'clusterpolicies') return getKyvernoPolicyStatus(data)
|
|
485
|
+
if (k === 'backups') {
|
|
486
|
+
if (data.apiVersion?.includes('cnpg.io')) return getCNPGBackupStatus(data)
|
|
487
|
+
return getBackupStatus(data)
|
|
488
|
+
}
|
|
489
|
+
if (k === 'restores') return getRestoreStatus(data)
|
|
490
|
+
if (k === 'schedules') return getScheduleStatus(data)
|
|
491
|
+
if (k === 'backupstoragelocations') return getBSLStatus(data)
|
|
492
|
+
if (k === 'externalsecrets') return getExternalSecretStatus(data)
|
|
493
|
+
if (k === 'clusterexternalsecrets') return getClusterExternalSecretStatus(data)
|
|
494
|
+
if (k === 'secretstores') return getSecretStoreStatus(data)
|
|
495
|
+
if (k === 'clustersecretstores') return getClusterSecretStoreStatus(data)
|
|
496
|
+
if (k === 'clusters') return getCNPGClusterStatus(data)
|
|
497
|
+
if (k === 'scheduledbackups') return getCNPGScheduledBackupStatus(data)
|
|
498
|
+
if (k === 'poolers') return getCNPGPoolerStatus(data)
|
|
499
|
+
if (k === 'virtualservices') return getVirtualServiceStatus(data)
|
|
500
|
+
if (k === 'destinationrules') return getDestinationRuleStatus(data)
|
|
501
|
+
if (k === 'serviceentries') return getServiceEntryStatus(data)
|
|
502
|
+
if (k === 'peerauthentications') return getPeerAuthenticationStatus(data)
|
|
503
|
+
if (k === 'authorizationpolicies') return getAuthorizationPolicyStatus(data)
|
|
504
|
+
|
|
505
|
+
// Knative Revisions have custom status logic (scaled-to-zero, activating)
|
|
506
|
+
if (k === 'knativerevisions') {
|
|
507
|
+
const status = getRevisionStatus(data)
|
|
508
|
+
return { text: status.text, color: status.color }
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// All other Knative resources use the standard Ready condition pattern
|
|
512
|
+
const knativeConditionKinds = [
|
|
513
|
+
'knativeservices', 'knativeconfigurations', 'knativeroutes',
|
|
514
|
+
'brokers', 'triggers',
|
|
515
|
+
'pingsources', 'apiserversources', 'containersources', 'sinkbindings',
|
|
516
|
+
'channels', 'inmemorychannels', 'subscriptions',
|
|
517
|
+
'sequences', 'parallels',
|
|
518
|
+
'domainmappings', 'knativeingresses', 'knativecertificates', 'serverlessservices',
|
|
519
|
+
]
|
|
520
|
+
if (knativeConditionKinds.includes(k) || (k === 'ingresses' && data.apiVersion?.includes('networking.internal.knative.dev'))) {
|
|
521
|
+
const status = getKnativeConditionStatus(data)
|
|
522
|
+
return { text: status.text, color: status.color }
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// Generic status extraction
|
|
526
|
+
const status = data.status
|
|
527
|
+
if (status) {
|
|
528
|
+
if (status.phase) {
|
|
529
|
+
const phase = String(status.phase)
|
|
530
|
+
const healthyPhases = ['Running', 'Active', 'Succeeded', 'Ready', 'Healthy', 'Available', 'Bound']
|
|
531
|
+
const warningPhases = ['Pending', 'Progressing', 'Unknown', 'Terminating']
|
|
532
|
+
const isHealthy = healthyPhases.includes(phase)
|
|
533
|
+
const isWarning = warningPhases.includes(phase)
|
|
534
|
+
return {
|
|
535
|
+
text: phase,
|
|
536
|
+
color: isHealthy ? 'bg-green-500/20 text-green-400' :
|
|
537
|
+
isWarning ? 'bg-yellow-500/20 text-yellow-400' :
|
|
538
|
+
'bg-red-500/20 text-red-400'
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
if (status.conditions && Array.isArray(status.conditions)) {
|
|
543
|
+
const readyCondition = status.conditions.find((c: any) =>
|
|
544
|
+
c.type === 'Ready' || c.type === 'Available' || c.type === 'Progressing'
|
|
545
|
+
)
|
|
546
|
+
if (readyCondition) {
|
|
547
|
+
const isReady = readyCondition.status === 'True'
|
|
548
|
+
return {
|
|
549
|
+
text: isReady ? 'Ready' : 'Not Ready',
|
|
550
|
+
color: isReady ? 'bg-green-500/20 text-green-400' : 'bg-yellow-500/20 text-yellow-400'
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
return null
|
|
557
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './shared'
|