@64mb/freelens-power 2.1.1 → 2.2.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.
Files changed (60) hide show
  1. package/README.md +4 -4
  2. package/out/main/common/power-logs.js.map +1 -1
  3. package/out/main/power-logs-child.js +3 -3
  4. package/out/main/power-logs-child.js.map +1 -1
  5. package/out/main/power-logs-database.js +165 -7
  6. package/out/main/power-logs-database.js.map +1 -1
  7. package/out/main/power-logs-ipc.js +12 -3
  8. package/out/main/power-logs-ipc.js.map +1 -1
  9. package/out/main/power-logs-worker.js +29 -7
  10. package/out/main/power-logs-worker.js.map +1 -1
  11. package/out/renderer/ai-diagnostic-handoff.js +2 -2
  12. package/out/renderer/ai-diagnostic-handoff.js.map +1 -1
  13. package/out/renderer/ai-extras.js +1 -1
  14. package/out/renderer/ai-extras.js.map +1 -1
  15. package/out/renderer/ai.js +4 -1
  16. package/out/renderer/ai.js.map +1 -1
  17. package/out/renderer/diagnostics-screen-finding.js +51 -0
  18. package/out/renderer/diagnostics-screen-finding.js.map +1 -0
  19. package/out/renderer/diagnostics.css.js +1 -1
  20. package/out/renderer/diagnostics.css.js.map +1 -1
  21. package/out/renderer/diagnostics.js +12 -0
  22. package/out/renderer/diagnostics.js.map +1 -1
  23. package/out/renderer/index.js +2 -0
  24. package/out/renderer/index.js.map +1 -1
  25. package/out/renderer/pod-details-enhancements.js +106 -0
  26. package/out/renderer/pod-details-enhancements.js.map +1 -0
  27. package/out/renderer/power-log-json-cell.js +15 -14
  28. package/out/renderer/power-log-json-cell.js.map +1 -1
  29. package/out/renderer/power-log-json.js +14 -6
  30. package/out/renderer/power-log-json.js.map +1 -1
  31. package/out/renderer/power-log-sql-editor.js +31 -2
  32. package/out/renderer/power-log-sql-editor.js.map +1 -1
  33. package/out/renderer/power-logs-client.js +5 -0
  34. package/out/renderer/power-logs-client.js.map +1 -1
  35. package/out/renderer/power-logs-entrypoints.js +10 -36
  36. package/out/renderer/power-logs-entrypoints.js.map +1 -1
  37. package/out/renderer/power-logs.css.js +9 -2
  38. package/out/renderer/power-logs.css.js.map +1 -1
  39. package/out/renderer/power-logs.js +220 -91
  40. package/out/renderer/power-logs.js.map +1 -1
  41. package/out/renderer/preferences/logs-preferences.js +1 -1
  42. package/out/renderer/preferences/logs-preferences.js.map +1 -1
  43. package/out/renderer/relationship-map-finding.js +53 -0
  44. package/out/renderer/relationship-map-finding.js.map +1 -0
  45. package/out/renderer/resource-relationships.css.js +6 -0
  46. package/out/renderer/resource-relationships.css.js.map +1 -1
  47. package/out/renderer/resource-relationships.js +50 -5
  48. package/out/renderer/resource-relationships.js.map +1 -1
  49. package/out/renderer/resource-search.js +13 -3
  50. package/out/renderer/resource-search.js.map +1 -1
  51. package/out/renderer/src/common/gateway-relationships.js +8 -7
  52. package/out/renderer/src/common/gateway-relationships.js.map +1 -1
  53. package/out/renderer/src/common/power-log-json-filter-sql.js +12 -0
  54. package/out/renderer/src/common/power-log-json-filter-sql.js.map +1 -1
  55. package/out/renderer/src/common/power-log-json-preset.js +2 -2
  56. package/out/renderer/src/common/power-log-json-preset.js.map +1 -1
  57. package/out/renderer/src/common/power-logs.js.map +1 -1
  58. package/out/renderer/src/common/resource-relationships.js +10 -8
  59. package/out/renderer/src/common/resource-relationships.js.map +1 -1
  60. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","names":[],"sources":["../../src/renderer/diagnostics.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { reaction } from \"mobx\";\nimport { type MouseEvent, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { formatDateTime } from \"../common/date-time\";\nimport {\n buildConsumerGroups,\n type ConsumerGroup,\n type DiagnosticsObject,\n diagnosePendingPod,\n effectivePodResource,\n normalizeEvents,\n observeResourceChanges,\n type PodUsage,\n type ResourceSummary,\n type TimelineEntry,\n} from \"../common/resource-diagnostics\";\nimport { groupTimelineEntries } from \"../common/timeline-groups\";\nimport { explainDiagnosticFinding } from \"./ai-diagnostic-handoff\";\nimport { AiIcon } from \"./ai-icon\";\nimport { DiagnosticExplainButton } from \"./diagnostic-explain-button\";\nimport { diagnosticsStyles } from \"./diagnostics.css\";\nimport { DIAGNOSTICS_NAMESPACE_EVENT, readDiagnosticsState, saveDiagnosticsState } from \"./diagnostics-state\";\nimport { IncidentCopyButton } from \"./incident-copy-button\";\nimport {\n getCollectedPodUsage,\n getMonitoringSnapshot,\n type MonitoringSnapshot,\n retainMonitoringCollector,\n} from \"./monitoring-collector\";\nimport { NativeTooltip } from \"./native-tooltip\";\n\nconst viewDescriptions = {\n Consumers: [\n \"What is using cluster resources?\",\n \"Compare workload usage and requests, then expand a workload to inspect its pods.\",\n ],\n Timeline: [\n \"What changed in this workload?\",\n \"Follow related Kubernetes events and changes observed while this view is open.\",\n ],\n \"Not ready\": [\"Why is this pod not ready?\", \"Inspect running pod readiness, conditions and retained events.\"],\n Pending: [\n \"Why is this pod waiting?\",\n \"Inspect scheduling evidence and resource requests before opening the pod for investigation.\",\n ],\n};\nfunction DiagnosticsSelect({\n label,\n value,\n onChange,\n options,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n options: { value: string; label: string }[];\n}) {\n return (\n <span className=\"diagnostics-select\">\n <Renderer.Component.Select\n aria-label={label}\n value={value}\n options={options}\n onChange={(option) => {\n if (option) onChange(option.value);\n }}\n isClearable={false}\n />\n </span>\n );\n}\nfunction ResourceCell({ summary, metric }: { summary: ResourceSummary; metric: \"cpu\" | \"memory\" }) {\n const complete = summary.coveredPods === summary.totalPods && !summary.unknownRequestPods;\n const ratio =\n complete && summary.usage !== undefined && summary.requests > 0\n ? `${((summary.usage / summary.requests) * 100).toFixed(0)}% of requests`\n : undefined;\n return (\n <div className=\"resource-cell\">\n <div className=\"resource-value\">\n <small>Usage</small>\n <strong>{resourceText(summary.usage, metric)}</strong>\n </div>\n <div className=\"resource-request\">\n <small>{summary.unknownRequestPods ? \"Known requests\" : \"Requests\"}</small>\n <span>{resourceText(summary.requests, metric)}</span>\n </div>\n <NativeTooltip title=\"Coverage is per resource. Missing metrics are unavailable, never zero.\">\n <small className=\"resource-coverage\">\n {summary.coveredPods}/{summary.totalPods} pods covered\n {summary.unknownRequestPods ? ` · ${summary.unknownRequestPods} requests unknown` : \"\"}\n {ratio ? ` · ${ratio}` : \"\"}\n </small>\n </NativeTooltip>\n {complete && summary.usage !== undefined && summary.requests > 0 && summary.usage > summary.requests && (\n <NativeTooltip title=\"Usage exceeds configured requests. Requests are reservations, not limits; this alone does not indicate a failure.\">\n <span className=\"request-burst\">\n <AiIcon material=\"info_outline\" size={12} />\n Above requests\n </span>\n </NativeTooltip>\n )}\n </div>\n );\n}\nfunction UnscheduledCell({ cpu, memory }: { cpu: ResourceSummary; memory: ResourceSummary }) {\n const partial = cpu.unknownRequestPods || memory.unknownRequestPods;\n if (!partial && !cpu.unscheduledRequests && !memory.unscheduledRequests)\n return (\n <NativeTooltip title=\"No unscheduled requests\">\n <span className=\"unscheduled-empty\">—</span>\n </NativeTooltip>\n );\n return (\n <div className={`unscheduled-cell${cpu.unscheduledRequests || memory.unscheduledRequests ? \" has-requests\" : \"\"}`}>\n <div>\n <small>CPU</small>\n <span>{unscheduledText(cpu, \"cpu\")}</span>\n </div>\n <div>\n <small>Memory</small>\n <span>{unscheduledText(memory, \"memory\")}</span>\n </div>\n </div>\n );\n}\nexport function consumerStatus(pods: DiagnosticsObject[]): { tone: string; label: string; icon: string } {\n const failureReasons = new Set([\n \"CrashLoopBackOff\",\n \"ImagePullBackOff\",\n \"ErrImagePull\",\n \"CreateContainerConfigError\",\n \"CreateContainerError\",\n \"RunContainerError\",\n \"InvalidImageName\",\n ]);\n for (const pod of pods) {\n if (pod.status?.phase === \"Succeeded\") continue;\n type WaitingStatus = { state?: { waiting?: { reason?: string } } };\n const status = pod.status as\n | { containerStatuses?: WaitingStatus[]; initContainerStatuses?: WaitingStatus[] }\n | undefined;\n const statuses = [...(status?.containerStatuses ?? []), ...(status?.initContainerStatuses ?? [])];\n const reason = statuses\n ?.map((status) => status.state?.waiting?.reason)\n .find((value) => value && failureReasons.has(value));\n if (pod.status?.phase === \"Failed\" || reason)\n return { tone: \"error\", label: reason ?? \"Failed\", icon: \"error_outline\" };\n }\n const pendingCount = pods.filter((pod) => pod.status?.phase === \"Pending\").length;\n if (pendingCount) return { tone: \"warning\", label: `${pendingCount} Pending`, icon: \"hourglass_empty\" };\n if (\n pods.some(\n (pod) =>\n pod.status?.phase !== \"Succeeded\" &&\n pod.status?.conditions?.some((condition) => condition.type === \"Ready\" && condition.status === \"False\"),\n )\n )\n return { tone: \"warning\", label: \"Not ready\", icon: \"warning_amber\" };\n if (\n pods.length &&\n pods.every(\n (pod) =>\n pod.status?.phase === \"Succeeded\" ||\n (pod.status?.phase === \"Running\" &&\n pod.status.conditions?.some((condition) => condition.type === \"Ready\" && condition.status === \"True\")),\n )\n )\n return pods.every((pod) => pod.status?.phase === \"Succeeded\")\n ? { tone: \"healthy\", label: \"Completed\", icon: \"check_circle\" }\n : {\n tone: \"healthy\",\n label: pods.some((pod) => pod.status?.phase === \"Succeeded\") ? \"Ready / Completed\" : \"Ready\",\n icon: \"check_circle_outline\",\n };\n return { tone: \"neutral\", label: \"Readiness unknown\", icon: \"help_outline\" };\n}\nfunction ConsumerStatus({ pods }: { pods: DiagnosticsObject[] }) {\n const status = consumerStatus(pods);\n return (\n <span className={`consumer-status ${status.tone}`}>\n <AiIcon material={status.icon} size={13} />\n {status.label}\n </span>\n );\n}\ntype Tab = \"Consumers\" | \"Timeline\" | \"Pending\" | \"Not ready\";\nconst hidden = () => document.visibilityState === \"hidden\";\nconst activeId = () => Renderer.Catalog.activeCluster.get()?.metadata.uid;\nconst groupKey = (group: ConsumerGroup) => `${group.namespace}/${group.identity}`;\nfunction resourceText(value: number | undefined, metric: \"cpu\" | \"memory\"): string {\n if (value === undefined) return \"Unavailable\";\n return metric === \"cpu\" ? `${value.toFixed(3)} cores` : `${(value / 1024 ** 2).toFixed(1)} MiB`;\n}\nfunction unscheduledText(summary: ResourceSummary, metric: \"cpu\" | \"memory\"): string {\n return `${summary.unknownRequestPods ? \"Partial known: \" : \"\"}${resourceText(summary.unscheduledRequests, metric)}`;\n}\nconst resources: Record<string, string> = {\n Pod: \"/api/v1\",\n Deployment: \"/apis/apps/v1\",\n ReplicaSet: \"/apis/apps/v1\",\n StatefulSet: \"/apis/apps/v1\",\n DaemonSet: \"/apis/apps/v1\",\n Job: \"/apis/batch/v1\",\n CronJob: \"/apis/batch/v1\",\n};\nconst plurals: Record<string, string> = {\n Pod: \"pods\",\n Deployment: \"deployments\",\n ReplicaSet: \"replicasets\",\n StatefulSet: \"statefulsets\",\n DaemonSet: \"daemonsets\",\n Job: \"jobs\",\n CronJob: \"cronjobs\",\n};\nfunction openResource(object: DiagnosticsObject, clusterId: string, event: MouseEvent): void {\n event.stopPropagation();\n const kind = object.kind ?? \"Pod\";\n if (activeId() !== clusterId || !object.metadata.name) return;\n if (kind === \"Namespace\") {\n void Promise.resolve(\n Renderer.Navigation.showDetails(`/api/v1/namespaces/${encodeURIComponent(object.metadata.name)}`),\n ).catch(() => {});\n return;\n }\n if (!object.metadata.namespace || !resources[kind]) return;\n const path = `${resources[kind]}/namespaces/${encodeURIComponent(object.metadata.namespace)}/${plurals[kind]}/${encodeURIComponent(object.metadata.name)}`;\n void Promise.resolve(Renderer.Navigation.showDetails(path)).catch(() => {});\n}\nconst projections = new WeakMap<MonitoringSnapshot, ReturnType<typeof projectSnapshot>>();\nfunction projectSnapshot(data: MonitoringSnapshot) {\n const usage = getCollectedPodUsage(data);\n const groups = buildConsumerGroups(data.pods ?? [], data.owners ?? [], usage);\n const objects = new Map<string, DiagnosticsObject>();\n const children = new Map<string, string[]>();\n for (const object of [...(data.owners ?? []), ...(data.pods ?? [])]) {\n const uid = object.metadata.uid;\n if (!uid) continue;\n objects.set(uid, object);\n const refs = object.metadata.ownerReferences ?? [];\n const parent = refs.find((item) => item.controller) ?? (refs.length === 1 ? refs[0] : undefined);\n if (parent) {\n const siblings = children.get(parent.uid) ?? [];\n siblings.push(uid);\n children.set(parent.uid, siblings);\n }\n }\n const related = new Map<string, Set<string>>();\n for (const group of groups) {\n const seen = new Set<string>();\n const stack = [group.identity];\n while (stack.length) {\n const uid = stack.pop()!;\n if (seen.has(uid)) continue;\n const object = objects.get(uid);\n if (object && object.metadata.namespace !== group.namespace) continue;\n seen.add(uid);\n stack.push(...(children.get(uid) ?? []));\n }\n related.set(groupKey(group), seen);\n }\n return { usage, groups, objects, related };\n}\nfunction projection(data: MonitoringSnapshot) {\n let value = projections.get(data);\n if (!value) {\n value = projectSnapshot(data);\n projections.set(data, value);\n }\n return value;\n}\nexport function DiagnosticsPage() {\n const initial = useRef(readDiagnosticsState(activeId() ?? \"\")).current;\n const scrollContainer = useRef<HTMLDivElement>(null);\n const stateCluster = useRef(activeId() ?? \"\");\n const [tab, setTab] = useState<Tab>(initial.tab);\n const [snapshot, setSnapshot] = useState<MonitoringSnapshot>();\n const [error, setError] = useState(\"\");\n const [filter, setFilter] = useState(initial.filter);\n const [namespaceScope, setNamespaceScope] = useState(initial.namespaceScope);\n const [resourceScope, setResourceScope] = useState(initial.resourceScope);\n const pendingScroll = useRef<{ clusterId: string; top: number } | undefined>({\n clusterId: stateCluster.current,\n top: initial.scrollTop,\n });\n const [needsAttention, setNeedsAttention] = useState(initial.needsAttention);\n const [groupMode, setGroupMode] = useState(initial.groupMode);\n const [namespacesOpen, setNamespacesOpen] = useState<string[]>(initial.namespacesOpen);\n const known = useRef(new Map<string, { group: ConsumerGroup; uids: Set<string> }>());\n const [sort, setSort] = useState(initial.sort);\n const [expanded, setExpanded] = useState<string[]>(initial.expanded);\n const [selected, setSelected] = useState(initial.selected);\n const [pendingUid, setPendingUid] = useState(initial.pendingUid);\n const [notReadyUid, setNotReadyUid] = useState(initial.notReadyUid ?? \"\");\n const [reason, setReason] = useState(initial.reason);\n const [warningOnly, setWarningOnly] = useState(initial.warningOnly);\n const [groupedTimeline, setGroupedTimeline] = useState(initial.groupedTimeline);\n const [openTimeline, setOpenTimeline] = useState<string[]>(initial.openTimeline);\n const viewState = useRef(initial);\n viewState.current = {\n tab,\n filter,\n namespaceScope,\n resourceScope,\n needsAttention,\n groupMode,\n namespacesOpen,\n sort,\n expanded,\n selected,\n pendingUid,\n notReadyUid,\n reason,\n warningOnly,\n groupedTimeline,\n openTimeline,\n scrollTop: viewState.current.scrollTop,\n };\n useEffect(() => {\n return () => saveDiagnosticsState(stateCluster.current, viewState.current);\n }, [initial]);\n useEffect(() => {\n const focusNamespace = (event: Event) => {\n const detail = (\n event as CustomEvent<{\n clusterId: string;\n namespace?: string;\n resourceScope?: { kind: string; name: string; uid?: string };\n }>\n ).detail;\n if (\n !detail ||\n detail.clusterId !== stateCluster.current ||\n detail.clusterId !== activeId() ||\n (!detail.namespace && !detail.resourceScope)\n )\n return;\n setTab(\"Consumers\");\n setNamespaceScope(detail.namespace);\n setResourceScope(detail.resourceScope);\n setFilter(\"\");\n setNeedsAttention(false);\n setGroupMode(detail.namespace ? \"namespace\" : \"workload\");\n setNamespacesOpen(detail.namespace ? [detail.namespace] : []);\n viewState.current.scrollTop = 0;\n pendingScroll.current = undefined;\n if (scrollContainer.current) scrollContainer.current.scrollTop = 0;\n };\n window.addEventListener(DIAGNOSTICS_NAMESPACE_EVENT, focusNamespace);\n return () => window.removeEventListener(DIAGNOSTICS_NAMESPACE_EVENT, focusNamespace);\n }, []);\n const [observed, setObserved] = useState<TimelineEntry[]>([]);\n const previous = useRef<MonitoringSnapshot>();\n useEffect(() => {\n const release = retainMonitoringCollector();\n let disposed = false;\n let generation = 0;\n let loading = false;\n const clear = () => {\n generation++;\n previous.current = undefined;\n known.current.clear();\n setSnapshot(undefined);\n setObserved([]);\n saveDiagnosticsState(stateCluster.current, viewState.current);\n stateCluster.current = activeId() ?? \"\";\n const restored = readDiagnosticsState(stateCluster.current);\n setTab(restored.tab);\n setFilter(restored.filter);\n setNamespaceScope(restored.namespaceScope);\n setResourceScope(restored.resourceScope);\n setNeedsAttention(restored.needsAttention);\n setGroupMode(restored.groupMode);\n setNamespacesOpen(restored.namespacesOpen);\n setSort(restored.sort);\n setExpanded(restored.expanded);\n setSelected(restored.selected);\n setPendingUid(restored.pendingUid);\n setNotReadyUid(restored.notReadyUid ?? \"\");\n setReason(restored.reason);\n setWarningOnly(restored.warningOnly);\n setGroupedTimeline(restored.groupedTimeline);\n setOpenTimeline(restored.openTimeline);\n viewState.current = restored;\n pendingScroll.current = { clusterId: stateCluster.current, top: restored.scrollTop };\n setError(\"\");\n };\n const load = async () => {\n if (loading || disposed || hidden()) return;\n const cluster = activeId();\n if (!cluster) {\n setError(\"Select a connected cluster\");\n return;\n }\n const current = generation;\n loading = true;\n try {\n const next = await getMonitoringSnapshot(true);\n if (disposed || current !== generation || next.clusterId !== activeId() || hidden()) return;\n const prior = previous.current;\n if (prior === next) return;\n if (prior && prior.clusterId === next.clusterId) {\n const entries: TimelineEntry[] = [];\n if (prior.time !== next.time)\n entries.push(\n ...observeResourceChanges(prior.pods ?? [], next.pods ?? [], new Date(next.time).toISOString()),\n );\n if (prior.owners !== next.owners && next.diagnosticsTime)\n entries.push(\n ...observeResourceChanges(\n prior.owners ?? [],\n next.owners ?? [],\n new Date(next.diagnosticsTime).toISOString(),\n ),\n );\n if (entries.length) setObserved((items) => [...entries, ...items].slice(0, 300));\n }\n const projected = projection(next);\n for (const group of projected.groups) {\n const key = groupKey(group);\n const remembered = known.current.get(key)?.uids ?? new Set<string>();\n for (const uid of projected.related.get(key) ?? []) remembered.add(uid);\n while (remembered.size > 500) remembered.delete(remembered.values().next().value!);\n known.current.set(key, { group, uids: remembered });\n }\n while (known.current.size > 100) known.current.delete(known.current.keys().next().value!);\n previous.current = next;\n setSnapshot(next);\n setError(\"\");\n } catch {\n if (!disposed && current === generation) setError(\"Diagnostics unavailable or access denied\");\n } finally {\n loading = false;\n }\n };\n const stop = reaction(activeId, () => {\n clear();\n void load();\n });\n const visibility = () => {\n if (document.visibilityState !== \"hidden\") void load();\n };\n const timer = window.setInterval(() => void load(), 1000);\n document.addEventListener(\"visibilitychange\", visibility);\n void load();\n return () => {\n disposed = true;\n generation++;\n stop();\n release();\n window.clearInterval(timer);\n document.removeEventListener(\"visibilitychange\", visibility);\n };\n }, []);\n const data = snapshot?.clusterId === activeId() ? snapshot : undefined;\n useLayoutEffect(() => {\n const pending = pendingScroll.current;\n if (!data || !pending || pending.clusterId !== data.clusterId || !scrollContainer.current) return;\n // restore after the snapshot and expanded rows have committed, then guard initial layout scroll events\n scrollContainer.current.scrollTop = pending.top;\n const frame = requestAnimationFrame(() => {\n if (pendingScroll.current !== pending || !scrollContainer.current) return;\n scrollContainer.current.scrollTop = pending.top;\n viewState.current.scrollTop = scrollContainer.current.scrollTop;\n pendingScroll.current = undefined;\n });\n return () => cancelAnimationFrame(frame);\n }, [data]);\n const projected = useMemo(() => (data ? projection(data) : undefined), [data]);\n const groups = useMemo(() => {\n if (!data || !projected) return [];\n if (!resourceScope) return projected.groups;\n if (resourceScope.kind === \"Pod\" || resourceScope.kind === \"Node\") {\n const pods = (data.pods ?? []).filter((pod) =>\n resourceScope.kind === \"Pod\"\n ? (resourceScope.uid ? pod.metadata.uid === resourceScope.uid : pod.metadata.name === resourceScope.name) &&\n (!namespaceScope || pod.metadata.namespace === namespaceScope)\n : pod.spec?.nodeName === resourceScope.name,\n );\n if (resourceScope.kind === \"Pod\") {\n // explicit pod navigation includes terminal pods while normal consumer totals exclude them\n const originalPods = new Map<DiagnosticsObject, DiagnosticsObject>();\n const focusedPods = pods.map((pod) => {\n const focused = { ...pod, status: { ...pod.status, phase: undefined } };\n originalPods.set(focused, pod);\n return focused;\n });\n return buildConsumerGroups(focusedPods, data.owners ?? [], projected.usage).map((group) => ({\n ...group,\n pods: group.pods.map((pod) => originalPods.get(pod)!),\n }));\n }\n return buildConsumerGroups(pods, data.owners ?? [], projected.usage);\n }\n return projected.groups.filter((group) =>\n resourceScope.uid\n ? group.identity === resourceScope.uid\n : group.kind === resourceScope.kind && group.name === resourceScope.name,\n );\n }, [data, projected, resourceScope, namespaceScope]);\n const filtered = useMemo(\n () =>\n groups\n .filter((group) => !namespaceScope || group.namespace === namespaceScope)\n .filter((group) =>\n `${group.namespace} ${group.name} ${group.kind}`.toLowerCase().includes(filter.toLowerCase()),\n )\n .filter((group) => !needsAttention || [\"error\", \"warning\"].includes(consumerStatus(group.pods).tone))\n .sort((a, b) =>\n sort === \"name\"\n ? a.namespace.localeCompare(b.namespace) ||\n a.name.localeCompare(b.name) ||\n a.kind.localeCompare(b.kind) ||\n a.identity.localeCompare(b.identity)\n : sort === \"requests\" || sort === \"memoryRequests\"\n ? b[sort === \"requests\" ? \"cpu\" : \"memory\"].requests - a[sort === \"requests\" ? \"cpu\" : \"memory\"].requests\n : (b[sort === \"memory\" ? \"memory\" : \"cpu\"].usage ?? -1) -\n (a[sort === \"memory\" ? \"memory\" : \"cpu\"].usage ?? -1),\n ),\n [groups, filter, namespaceScope, sort, needsAttention],\n );\n const warningUids = new Set(\n (data?.events ?? [])\n .filter((event) => event.type === \"Warning\")\n .map((event) => event.involvedObject?.uid ?? event.regarding?.uid)\n .filter((uid): uid is string => !!uid),\n );\n const applications = [...known.current.values()]\n .filter((item) => !warningOnly || [...item.uids].some((uid) => warningUids.has(uid)))\n .map((item) => item.group);\n const selectionAvailable = applications.some((group) => groupKey(group) === selected);\n const application = applications.find((group) => groupKey(group) === selected);\n const uids = new Set(known.current.get(selected)?.uids ?? []);\n const normalizedEvents = normalizeEvents(data?.events ?? []);\n const warningIds = new Set(\n normalizedEvents.filter((_entry, index) => data?.events?.[index]?.type === \"Warning\").map((entry) => entry.id),\n );\n const eventReferences = new Map(\n normalizedEvents.map((entry, index) => {\n const event = data?.events?.[index];\n return [entry.id, event?.involvedObject ?? event?.regarding] as const;\n }),\n );\n const timeline = [...normalizedEvents, ...observed]\n .filter(\n (entry) =>\n (!application || (!!entry.objectUid && uids.has(entry.objectUid))) &&\n (!reason || `${entry.reason} ${entry.message}`.toLowerCase().includes(reason.toLowerCase())) &&\n (!warningOnly || warningIds.has(entry.id)),\n )\n .sort((a, b) => (Date.parse(b.time ?? \"\") || 0) - (Date.parse(a.time ?? \"\") || 0));\n const timelineResource = (entry: TimelineEntry) => {\n const object = entry.objectUid ? projected?.objects.get(entry.objectUid) : undefined;\n const ref = eventReferences.get(entry.id);\n return `${object?.metadata.namespace ?? ref?.namespace ?? \"Unknown namespace\"} / ${object?.kind ?? ref?.kind ?? \"Resource\"} / ${object?.metadata.name ?? ref?.name ?? entry.objectUid ?? entry.id}`;\n };\n const timelineGroups = groupTimelineEntries(\n timeline,\n (entry) => {\n if (!warningIds.has(entry.id)) return entry.id;\n const owner = [...known.current.entries()].find(\n ([, item]) => !!entry.objectUid && item.uids.has(entry.objectUid),\n );\n return owner\n ? `${owner[1].group.namespace}/${owner[1].group.kind}/${owner[1].group.name}`\n : timelineResource(entry);\n },\n timelineResource,\n );\n const displayedTimeline = groupedTimeline ? timelineGroups.map((group) => group.latest) : timeline;\n const pending = (data?.pods ?? []).filter((pod) => pod.status?.phase === \"Pending\");\n const attentionPods = new Set(\n groups\n .filter((group) => !namespaceScope || group.namespace === namespaceScope)\n .flatMap((group) => group.pods)\n .filter((pod) => [\"warning\", \"error\"].includes(consumerStatus([pod]).tone))\n .map((pod) => pod.metadata.uid ?? pod),\n ).size;\n const AttentionCard = data?.pods ? \"button\" : \"div\";\n const notReady = (data?.pods ?? []).filter(\n (pod) => pod.status?.phase === \"Running\" && [\"warning\", \"error\"].includes(consumerStatus([pod]).tone),\n );\n const readinessView = tab === \"Not ready\";\n const triagePods = readinessView ? notReady : pending;\n const triageUid = readinessView ? notReadyUid : pendingUid;\n const triageLabel = readinessView ? \"Not ready pod\" : \"Pending pod\";\n const selectedPod = triagePods.find((pod) => pod.metadata.uid === triageUid);\n const diagnosis = selectedPod\n ? diagnosePendingPod(selectedPod, data?.nodes ?? [], data?.events ?? [], data?.pvcs)\n : undefined;\n return (\n <div\n ref={scrollContainer}\n onScroll={(event) => {\n if (!pendingScroll.current) viewState.current.scrollTop = event.currentTarget.scrollTop;\n }}\n className=\"power-diagnostics\"\n style={{ padding: 24, overflow: \"auto\", height: \"100%\", minWidth: 0 }}\n >\n <style>{diagnosticsStyles}</style>\n <header className=\"diagnostics-header\">\n <h2>Resource diagnostics</h2>\n <span className=\"snapshot-meta\">Read-only snapshot{data ? ` · ${formatDateTime(data.time)}` : \"\"}</span>\n </header>\n <nav aria-label=\"Diagnostics views\">\n {([\"Consumers\", \"Timeline\", \"Pending\", \"Not ready\"] as Tab[]).map((name) => (\n <NativeTooltip key={name} title={`Show ${name.toLowerCase()}`}>\n <button type=\"button\" aria-pressed={tab === name} onClick={() => setTab(name)}>\n <AiIcon\n material={name === \"Consumers\" ? \"account_tree\" : name === \"Timeline\" ? \"timeline\" : \"hourglass_empty\"}\n />\n {name}\n {name === \"Pending\" && data?.pods\n ? ` (${pending.length})`\n : name === \"Not ready\" && data?.pods\n ? ` (${notReady.length})`\n : \"\"}\n </button>\n </NativeTooltip>\n ))}\n </nav>\n {error && (\n <p className=\"diagnostics-notice\" role=\"status\">\n {error}. Check the cluster connection and your access permissions.\n </p>\n )}\n {data?.errors.map((message) => (\n <p className=\"diagnostics-notice\" role=\"status\" key={message}>\n {message}\n </p>\n ))}\n <section className=\"view-intro\">\n <h3>{viewDescriptions[tab][0]}</h3>\n <p>{viewDescriptions[tab][1]}</p>\n </section>\n {data && tab === \"Consumers\" && (\n <div className=\"diagnostics-summary\" aria-label=\"Snapshot summary\">\n <div className=\"summary-card workloads\">\n <span className=\"summary-icon\">\n <AiIcon material=\"account_tree\" size={22} />\n </span>\n <div>\n <strong>{data.pods ? groups.length : \"Unavailable\"}</strong>\n <span>Workloads and standalone pods</span>\n </div>\n </div>\n <div className=\"summary-card pods\">\n <span className=\"summary-icon\">\n <AiIcon material=\"view_in_ar\" size={22} />\n </span>\n <div>\n <strong>{data.pods?.length ?? \"Unavailable\"}</strong>\n <span>Pods in snapshot</span>\n </div>\n </div>\n <AttentionCard\n className={`summary-card pending${!data.pods ? \" unavailable\" : attentionPods ? \" attention\" : \"\"}`}\n {...(data.pods\n ? {\n type: \"button\" as const,\n title: \"Show consumers needing attention\",\n \"aria-label\": \"Show consumers needing attention\",\n onClick: () => {\n setNeedsAttention(true);\n setFilter(\"\");\n },\n }\n : {})}\n >\n <span className=\"summary-icon\">\n <AiIcon material=\"warning_amber\" size={22} />\n </span>\n <div>\n <strong>{data.pods ? attentionPods : \"Unavailable\"}</strong>\n <span>Needs attention</span>\n </div>\n </AttentionCard>\n </div>\n )}\n {!data && !error && (\n <p className=\"diagnostics-empty\" role=\"status\">\n Loading resource diagnostics…\n </p>\n )}\n {tab === \"Consumers\" && data && (\n <>\n {resourceScope && (\n <div className=\"namespace-scope\" role=\"status\">\n <span className=\"namespace-scope-label\">\n {resourceScope.kind}: {resourceScope.name}\n </span>\n <button type=\"button\" aria-label=\"Clear resource scope\" onClick={() => setResourceScope(undefined)}>\n <AiIcon material=\"close\" size={13} />\n Show all resources\n </button>\n </div>\n )}\n {namespaceScope && (\n <div className=\"namespace-scope\" role=\"status\">\n <span className=\"namespace-scope-label\">Namespace: {namespaceScope}</span>\n <button type=\"button\" aria-label=\"Clear namespace scope\" onClick={() => setNamespaceScope(undefined)}>\n <AiIcon material=\"close\" size={13} />\n Show all namespaces\n </button>\n </div>\n )}\n <div className=\"toolbar consumers-toolbar\">\n <label>\n Group by{\" \"}\n <DiagnosticsSelect\n label=\"Group consumers\"\n value={groupMode}\n onChange={setGroupMode}\n options={[\n { value: \"workload\", label: \"Workload\" },\n { value: \"namespace\", label: \"Namespace\" },\n ]}\n />\n </label>\n <label className=\"search-field\">\n Search consumers\n <span className=\"diagnostics-input\">\n <Renderer.Component.Input\n aria-label=\"Filter consumers\"\n placeholder=\"Namespace or workload\"\n value={filter}\n onChange={setFilter}\n />\n </span>\n </label>\n <label>\n Sort{\" \"}\n <DiagnosticsSelect\n label=\"Sort consumers\"\n value={sort}\n onChange={setSort}\n options={[\n { value: \"cpu\", label: \"CPU usage\" },\n { value: \"memory\", label: \"Memory usage\" },\n { value: \"requests\", label: \"CPU requests\" },\n { value: \"memoryRequests\", label: \"Memory requests\" },\n { value: \"name\", label: \"Namespace / name\" },\n ]}\n />\n </label>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox\n label=\"Needs attention\"\n value={needsAttention}\n onChange={setNeedsAttention}\n />\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>How to read usage and requests</summary>\n <p>\n Usage is measured consumption. Requests are configured resource reservations. Coverage is reported\n separately for CPU and memory; missing metrics are unavailable, never zero. Requests from unscheduled pods\n appear separately.\n </p>\n </details>\n <div className=\"diagnostics-table\">\n <table className=\"consumers-table\">\n <colgroup>\n <col className=\"consumer-column\" />\n <col className=\"metric-column\" />\n <col className=\"metric-column\" />\n <col className=\"unscheduled-column\" />\n </colgroup>\n <thead>\n <tr>\n <th>Namespace / consumer</th>\n <th className=\"numeric\">CPU usage / requests</th>\n <th className=\"numeric\">Memory usage / requests</th>\n <th>Unscheduled requests</th>\n </tr>\n </thead>\n <tbody>\n {(groupMode === \"namespace\" ? [...new Set(filtered.map((group) => group.namespace))] : [\"\"]).map(\n (namespace) => (\n <NamespaceRows\n key={namespace}\n namespace={namespace}\n groups={namespace ? filtered.filter((group) => group.namespace === namespace) : filtered}\n snapshotTime={data.time}\n clusterId={data?.clusterId ?? \"\"}\n usage={projected?.usage ?? []}\n open={!namespace || namespacesOpen.includes(namespace)}\n toggleNamespace={() =>\n setNamespacesOpen((items) =>\n items.includes(namespace)\n ? items.filter((item) => item !== namespace)\n : [...items, namespace],\n )\n }\n expanded={expanded}\n toggleGroup={(key) =>\n setExpanded((items) =>\n items.includes(key) ? items.filter((item) => item !== key) : [...items, key],\n )\n }\n />\n ),\n )}\n </tbody>\n </table>\n </div>\n {!filtered.length &&\n (!data.pods ? (\n <p className=\"diagnostics-empty\">Pod inventory unavailable</p>\n ) : filter ? (\n <p className=\"diagnostics-empty\">No consumers match this filter</p>\n ) : needsAttention && groups.length ? (\n <div\n className={`diagnostics-empty attention-empty ${groups.every((group) => consumerStatus(group.pods).tone === \"healthy\") ? \"all-ready\" : \"readiness-unconfirmed\"}`}\n >\n <AiIcon\n material={\n groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"check_circle_outline\"\n : \"info_outline\"\n }\n size={22}\n />\n <strong>\n {groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"All consumers are ready\"\n : \"No known issues\"}\n </strong>\n <small>\n {groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"No pending pods or known failures in this snapshot.\"\n : \"Unconfirmed readiness is not treated as a failure. Show all consumers to inspect them.\"}\n </small>\n <button type=\"button\" onClick={() => setNeedsAttention(false)}>\n Show all consumers\n </button>\n </div>\n ) : (\n <p className=\"diagnostics-empty\">No consumers available</p>\n ))}\n </>\n )}\n {tab === \"Timeline\" && data && (\n <>\n <div className=\"toolbar timeline-toolbar\">\n <label>\n Application{\" \"}\n <DiagnosticsSelect\n label=\"Timeline application\"\n value={selectionAvailable ? selected : \"\"}\n onChange={setSelected}\n options={[\n { value: \"\", label: \"All applications\" },\n ...applications.map((group) => ({\n value: groupKey(group),\n label: `${group.namespace} / ${group.kind} / ${group.name}`,\n })),\n ]}\n />\n </label>\n <label className=\"search-field\">\n Search events\n <span className=\"diagnostics-input\">\n <Renderer.Component.Input\n aria-label=\"Filter timeline reason\"\n placeholder=\"Reason or message\"\n value={reason}\n onChange={setReason}\n />\n </span>\n </label>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox label=\"Warnings only\" value={warningOnly} onChange={setWarningOnly} />\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>Timeline coverage and timing</summary>\n <p>\n Kubernetes events have limited retention. Observed changes begin with this open view, retain at most 300\n entries, and have unknown transition times between snapshots. Related identities observed in this view are\n retained for at most 100 applications and 500 identities per application; older identity coverage can be\n incomplete.\n </p>\n </details>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox\n label=\"Group recurring warnings\"\n value={groupedTimeline}\n onChange={setGroupedTimeline}\n />\n </div>\n <div className=\"timeline-legend\" aria-label=\"Event types\">\n {[\"Warning\", \"Rollout\", \"Restart\", \"Readiness\", \"Kubernetes event\", \"Observed change\"].map((label) => (\n <span key={label} className={`timeline-type ${eventCategory(label)}`}>\n {label}\n </span>\n ))}\n </div>\n <ol className=\"diagnostics-timeline\" aria-label=\"Workload event timeline\">\n {displayedTimeline.map((entry) => {\n const recurrence = groupedTimeline ? timelineGroups.find((group) => group.latest === entry) : undefined;\n const kind = eventCategory(entry.reason);\n const category = warningIds.has(entry.id)\n ? \"warning\"\n : kind === \"event\" && entry.certainty === \"observed\"\n ? \"observed\"\n : kind;\n const label =\n category === \"warning\"\n ? \"Warning\"\n : category === \"rollout\"\n ? \"Rollout\"\n : category === \"restart\"\n ? \"Restart\"\n : category === \"readiness\"\n ? \"Readiness\"\n : entry.certainty === \"observed\"\n ? \"Observed change\"\n : \"Kubernetes event\";\n const object = entry.objectUid ? projected?.objects.get(entry.objectUid) : undefined;\n const reference = eventReferences.get(entry.id);\n const referenceKind = object?.kind ?? reference?.kind;\n const metadata = object?.metadata ?? reference;\n return (\n <li key={entry.id} className={`timeline-entry ${category}`}>\n <div className=\"timeline-time\">\n {entry.time ? <time dateTime={entry.time}>{formatDateTime(entry.time)}</time> : \"Time unknown\"}\n <small>{entry.certainty === \"observed\" ? \"Observed at snapshot\" : \"Kubernetes event time\"}</small>\n </div>\n <div className=\"timeline-content\">\n <div className=\"timeline-card-top\">\n <div className=\"timeline-card-heading\">\n {\" \"}\n <span className={`timeline-type ${category}`}>{label}</span>\n <h4>{entry.reason}</h4>\n <small className=\"timeline-resource-identity\">\n <AiIcon material={referenceKind === \"Pod\" ? \"view_in_ar\" : \"account_tree\"} size={12} />\n {metadata?.name\n ? `${metadata.namespace ?? \"Namespace unknown\"} / ${referenceKind ?? \"Resource\"} / ${metadata.name}`\n : \"Resource identity unavailable\"}\n </small>\n </div>\n <div className=\"timeline-card-actions\" role=\"group\" aria-label=\"Event actions\">\n {object && data && (\n <NativeTooltip\n title={`Open ${object.kind ?? \"Pod\"} ${object.metadata.namespace} / ${object.metadata.name}`}\n >\n <button\n type=\"button\"\n className=\"timeline-resource-action\"\n aria-label=\"Open resource\"\n onClick={(event) => openResource(object, data.clusterId, event)}\n >\n <AiIcon material=\"open_in_new\" />\n </button>\n </NativeTooltip>\n )}\n <IncidentCopyButton\n clusterId={data.clusterId}\n incident={{\n problem: entry.reason,\n facts: [\n entry.message,\n `Reported count ${recurrence?.count ?? entry.count}`,\n ...((recurrence?.affected ?? []).length > 1\n ? [`Affected resources: ${recurrence?.affected.join(\"; \")}`]\n : []),\n ],\n time: entry.time ?? data.time,\n resources: (recurrence?.entries ?? [entry]).slice(0, 12).flatMap((original) => {\n const originalObject = original.objectUid\n ? projected?.objects.get(original.objectUid)\n : undefined;\n const originalReference = eventReferences.get(original.id);\n const originalMetadata = originalObject?.metadata ?? originalReference;\n const originalKind = originalObject?.kind ?? originalReference?.kind;\n return originalMetadata?.name && originalKind\n ? [\n {\n kind: originalKind,\n namespace: originalMetadata.namespace,\n name: originalMetadata.name,\n },\n ]\n : [];\n }),\n }}\n />\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n aria-label=\"Explain with AI\"\n title=\"Explain with AI\"\n onClick={() =>\n explainDiagnosticFinding({\n clusterId: data.clusterId,\n title: entry.reason,\n summary: `${timelineResource(entry)}: ${entry.message}. Reported count ${recurrence?.count ?? entry.count}`,\n resource:\n metadata?.name && referenceKind\n ? { kind: referenceKind, namespace: metadata.namespace, name: metadata.name }\n : undefined,\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n <span className=\"timeline-action-label\">Explain with AI</span>\n </DiagnosticExplainButton>\n </div>\n </div>\n <p>{entry.message}</p>\n <small>\n {entry.certainty === \"reported\"\n ? \"Reported\"\n : entry.certainty === \"observed\"\n ? \"Observed\"\n : \"Unknown\"}{\" \"}\n · Count {recurrence?.count ?? entry.count}\n {entry.firstTime ? ` · First ${formatDateTime(entry.firstTime)}` : \"\"}\n </small>\n {entry.gap && <small>{entry.gap}</small>}\n {recurrence && recurrence.entries.length > 1 && (\n <details\n open={openTimeline.includes(recurrence.key)}\n onToggle={(event) => {\n const open = event.currentTarget.open;\n setOpenTimeline((items) =>\n open\n ? [...new Set([...items, recurrence.key])]\n : items.filter((item) => item !== recurrence.key),\n );\n }}\n >\n <summary>\n {recurrence.affected.length} affected resources · {recurrence.entries.length} original entries\n </summary>\n <small>{recurrence.affected.join(\" · \")}</small>\n <ul>\n {recurrence.entries.map((original, index) => (\n <li key={`${original.id}/${index}`}>\n <small>\n {original.time ? formatDateTime(original.time) : \"Time unknown\"} ·{\" \"}\n {timelineResource(original)} · Count {original.count}\n </small>\n {original.message}\n </li>\n ))}\n </ul>\n </details>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n {!timeline.length && (\n <div className=\"diagnostics-empty\">\n <p>\n {warningOnly\n ? \"No retained warning events match these filters\"\n : \"No retained events or observed changes match these filters\"}\n </p>\n {warningOnly && (\n <button type=\"button\" onClick={() => setWarningOnly(false)}>\n Show all events\n </button>\n )}\n </div>\n )}\n </>\n )}\n {(tab === \"Pending\" || readinessView) && data && (\n <>\n <label>\n {triageLabel}{\" \"}\n <DiagnosticsSelect\n label={triageLabel}\n value={triageUid}\n onChange={readinessView ? setNotReadyUid : setPendingUid}\n options={[\n { value: \"\", label: \"Select a pod\" },\n ...triagePods.map((pod) => ({\n value: pod.metadata.uid ?? \"\",\n label: `${pod.metadata.namespace} / ${pod.metadata.name}`,\n })),\n ]}\n />\n </label>\n {selectedPod && diagnosis ? (\n <>\n <div className={`pending-heading ${consumerStatus([selectedPod]).tone}`}>\n <div className=\"pending-title-row\">\n <div>\n <strong>\n {selectedPod.metadata.namespace} / {selectedPod.metadata.name}\n </strong>\n <div className=\"pending-state-row\">\n <h3>\n {readinessView\n ? \"Not ready\"\n : diagnosis.state === \"assigned-waiting\"\n ? \"Assigned and waiting\"\n : \"Unscheduled\"}\n </h3>\n {consumerStatus([selectedPod]).tone === \"error\" && <ConsumerStatus pods={[selectedPod]} />}\n </div>\n </div>\n <NativeTooltip title=\"Open pod details\">\n <button\n className=\"pending-open-action\"\n type=\"button\"\n onClick={(event) => openResource(selectedPod, data!.clusterId, event)}\n >\n <AiIcon material=\"open_in_new\" size={15} />\n Open pod\n </button>\n </NativeTooltip>\n </div>\n <p>\n {readinessView\n ? \"The pod is running but needs attention. Check readiness conditions, container status and events.\"\n : diagnosis.state === \"assigned-waiting\"\n ? \"A node is assigned. Check pod conditions and events for startup or storage issues.\"\n : \"No node is assigned. Start with scheduler events, then inspect constraints.\"}\n </p>\n <div className=\"pending-request-badges\">\n <span>\n <AiIcon material=\"memory\" size={14} />\n CPU request <strong>{podRequest(selectedPod, \"cpu\")}</strong>\n </span>\n <span>\n <AiIcon material=\"storage\" size={14} />\n Memory request <strong>{podRequest(selectedPod, \"memory\")}</strong>\n </span>\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>Scheduling constraints and pod conditions</summary>\n <p>\n Node selector:{\" \"}\n {Object.entries(selectedPod.spec?.nodeSelector ?? {})\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"None\"}\n </p>\n <p>\n Tolerations:{\" \"}\n {(selectedPod.spec?.tolerations ?? [])\n .map(\n (item) =>\n `${item.key || \"all keys\"} ${item.operator ?? \"Equal\"}${item.value ? ` ${item.value}` : \"\"} (${item.effect || \"all effects\"})`,\n )\n .join(\", \") || \"None\"}\n </p>\n <p>\n Required node affinity:{\" \"}\n {selectedPod.spec?.affinity?.nodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution\n ? JSON.stringify(\n selectedPod.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution,\n ).slice(0, 2000)\n : \"None\"}\n </p>\n\n <p>\n {selectedPod.status?.conditions\n ?.map(\n (condition) =>\n `${condition.type}: ${condition.status}${condition.message ? ` (${condition.message})` : \"\"}`,\n )\n .join(\" · \")}\n </p>\n </details>\n <IncidentCopyButton\n clusterId={data.clusterId}\n incident={{\n problem: triageLabel,\n facts: [\n readinessView ? consumerStatus([selectedPod]).label : diagnosis.state,\n `CPU request ${podRequest(selectedPod, \"cpu\")}; memory request ${podRequest(selectedPod, \"memory\")}`,\n ...diagnosis.evidence.slice(0, 8).map((entry) => entry.message),\n ],\n time: data.time,\n resources: [\n { kind: \"Pod\", namespace: selectedPod.metadata.namespace, name: selectedPod.metadata.name! },\n ],\n }}\n />\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n onClick={() =>\n explainDiagnosticFinding({\n clusterId: data.clusterId,\n title: triageLabel,\n summary: `${readinessView ? consumerStatus([selectedPod]).label : diagnosis.state}. CPU request ${podRequest(selectedPod, \"cpu\")}, memory request ${podRequest(selectedPod, \"memory\")}. ${diagnosis.evidence\n .slice(0, 8)\n .map((entry) => entry.message)\n .join(\"; \")}`,\n resource: {\n kind: \"Pod\",\n namespace: selectedPod.metadata.namespace,\n name: selectedPod.metadata.name!,\n },\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n Explain with AI\n </DiagnosticExplainButton>\n <h3>{readinessView ? \"Readiness and retained evidence\" : \"Scheduling evidence\"}</h3>\n <div className=\"diagnostics-table\">\n <table className=\"evidence-table\">\n <colgroup>\n <col className=\"evidence-source\" />\n <col className=\"evidence-node\" />\n <col className=\"evidence-finding\" />\n </colgroup>\n <thead>\n <tr>\n <th>Evidence source</th>\n <th>Node</th>\n <th>Finding</th>\n </tr>\n </thead>\n <tbody>\n {diagnosis.evidence.map((entry, index) => (\n <tr key={`${entry.node}/${index}`}>\n <td>\n <span className={`evidence-badge ${entry.source === \"event\" ? \"reported\" : \"inferred\"}`}>\n <AiIcon material={entry.source === \"event\" ? \"receipt_long\" : \"rule\"} size={13} />\n {entry.source === \"event\" ? \"Reported\" : \"Inferred\"}\n </span>\n <small>\n {entry.source === \"event\" ? \"Reported Kubernetes event\" : \"Local hard constraint\"}\n </small>\n </td>\n <td>{entry.node ?? \"—\"}</td>\n <td>{entry.message}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {!diagnosis.evidence.length && <p>No retained evidence is available for this pod</p>}\n <details className=\"diagnostics-explainer\">\n <summary>What this diagnosis can establish</summary>\n {diagnosis.limitations.map((message) => (\n <p key={message}>{message}</p>\n ))}\n </details>\n </>\n ) : (\n <p className=\"diagnostics-empty\">\n {!data.pods\n ? `Pod inventory unavailable. Check cluster access before investigating ${readinessView ? \"readiness\" : \"pending pods\"}.`\n : triagePods.length\n ? `Select a ${readinessView ? \"not ready\" : \"pending\"} pod to see evidence and requests`\n : `No ${readinessView ? \"not ready\" : \"pending\"} pods in this snapshot`}\n </p>\n )}\n </>\n )}\n </div>\n );\n}\nfunction ConsumerRows({\n group,\n clusterId,\n snapshotTime,\n expanded,\n toggle,\n usage,\n depth,\n}: {\n group: ConsumerGroup;\n depth: number;\n clusterId: string;\n snapshotTime: number;\n expanded: boolean;\n toggle: () => void;\n usage: PodUsage[];\n}) {\n return (\n <>\n <tr\n className={`consumer-workload-row consumer-depth-${depth} consumer-tone-${consumerStatus(group.pods).tone}`}\n data-row-depth={depth}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n {group.ownerResolved && resources[group.kind] && group.name !== \"Unknown\" ? (\n <NativeTooltip title={`Open ${group.kind} ${group.namespace} / ${group.name}`}>\n <button\n className=\"consumer-resource-link\"\n type=\"button\"\n onClick={(event) =>\n openResource(\n {\n kind: group.kind,\n metadata: { uid: group.identity, namespace: group.namespace, name: group.name },\n },\n clusterId,\n event,\n )\n }\n >\n <span className=\"consumer-link-name\">{group.name}</span>\n </button>\n </NativeTooltip>\n ) : (\n <span className=\"consumer-identity-label\">{group.name}</span>\n )}\n <ConsumerStatus pods={group.pods} />\n </div>\n <small className=\"consumer-subtitle\">\n <AiIcon material=\"folder_open\" size={12} />\n {group.namespace}\n <span>·</span>\n <AiIcon material={group.kind === \"Pod\" ? \"view_in_ar\" : \"account_tree\"} size={12} />\n {group.kind}\n <span>·</span>\n {group.pods.length} pods{group.ownerResolved ? \"\" : \" · Owner chain incomplete\"}\n </small>\n </div>\n <div className=\"consumer-row-actions\">\n {[\"warning\", \"error\"].includes(consumerStatus(group.pods).tone) && (\n <IncidentCopyButton\n clusterId={clusterId}\n incident={{\n problem: `${group.kind} ${group.name}: ${consumerStatus(group.pods).label}`,\n facts: [\n `${group.pods.length} pods`,\n `CPU ${resourceText(group.cpu.usage, \"cpu\")} used / ${resourceText(group.cpu.requests, \"cpu\")} requested`,\n `Memory ${resourceText(group.memory.usage, \"memory\")} used / ${resourceText(group.memory.requests, \"memory\")} requested`,\n ],\n time: snapshotTime,\n resources: [{ kind: group.kind, namespace: group.namespace, name: group.name }],\n }}\n />\n )}\n\n {[\"warning\", \"error\"].includes(consumerStatus(group.pods).tone) && (\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n title=\"Explain with AI\"\n aria-label={`Explain finding for ${group.name}`}\n onClick={() =>\n explainDiagnosticFinding({\n clusterId,\n title: `${group.kind} ${group.name}`,\n summary: `${consumerStatus(group.pods).label}; ${group.pods.length} pods. CPU ${resourceText(group.cpu.usage, \"cpu\")} used / ${resourceText(group.cpu.requests, \"cpu\")} requested; memory ${resourceText(group.memory.usage, \"memory\")} used / ${resourceText(group.memory.requests, \"memory\")} requested`,\n resource: { kind: group.kind, namespace: group.namespace, name: group.name },\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n </DiagnosticExplainButton>\n )}\n\n <span className=\"consumer-expand-slot\">\n <NativeTooltip title={expanded ? \"Collapse pods\" : \"Expand pods\"}>\n <button\n className=\"consumer-expand\"\n type=\"button\"\n aria-label={`${expanded ? \"Collapse\" : \"Expand\"} pods for ${group.name}`}\n aria-expanded={expanded}\n onClick={toggle}\n >\n <AiIcon material={expanded ? \"expand_less\" : \"expand_more\"} />\n </button>\n </NativeTooltip>\n </span>\n </div>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={group.cpu} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={group.memory} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <UnscheduledCell cpu={group.cpu} memory={group.memory} />\n </td>\n </tr>\n {expanded &&\n group.pods.map((pod) => (\n <tr\n key={pod.metadata.uid}\n className={`consumer-pod-row consumer-depth-${depth + 1} consumer-tone-${consumerStatus([pod]).tone}`}\n data-row-depth={depth + 1}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n <NativeTooltip title=\"Open pod details\">\n <button\n className=\"consumer-resource-link\"\n type=\"button\"\n onClick={(event) => openResource(pod, clusterId, event)}\n >\n <AiIcon material=\"view_in_ar\" size={14} />\n <span className=\"consumer-link-name\">{pod.metadata.name}</span>\n </button>\n </NativeTooltip>\n <ConsumerStatus pods={[pod]} />\n </div>\n <small className=\"consumer-subtitle\">\n {pod.status?.phase ?? \"Unknown\"}\n <span>·</span>\n {pod.spec?.nodeName ? `Node ${pod.spec.nodeName}` : \"No node assigned\"}\n </small>\n </div>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={podResourceGroup(pod, usage).cpu} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={podResourceGroup(pod, usage).memory} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <NativeTooltip\n title={\n pod.spec?.nodeName\n ? \"No unscheduled requests\"\n : \"Unscheduled requests are included in the workload total\"\n }\n >\n <span className=\"unscheduled-empty\">{pod.spec?.nodeName ? \"—\" : \"Included above\"}</span>\n </NativeTooltip>\n </td>\n </tr>\n ))}\n </>\n );\n}\n\nfunction podRequest(pod: DiagnosticsObject, metric: \"cpu\" | \"memory\"): string {\n try {\n return resourceText(effectivePodResource(pod, metric), metric);\n } catch {\n return \"Unavailable\";\n }\n}\nfunction NamespaceRows({\n namespace,\n groups,\n clusterId,\n snapshotTime,\n usage,\n open,\n toggleNamespace,\n expanded,\n toggleGroup,\n}: {\n namespace: string;\n groups: ConsumerGroup[];\n clusterId: string;\n snapshotTime: number;\n usage: PodUsage[];\n open: boolean;\n toggleNamespace: () => void;\n expanded: string[];\n toggleGroup: (key: string) => void;\n}) {\n const sum = (metric: \"cpu\" | \"memory\"): ResourceSummary =>\n groups.reduce(\n (total, group) => {\n const next = group[metric];\n return {\n requests: total.requests + next.requests,\n scheduledRequests: total.scheduledRequests + next.scheduledRequests,\n unscheduledRequests: total.unscheduledRequests + next.unscheduledRequests,\n usage:\n total.usage === undefined && next.usage === undefined ? undefined : (total.usage ?? 0) + (next.usage ?? 0),\n coveredPods: total.coveredPods + next.coveredPods,\n totalPods: total.totalPods + next.totalPods,\n unknownRequestPods: total.unknownRequestPods + next.unknownRequestPods,\n };\n },\n {\n requests: 0,\n scheduledRequests: 0,\n unscheduledRequests: 0,\n coveredPods: 0,\n totalPods: 0,\n unknownRequestPods: 0,\n } as ResourceSummary,\n );\n return (\n <>\n {namespace && (\n <tr\n className={`consumer-namespace-row consumer-depth-0 consumer-tone-${consumerStatus(groups.flatMap((group) => group.pods)).tone}`}\n data-row-depth={0}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n <NativeTooltip title=\"Open namespace\">\n <button\n type=\"button\"\n className=\"consumer-resource-link namespace-identity\"\n onClick={(event) =>\n openResource({ kind: \"Namespace\", metadata: { name: namespace } }, clusterId, event)\n }\n >\n <AiIcon material=\"folder_open\" size={17} />\n <span className=\"consumer-link-name\">{namespace}</span>\n </button>\n </NativeTooltip>\n <ConsumerStatus pods={groups.flatMap((group) => group.pods)} />\n <small>\n {groups.filter((group) => consumerStatus(group.pods).tone === \"healthy\").length} ready ·{\" \"}\n {groups.filter((group) => [\"warning\", \"error\"].includes(consumerStatus(group.pods).tone)).length}{\" \"}\n need attention · {groups.filter((group) => consumerStatus(group.pods).tone === \"neutral\").length}{\" \"}\n unknown\n </small>\n </div>\n <NativeTooltip title=\"Resource totals include only consumers shown by the current filters\">\n <small className=\"consumer-subtitle\">\n {groups.length} filtered consumers<span>·</span>\n {groups.reduce((total, group) => total + group.pods.length, 0)} pods\n </small>\n </NativeTooltip>\n </div>\n <span className=\"consumer-expand-slot\">\n <NativeTooltip title={open ? \"Collapse namespace workloads\" : \"Expand namespace workloads\"}>\n <button\n className=\"consumer-expand\"\n type=\"button\"\n aria-label={`${open ? \"Collapse\" : \"Expand\"} workloads in ${namespace}`}\n aria-expanded={open}\n onClick={toggleNamespace}\n >\n <AiIcon material={open ? \"expand_less\" : \"expand_more\"} />\n </button>\n </NativeTooltip>\n </span>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={sum(\"cpu\")} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={sum(\"memory\")} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <UnscheduledCell cpu={sum(\"cpu\")} memory={sum(\"memory\")} />\n </td>\n </tr>\n )}\n {open &&\n groups.map((group) => (\n <ConsumerRows\n key={groupKey(group)}\n group={group}\n depth={namespace ? 1 : 0}\n snapshotTime={snapshotTime}\n clusterId={clusterId}\n expanded={expanded.includes(groupKey(group))}\n toggle={() => toggleGroup(groupKey(group))}\n usage={usage}\n />\n ))}\n </>\n );\n}\n\nfunction podResourceGroup(pod: DiagnosticsObject, usage: PodUsage[]): ConsumerGroup {\n return buildConsumerGroups(\n [\n {\n ...pod,\n kind: \"Pod\",\n metadata: { ...pod.metadata, ownerReferences: [] },\n status: { ...pod.status, phase: undefined },\n },\n ],\n [],\n usage,\n )[0]!;\n}\nfunction eventCategory(reason: string): string {\n if (reason === \"Observed change\") return \"observed\";\n if (reason === \"Warning\") return \"warning\";\n if ([\"Rollout\", \"RolloutObserved\"].includes(reason)) return \"rollout\";\n if (reason === \"Restart\" || reason.startsWith(\"Restarts/\")) return \"restart\";\n if (reason === \"Readiness\" || reason.startsWith(\"Readiness/\")) return \"readiness\";\n return \"event\";\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","names":[],"sources":["../../src/renderer/diagnostics.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { reaction } from \"mobx\";\nimport { type MouseEvent, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { formatDateTime } from \"../common/date-time\";\nimport {\n buildConsumerGroups,\n type ConsumerGroup,\n type DiagnosticsObject,\n diagnosePendingPod,\n effectivePodResource,\n normalizeEvents,\n observeResourceChanges,\n type PodUsage,\n type ResourceSummary,\n type TimelineEntry,\n} from \"../common/resource-diagnostics\";\nimport { groupTimelineEntries } from \"../common/timeline-groups\";\nimport { explainDiagnosticFinding } from \"./ai-diagnostic-handoff\";\nimport { AiIcon } from \"./ai-icon\";\nimport { DiagnosticExplainButton } from \"./diagnostic-explain-button\";\nimport { diagnosticsStyles } from \"./diagnostics.css\";\nimport { diagnosticsScreenFinding } from \"./diagnostics-screen-finding\";\nimport { DIAGNOSTICS_NAMESPACE_EVENT, readDiagnosticsState, saveDiagnosticsState } from \"./diagnostics-state\";\nimport { IncidentCopyButton } from \"./incident-copy-button\";\nimport {\n getCollectedPodUsage,\n getMonitoringSnapshot,\n type MonitoringSnapshot,\n retainMonitoringCollector,\n} from \"./monitoring-collector\";\nimport { NativeTooltip } from \"./native-tooltip\";\n\nconst viewDescriptions = {\n Consumers: [\n \"What is using cluster resources?\",\n \"Compare workload usage and requests, then expand a workload to inspect its pods.\",\n ],\n Timeline: [\n \"What changed in this workload?\",\n \"Follow related Kubernetes events and changes observed while this view is open.\",\n ],\n \"Not ready\": [\"Why is this pod not ready?\", \"Inspect running pod readiness, conditions and retained events.\"],\n Pending: [\n \"Why is this pod waiting?\",\n \"Inspect scheduling evidence and resource requests before opening the pod for investigation.\",\n ],\n};\nfunction DiagnosticsSelect({\n label,\n value,\n onChange,\n options,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n options: { value: string; label: string }[];\n}) {\n return (\n <span className=\"diagnostics-select\">\n <Renderer.Component.Select\n aria-label={label}\n value={value}\n options={options}\n onChange={(option) => {\n if (option) onChange(option.value);\n }}\n isClearable={false}\n />\n </span>\n );\n}\nfunction ResourceCell({ summary, metric }: { summary: ResourceSummary; metric: \"cpu\" | \"memory\" }) {\n const complete = summary.coveredPods === summary.totalPods && !summary.unknownRequestPods;\n const ratio =\n complete && summary.usage !== undefined && summary.requests > 0\n ? `${((summary.usage / summary.requests) * 100).toFixed(0)}% of requests`\n : undefined;\n return (\n <div className=\"resource-cell\">\n <div className=\"resource-value\">\n <small>Usage</small>\n <strong>{resourceText(summary.usage, metric)}</strong>\n </div>\n <div className=\"resource-request\">\n <small>{summary.unknownRequestPods ? \"Known requests\" : \"Requests\"}</small>\n <span>{resourceText(summary.requests, metric)}</span>\n </div>\n <NativeTooltip title=\"Coverage is per resource. Missing metrics are unavailable, never zero.\">\n <small className=\"resource-coverage\">\n {summary.coveredPods}/{summary.totalPods} pods covered\n {summary.unknownRequestPods ? ` · ${summary.unknownRequestPods} requests unknown` : \"\"}\n {ratio ? ` · ${ratio}` : \"\"}\n </small>\n </NativeTooltip>\n {complete && summary.usage !== undefined && summary.requests > 0 && summary.usage > summary.requests && (\n <NativeTooltip title=\"Usage exceeds configured requests. Requests are reservations, not limits; this alone does not indicate a failure.\">\n <span className=\"request-burst\">\n <AiIcon material=\"info_outline\" size={12} />\n Above requests\n </span>\n </NativeTooltip>\n )}\n </div>\n );\n}\nfunction UnscheduledCell({ cpu, memory }: { cpu: ResourceSummary; memory: ResourceSummary }) {\n const partial = cpu.unknownRequestPods || memory.unknownRequestPods;\n if (!partial && !cpu.unscheduledRequests && !memory.unscheduledRequests)\n return (\n <NativeTooltip title=\"No unscheduled requests\">\n <span className=\"unscheduled-empty\">—</span>\n </NativeTooltip>\n );\n return (\n <div className={`unscheduled-cell${cpu.unscheduledRequests || memory.unscheduledRequests ? \" has-requests\" : \"\"}`}>\n <div>\n <small>CPU</small>\n <span>{unscheduledText(cpu, \"cpu\")}</span>\n </div>\n <div>\n <small>Memory</small>\n <span>{unscheduledText(memory, \"memory\")}</span>\n </div>\n </div>\n );\n}\nexport function consumerStatus(pods: DiagnosticsObject[]): { tone: string; label: string; icon: string } {\n const failureReasons = new Set([\n \"CrashLoopBackOff\",\n \"ImagePullBackOff\",\n \"ErrImagePull\",\n \"CreateContainerConfigError\",\n \"CreateContainerError\",\n \"RunContainerError\",\n \"InvalidImageName\",\n ]);\n for (const pod of pods) {\n if (pod.status?.phase === \"Succeeded\") continue;\n type WaitingStatus = { state?: { waiting?: { reason?: string } } };\n const status = pod.status as\n | { containerStatuses?: WaitingStatus[]; initContainerStatuses?: WaitingStatus[] }\n | undefined;\n const statuses = [...(status?.containerStatuses ?? []), ...(status?.initContainerStatuses ?? [])];\n const reason = statuses\n ?.map((status) => status.state?.waiting?.reason)\n .find((value) => value && failureReasons.has(value));\n if (pod.status?.phase === \"Failed\" || reason)\n return { tone: \"error\", label: reason ?? \"Failed\", icon: \"error_outline\" };\n }\n const pendingCount = pods.filter((pod) => pod.status?.phase === \"Pending\").length;\n if (pendingCount) return { tone: \"warning\", label: `${pendingCount} Pending`, icon: \"hourglass_empty\" };\n if (\n pods.some(\n (pod) =>\n pod.status?.phase !== \"Succeeded\" &&\n pod.status?.conditions?.some((condition) => condition.type === \"Ready\" && condition.status === \"False\"),\n )\n )\n return { tone: \"warning\", label: \"Not ready\", icon: \"warning_amber\" };\n if (\n pods.length &&\n pods.every(\n (pod) =>\n pod.status?.phase === \"Succeeded\" ||\n (pod.status?.phase === \"Running\" &&\n pod.status.conditions?.some((condition) => condition.type === \"Ready\" && condition.status === \"True\")),\n )\n )\n return pods.every((pod) => pod.status?.phase === \"Succeeded\")\n ? { tone: \"healthy\", label: \"Completed\", icon: \"check_circle\" }\n : {\n tone: \"healthy\",\n label: pods.some((pod) => pod.status?.phase === \"Succeeded\") ? \"Ready / Completed\" : \"Ready\",\n icon: \"check_circle_outline\",\n };\n return { tone: \"neutral\", label: \"Readiness unknown\", icon: \"help_outline\" };\n}\nfunction ConsumerStatus({ pods }: { pods: DiagnosticsObject[] }) {\n const status = consumerStatus(pods);\n return (\n <span className={`consumer-status ${status.tone}`}>\n <AiIcon material={status.icon} size={13} />\n {status.label}\n </span>\n );\n}\ntype Tab = \"Consumers\" | \"Timeline\" | \"Pending\" | \"Not ready\";\nconst hidden = () => document.visibilityState === \"hidden\";\nconst activeId = () => Renderer.Catalog.activeCluster.get()?.metadata.uid;\nconst groupKey = (group: ConsumerGroup) => `${group.namespace}/${group.identity}`;\nfunction resourceText(value: number | undefined, metric: \"cpu\" | \"memory\"): string {\n if (value === undefined) return \"Unavailable\";\n return metric === \"cpu\" ? `${value.toFixed(3)} cores` : `${(value / 1024 ** 2).toFixed(1)} MiB`;\n}\nfunction unscheduledText(summary: ResourceSummary, metric: \"cpu\" | \"memory\"): string {\n return `${summary.unknownRequestPods ? \"Partial known: \" : \"\"}${resourceText(summary.unscheduledRequests, metric)}`;\n}\nconst resources: Record<string, string> = {\n Pod: \"/api/v1\",\n Deployment: \"/apis/apps/v1\",\n ReplicaSet: \"/apis/apps/v1\",\n StatefulSet: \"/apis/apps/v1\",\n DaemonSet: \"/apis/apps/v1\",\n Job: \"/apis/batch/v1\",\n CronJob: \"/apis/batch/v1\",\n};\nconst plurals: Record<string, string> = {\n Pod: \"pods\",\n Deployment: \"deployments\",\n ReplicaSet: \"replicasets\",\n StatefulSet: \"statefulsets\",\n DaemonSet: \"daemonsets\",\n Job: \"jobs\",\n CronJob: \"cronjobs\",\n};\nfunction openResource(object: DiagnosticsObject, clusterId: string, event: MouseEvent): void {\n event.stopPropagation();\n const kind = object.kind ?? \"Pod\";\n if (activeId() !== clusterId || !object.metadata.name) return;\n if (kind === \"Namespace\") {\n void Promise.resolve(\n Renderer.Navigation.showDetails(`/api/v1/namespaces/${encodeURIComponent(object.metadata.name)}`),\n ).catch(() => {});\n return;\n }\n if (!object.metadata.namespace || !resources[kind]) return;\n const path = `${resources[kind]}/namespaces/${encodeURIComponent(object.metadata.namespace)}/${plurals[kind]}/${encodeURIComponent(object.metadata.name)}`;\n void Promise.resolve(Renderer.Navigation.showDetails(path)).catch(() => {});\n}\nconst projections = new WeakMap<MonitoringSnapshot, ReturnType<typeof projectSnapshot>>();\nfunction projectSnapshot(data: MonitoringSnapshot) {\n const usage = getCollectedPodUsage(data);\n const groups = buildConsumerGroups(data.pods ?? [], data.owners ?? [], usage);\n const objects = new Map<string, DiagnosticsObject>();\n const children = new Map<string, string[]>();\n for (const object of [...(data.owners ?? []), ...(data.pods ?? [])]) {\n const uid = object.metadata.uid;\n if (!uid) continue;\n objects.set(uid, object);\n const refs = object.metadata.ownerReferences ?? [];\n const parent = refs.find((item) => item.controller) ?? (refs.length === 1 ? refs[0] : undefined);\n if (parent) {\n const siblings = children.get(parent.uid) ?? [];\n siblings.push(uid);\n children.set(parent.uid, siblings);\n }\n }\n const related = new Map<string, Set<string>>();\n for (const group of groups) {\n const seen = new Set<string>();\n const stack = [group.identity];\n while (stack.length) {\n const uid = stack.pop()!;\n if (seen.has(uid)) continue;\n const object = objects.get(uid);\n if (object && object.metadata.namespace !== group.namespace) continue;\n seen.add(uid);\n stack.push(...(children.get(uid) ?? []));\n }\n related.set(groupKey(group), seen);\n }\n return { usage, groups, objects, related };\n}\nfunction projection(data: MonitoringSnapshot) {\n let value = projections.get(data);\n if (!value) {\n value = projectSnapshot(data);\n projections.set(data, value);\n }\n return value;\n}\nexport function DiagnosticsPage() {\n const initial = useRef(readDiagnosticsState(activeId() ?? \"\")).current;\n const scrollContainer = useRef<HTMLDivElement>(null);\n const stateCluster = useRef(activeId() ?? \"\");\n const [tab, setTab] = useState<Tab>(initial.tab);\n const [snapshot, setSnapshot] = useState<MonitoringSnapshot>();\n const [error, setError] = useState(\"\");\n const [filter, setFilter] = useState(initial.filter);\n const [namespaceScope, setNamespaceScope] = useState(initial.namespaceScope);\n const [resourceScope, setResourceScope] = useState(initial.resourceScope);\n const pendingScroll = useRef<{ clusterId: string; top: number } | undefined>({\n clusterId: stateCluster.current,\n top: initial.scrollTop,\n });\n const [needsAttention, setNeedsAttention] = useState(initial.needsAttention);\n const [groupMode, setGroupMode] = useState(initial.groupMode);\n const [namespacesOpen, setNamespacesOpen] = useState<string[]>(initial.namespacesOpen);\n const known = useRef(new Map<string, { group: ConsumerGroup; uids: Set<string> }>());\n const [sort, setSort] = useState(initial.sort);\n const [expanded, setExpanded] = useState<string[]>(initial.expanded);\n const [selected, setSelected] = useState(initial.selected);\n const [pendingUid, setPendingUid] = useState(initial.pendingUid);\n const [notReadyUid, setNotReadyUid] = useState(initial.notReadyUid ?? \"\");\n const [reason, setReason] = useState(initial.reason);\n const [warningOnly, setWarningOnly] = useState(initial.warningOnly);\n const [groupedTimeline, setGroupedTimeline] = useState(initial.groupedTimeline);\n const [openTimeline, setOpenTimeline] = useState<string[]>(initial.openTimeline);\n const viewState = useRef(initial);\n viewState.current = {\n tab,\n filter,\n namespaceScope,\n resourceScope,\n needsAttention,\n groupMode,\n namespacesOpen,\n sort,\n expanded,\n selected,\n pendingUid,\n notReadyUid,\n reason,\n warningOnly,\n groupedTimeline,\n openTimeline,\n scrollTop: viewState.current.scrollTop,\n };\n useEffect(() => {\n return () => saveDiagnosticsState(stateCluster.current, viewState.current);\n }, [initial]);\n useEffect(() => {\n const focusNamespace = (event: Event) => {\n const detail = (\n event as CustomEvent<{\n clusterId: string;\n namespace?: string;\n resourceScope?: { kind: string; name: string; uid?: string };\n }>\n ).detail;\n if (\n !detail ||\n detail.clusterId !== stateCluster.current ||\n detail.clusterId !== activeId() ||\n (!detail.namespace && !detail.resourceScope)\n )\n return;\n setTab(\"Consumers\");\n setNamespaceScope(detail.namespace);\n setResourceScope(detail.resourceScope);\n setFilter(\"\");\n setNeedsAttention(false);\n setGroupMode(detail.namespace ? \"namespace\" : \"workload\");\n setNamespacesOpen(detail.namespace ? [detail.namespace] : []);\n viewState.current.scrollTop = 0;\n pendingScroll.current = undefined;\n if (scrollContainer.current) scrollContainer.current.scrollTop = 0;\n };\n window.addEventListener(DIAGNOSTICS_NAMESPACE_EVENT, focusNamespace);\n return () => window.removeEventListener(DIAGNOSTICS_NAMESPACE_EVENT, focusNamespace);\n }, []);\n const [observed, setObserved] = useState<TimelineEntry[]>([]);\n const previous = useRef<MonitoringSnapshot>();\n useEffect(() => {\n const release = retainMonitoringCollector();\n let disposed = false;\n let generation = 0;\n let loading = false;\n const clear = () => {\n generation++;\n previous.current = undefined;\n known.current.clear();\n setSnapshot(undefined);\n setObserved([]);\n saveDiagnosticsState(stateCluster.current, viewState.current);\n stateCluster.current = activeId() ?? \"\";\n const restored = readDiagnosticsState(stateCluster.current);\n setTab(restored.tab);\n setFilter(restored.filter);\n setNamespaceScope(restored.namespaceScope);\n setResourceScope(restored.resourceScope);\n setNeedsAttention(restored.needsAttention);\n setGroupMode(restored.groupMode);\n setNamespacesOpen(restored.namespacesOpen);\n setSort(restored.sort);\n setExpanded(restored.expanded);\n setSelected(restored.selected);\n setPendingUid(restored.pendingUid);\n setNotReadyUid(restored.notReadyUid ?? \"\");\n setReason(restored.reason);\n setWarningOnly(restored.warningOnly);\n setGroupedTimeline(restored.groupedTimeline);\n setOpenTimeline(restored.openTimeline);\n viewState.current = restored;\n pendingScroll.current = { clusterId: stateCluster.current, top: restored.scrollTop };\n setError(\"\");\n };\n const load = async () => {\n if (loading || disposed || hidden()) return;\n const cluster = activeId();\n if (!cluster) {\n setError(\"Select a connected cluster\");\n return;\n }\n const current = generation;\n loading = true;\n try {\n const next = await getMonitoringSnapshot(true);\n if (disposed || current !== generation || next.clusterId !== activeId() || hidden()) return;\n const prior = previous.current;\n if (prior === next) return;\n if (prior && prior.clusterId === next.clusterId) {\n const entries: TimelineEntry[] = [];\n if (prior.time !== next.time)\n entries.push(\n ...observeResourceChanges(prior.pods ?? [], next.pods ?? [], new Date(next.time).toISOString()),\n );\n if (prior.owners !== next.owners && next.diagnosticsTime)\n entries.push(\n ...observeResourceChanges(\n prior.owners ?? [],\n next.owners ?? [],\n new Date(next.diagnosticsTime).toISOString(),\n ),\n );\n if (entries.length) setObserved((items) => [...entries, ...items].slice(0, 300));\n }\n const projected = projection(next);\n for (const group of projected.groups) {\n const key = groupKey(group);\n const remembered = known.current.get(key)?.uids ?? new Set<string>();\n for (const uid of projected.related.get(key) ?? []) remembered.add(uid);\n while (remembered.size > 500) remembered.delete(remembered.values().next().value!);\n known.current.set(key, { group, uids: remembered });\n }\n while (known.current.size > 100) known.current.delete(known.current.keys().next().value!);\n previous.current = next;\n setSnapshot(next);\n setError(\"\");\n } catch {\n if (!disposed && current === generation) setError(\"Diagnostics unavailable or access denied\");\n } finally {\n loading = false;\n }\n };\n const stop = reaction(activeId, () => {\n clear();\n void load();\n });\n const visibility = () => {\n if (document.visibilityState !== \"hidden\") void load();\n };\n const timer = window.setInterval(() => void load(), 1000);\n document.addEventListener(\"visibilitychange\", visibility);\n void load();\n return () => {\n disposed = true;\n generation++;\n stop();\n release();\n window.clearInterval(timer);\n document.removeEventListener(\"visibilitychange\", visibility);\n };\n }, []);\n const data = snapshot?.clusterId === activeId() ? snapshot : undefined;\n useLayoutEffect(() => {\n const pending = pendingScroll.current;\n if (!data || !pending || pending.clusterId !== data.clusterId || !scrollContainer.current) return;\n // restore after the snapshot and expanded rows have committed, then guard initial layout scroll events\n scrollContainer.current.scrollTop = pending.top;\n const frame = requestAnimationFrame(() => {\n if (pendingScroll.current !== pending || !scrollContainer.current) return;\n scrollContainer.current.scrollTop = pending.top;\n viewState.current.scrollTop = scrollContainer.current.scrollTop;\n pendingScroll.current = undefined;\n });\n return () => cancelAnimationFrame(frame);\n }, [data]);\n const projected = useMemo(() => (data ? projection(data) : undefined), [data]);\n const groups = useMemo(() => {\n if (!data || !projected) return [];\n if (!resourceScope) return projected.groups;\n if (resourceScope.kind === \"Pod\" || resourceScope.kind === \"Node\") {\n const pods = (data.pods ?? []).filter((pod) =>\n resourceScope.kind === \"Pod\"\n ? (resourceScope.uid ? pod.metadata.uid === resourceScope.uid : pod.metadata.name === resourceScope.name) &&\n (!namespaceScope || pod.metadata.namespace === namespaceScope)\n : pod.spec?.nodeName === resourceScope.name,\n );\n if (resourceScope.kind === \"Pod\") {\n // explicit pod navigation includes terminal pods while normal consumer totals exclude them\n const originalPods = new Map<DiagnosticsObject, DiagnosticsObject>();\n const focusedPods = pods.map((pod) => {\n const focused = { ...pod, status: { ...pod.status, phase: undefined } };\n originalPods.set(focused, pod);\n return focused;\n });\n return buildConsumerGroups(focusedPods, data.owners ?? [], projected.usage).map((group) => ({\n ...group,\n pods: group.pods.map((pod) => originalPods.get(pod)!),\n }));\n }\n return buildConsumerGroups(pods, data.owners ?? [], projected.usage);\n }\n return projected.groups.filter((group) =>\n resourceScope.uid\n ? group.identity === resourceScope.uid\n : group.kind === resourceScope.kind && group.name === resourceScope.name,\n );\n }, [data, projected, resourceScope, namespaceScope]);\n const filtered = useMemo(\n () =>\n groups\n .filter((group) => !namespaceScope || group.namespace === namespaceScope)\n .filter((group) =>\n `${group.namespace} ${group.name} ${group.kind}`.toLowerCase().includes(filter.toLowerCase()),\n )\n .filter((group) => !needsAttention || [\"error\", \"warning\"].includes(consumerStatus(group.pods).tone))\n .sort((a, b) =>\n sort === \"name\"\n ? a.namespace.localeCompare(b.namespace) ||\n a.name.localeCompare(b.name) ||\n a.kind.localeCompare(b.kind) ||\n a.identity.localeCompare(b.identity)\n : sort === \"requests\" || sort === \"memoryRequests\"\n ? b[sort === \"requests\" ? \"cpu\" : \"memory\"].requests - a[sort === \"requests\" ? \"cpu\" : \"memory\"].requests\n : (b[sort === \"memory\" ? \"memory\" : \"cpu\"].usage ?? -1) -\n (a[sort === \"memory\" ? \"memory\" : \"cpu\"].usage ?? -1),\n ),\n [groups, filter, namespaceScope, sort, needsAttention],\n );\n const warningUids = new Set(\n (data?.events ?? [])\n .filter((event) => event.type === \"Warning\")\n .map((event) => event.involvedObject?.uid ?? event.regarding?.uid)\n .filter((uid): uid is string => !!uid),\n );\n const applications = [...known.current.values()]\n .filter((item) => !warningOnly || [...item.uids].some((uid) => warningUids.has(uid)))\n .map((item) => item.group);\n const selectionAvailable = applications.some((group) => groupKey(group) === selected);\n const application = applications.find((group) => groupKey(group) === selected);\n const uids = new Set(known.current.get(selected)?.uids ?? []);\n const normalizedEvents = normalizeEvents(data?.events ?? []);\n const warningIds = new Set(\n normalizedEvents.filter((_entry, index) => data?.events?.[index]?.type === \"Warning\").map((entry) => entry.id),\n );\n const eventReferences = new Map(\n normalizedEvents.map((entry, index) => {\n const event = data?.events?.[index];\n return [entry.id, event?.involvedObject ?? event?.regarding] as const;\n }),\n );\n const timeline = [...normalizedEvents, ...observed]\n .filter(\n (entry) =>\n (!application || (!!entry.objectUid && uids.has(entry.objectUid))) &&\n (!reason || `${entry.reason} ${entry.message}`.toLowerCase().includes(reason.toLowerCase())) &&\n (!warningOnly || warningIds.has(entry.id)),\n )\n .sort((a, b) => (Date.parse(b.time ?? \"\") || 0) - (Date.parse(a.time ?? \"\") || 0));\n const timelineResource = (entry: TimelineEntry) => {\n const object = entry.objectUid ? projected?.objects.get(entry.objectUid) : undefined;\n const ref = eventReferences.get(entry.id);\n return `${object?.metadata.namespace ?? ref?.namespace ?? \"Unknown namespace\"} / ${object?.kind ?? ref?.kind ?? \"Resource\"} / ${object?.metadata.name ?? ref?.name ?? entry.objectUid ?? entry.id}`;\n };\n const timelineGroups = groupTimelineEntries(\n timeline,\n (entry) => {\n if (!warningIds.has(entry.id)) return entry.id;\n const owner = [...known.current.entries()].find(\n ([, item]) => !!entry.objectUid && item.uids.has(entry.objectUid),\n );\n return owner\n ? `${owner[1].group.namespace}/${owner[1].group.kind}/${owner[1].group.name}`\n : timelineResource(entry);\n },\n timelineResource,\n );\n const displayedTimeline = groupedTimeline ? timelineGroups.map((group) => group.latest) : timeline;\n useEffect(() => {\n if (!data || (tab !== \"Consumers\" && tab !== \"Timeline\")) return;\n const attach = () =>\n explainDiagnosticFinding(\n diagnosticsScreenFinding(data.clusterId, tab, filtered, displayedTimeline, timelineResource),\n );\n window.addEventListener(\"power-ai-request-screen-context\", attach);\n return () => window.removeEventListener(\"power-ai-request-screen-context\", attach);\n }, [data, tab, filtered, displayedTimeline]);\n const pending = (data?.pods ?? []).filter((pod) => pod.status?.phase === \"Pending\");\n const attentionPods = new Set(\n groups\n .filter((group) => !namespaceScope || group.namespace === namespaceScope)\n .flatMap((group) => group.pods)\n .filter((pod) => [\"warning\", \"error\"].includes(consumerStatus([pod]).tone))\n .map((pod) => pod.metadata.uid ?? pod),\n ).size;\n const AttentionCard = data?.pods ? \"button\" : \"div\";\n const notReady = (data?.pods ?? []).filter(\n (pod) => pod.status?.phase === \"Running\" && [\"warning\", \"error\"].includes(consumerStatus([pod]).tone),\n );\n const readinessView = tab === \"Not ready\";\n const triagePods = readinessView ? notReady : pending;\n const triageUid = readinessView ? notReadyUid : pendingUid;\n const triageLabel = readinessView ? \"Not ready pod\" : \"Pending pod\";\n const selectedPod = triagePods.find((pod) => pod.metadata.uid === triageUid);\n const diagnosis = selectedPod\n ? diagnosePendingPod(selectedPod, data?.nodes ?? [], data?.events ?? [], data?.pvcs)\n : undefined;\n return (\n <div\n ref={scrollContainer}\n onScroll={(event) => {\n if (!pendingScroll.current) viewState.current.scrollTop = event.currentTarget.scrollTop;\n }}\n className=\"power-diagnostics\"\n style={{ padding: 24, overflow: \"auto\", height: \"100%\", minWidth: 0 }}\n >\n <style>{diagnosticsStyles}</style>\n <header className=\"diagnostics-header\">\n <h2>Resource diagnostics</h2>\n <span className=\"snapshot-meta\">Read-only snapshot{data ? ` · ${formatDateTime(data.time)}` : \"\"}</span>\n </header>\n <nav aria-label=\"Diagnostics views\">\n {([\"Consumers\", \"Timeline\", \"Pending\", \"Not ready\"] as Tab[]).map((name) => (\n <NativeTooltip key={name} title={`Show ${name.toLowerCase()}`}>\n <button type=\"button\" aria-pressed={tab === name} onClick={() => setTab(name)}>\n <AiIcon\n material={name === \"Consumers\" ? \"account_tree\" : name === \"Timeline\" ? \"timeline\" : \"hourglass_empty\"}\n />\n {name}\n {name === \"Pending\" && data?.pods\n ? ` (${pending.length})`\n : name === \"Not ready\" && data?.pods\n ? ` (${notReady.length})`\n : \"\"}\n </button>\n </NativeTooltip>\n ))}\n </nav>\n {error && (\n <p className=\"diagnostics-notice\" role=\"status\">\n {error}. Check the cluster connection and your access permissions.\n </p>\n )}\n {data?.errors.map((message) => (\n <p className=\"diagnostics-notice\" role=\"status\" key={message}>\n {message}\n </p>\n ))}\n <section className=\"view-intro\">\n <h3>{viewDescriptions[tab][0]}</h3>\n <p>{viewDescriptions[tab][1]}</p>\n </section>\n {data && tab === \"Consumers\" && (\n <div className=\"diagnostics-summary\" aria-label=\"Snapshot summary\">\n <div className=\"summary-card workloads\">\n <span className=\"summary-icon\">\n <AiIcon material=\"account_tree\" size={22} />\n </span>\n <div>\n <strong>{data.pods ? groups.length : \"Unavailable\"}</strong>\n <span>Workloads and standalone pods</span>\n </div>\n </div>\n <div className=\"summary-card pods\">\n <span className=\"summary-icon\">\n <AiIcon material=\"view_in_ar\" size={22} />\n </span>\n <div>\n <strong>{data.pods?.length ?? \"Unavailable\"}</strong>\n <span>Pods in snapshot</span>\n </div>\n </div>\n <AttentionCard\n className={`summary-card pending${!data.pods ? \" unavailable\" : attentionPods ? \" attention\" : \"\"}`}\n {...(data.pods\n ? {\n type: \"button\" as const,\n title: \"Show consumers needing attention\",\n \"aria-label\": \"Show consumers needing attention\",\n onClick: () => {\n setNeedsAttention(true);\n setFilter(\"\");\n },\n }\n : {})}\n >\n <span className=\"summary-icon\">\n <AiIcon material=\"warning_amber\" size={22} />\n </span>\n <div>\n <strong>{data.pods ? attentionPods : \"Unavailable\"}</strong>\n <span>Needs attention</span>\n </div>\n </AttentionCard>\n </div>\n )}\n {!data && !error && (\n <p className=\"diagnostics-empty\" role=\"status\">\n Loading resource diagnostics…\n </p>\n )}\n {tab === \"Consumers\" && data && (\n <>\n {resourceScope && (\n <div className=\"namespace-scope\" role=\"status\">\n <span className=\"namespace-scope-label\">\n {resourceScope.kind}: {resourceScope.name}\n </span>\n <button type=\"button\" aria-label=\"Clear resource scope\" onClick={() => setResourceScope(undefined)}>\n <AiIcon material=\"close\" size={13} />\n Show all resources\n </button>\n </div>\n )}\n {namespaceScope && (\n <div className=\"namespace-scope\" role=\"status\">\n <span className=\"namespace-scope-label\">Namespace: {namespaceScope}</span>\n <button type=\"button\" aria-label=\"Clear namespace scope\" onClick={() => setNamespaceScope(undefined)}>\n <AiIcon material=\"close\" size={13} />\n Show all namespaces\n </button>\n </div>\n )}\n <div className=\"toolbar consumers-toolbar\">\n <label>\n Group by{\" \"}\n <DiagnosticsSelect\n label=\"Group consumers\"\n value={groupMode}\n onChange={setGroupMode}\n options={[\n { value: \"workload\", label: \"Workload\" },\n { value: \"namespace\", label: \"Namespace\" },\n ]}\n />\n </label>\n <label className=\"search-field\">\n Search consumers\n <span className=\"diagnostics-input\">\n <Renderer.Component.Input\n aria-label=\"Filter consumers\"\n placeholder=\"Namespace or workload\"\n value={filter}\n onChange={setFilter}\n />\n </span>\n </label>\n <label>\n Sort{\" \"}\n <DiagnosticsSelect\n label=\"Sort consumers\"\n value={sort}\n onChange={setSort}\n options={[\n { value: \"cpu\", label: \"CPU usage\" },\n { value: \"memory\", label: \"Memory usage\" },\n { value: \"requests\", label: \"CPU requests\" },\n { value: \"memoryRequests\", label: \"Memory requests\" },\n { value: \"name\", label: \"Namespace / name\" },\n ]}\n />\n </label>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox\n label=\"Needs attention\"\n value={needsAttention}\n onChange={setNeedsAttention}\n />\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>How to read usage and requests</summary>\n <p>\n Usage is measured consumption. Requests are configured resource reservations. Coverage is reported\n separately for CPU and memory; missing metrics are unavailable, never zero. Requests from unscheduled pods\n appear separately.\n </p>\n </details>\n <div className=\"diagnostics-table\">\n <table className=\"consumers-table\">\n <colgroup>\n <col className=\"consumer-column\" />\n <col className=\"metric-column\" />\n <col className=\"metric-column\" />\n <col className=\"unscheduled-column\" />\n </colgroup>\n <thead>\n <tr>\n <th>Namespace / consumer</th>\n <th className=\"numeric\">CPU usage / requests</th>\n <th className=\"numeric\">Memory usage / requests</th>\n <th>Unscheduled requests</th>\n </tr>\n </thead>\n <tbody>\n {(groupMode === \"namespace\" ? [...new Set(filtered.map((group) => group.namespace))] : [\"\"]).map(\n (namespace) => (\n <NamespaceRows\n key={namespace}\n namespace={namespace}\n groups={namespace ? filtered.filter((group) => group.namespace === namespace) : filtered}\n snapshotTime={data.time}\n clusterId={data?.clusterId ?? \"\"}\n usage={projected?.usage ?? []}\n open={!namespace || namespacesOpen.includes(namespace)}\n toggleNamespace={() =>\n setNamespacesOpen((items) =>\n items.includes(namespace)\n ? items.filter((item) => item !== namespace)\n : [...items, namespace],\n )\n }\n expanded={expanded}\n toggleGroup={(key) =>\n setExpanded((items) =>\n items.includes(key) ? items.filter((item) => item !== key) : [...items, key],\n )\n }\n />\n ),\n )}\n </tbody>\n </table>\n </div>\n {!filtered.length &&\n (!data.pods ? (\n <p className=\"diagnostics-empty\">Pod inventory unavailable</p>\n ) : filter ? (\n <p className=\"diagnostics-empty\">No consumers match this filter</p>\n ) : needsAttention && groups.length ? (\n <div\n className={`diagnostics-empty attention-empty ${groups.every((group) => consumerStatus(group.pods).tone === \"healthy\") ? \"all-ready\" : \"readiness-unconfirmed\"}`}\n >\n <AiIcon\n material={\n groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"check_circle_outline\"\n : \"info_outline\"\n }\n size={22}\n />\n <strong>\n {groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"All consumers are ready\"\n : \"No known issues\"}\n </strong>\n <small>\n {groups.every((group) => consumerStatus(group.pods).tone === \"healthy\")\n ? \"No pending pods or known failures in this snapshot.\"\n : \"Unconfirmed readiness is not treated as a failure. Show all consumers to inspect them.\"}\n </small>\n <button type=\"button\" onClick={() => setNeedsAttention(false)}>\n Show all consumers\n </button>\n </div>\n ) : (\n <p className=\"diagnostics-empty\">No consumers available</p>\n ))}\n </>\n )}\n {tab === \"Timeline\" && data && (\n <>\n <div className=\"toolbar timeline-toolbar\">\n <label>\n Application{\" \"}\n <DiagnosticsSelect\n label=\"Timeline application\"\n value={selectionAvailable ? selected : \"\"}\n onChange={setSelected}\n options={[\n { value: \"\", label: \"All applications\" },\n ...applications.map((group) => ({\n value: groupKey(group),\n label: `${group.namespace} / ${group.kind} / ${group.name}`,\n })),\n ]}\n />\n </label>\n <label className=\"search-field\">\n Search events\n <span className=\"diagnostics-input\">\n <Renderer.Component.Input\n aria-label=\"Filter timeline reason\"\n placeholder=\"Reason or message\"\n value={reason}\n onChange={setReason}\n />\n </span>\n </label>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox label=\"Warnings only\" value={warningOnly} onChange={setWarningOnly} />\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>Timeline coverage and timing</summary>\n <p>\n Kubernetes events have limited retention. Observed changes begin with this open view, retain at most 300\n entries, and have unknown transition times between snapshots. Related identities observed in this view are\n retained for at most 100 applications and 500 identities per application; older identity coverage can be\n incomplete.\n </p>\n </details>\n <div className=\"warning-filter\">\n <Renderer.Component.Checkbox\n label=\"Group recurring warnings\"\n value={groupedTimeline}\n onChange={setGroupedTimeline}\n />\n </div>\n <div className=\"timeline-legend\" aria-label=\"Event types\">\n {[\"Warning\", \"Rollout\", \"Restart\", \"Readiness\", \"Kubernetes event\", \"Observed change\"].map((label) => (\n <span key={label} className={`timeline-type ${eventCategory(label)}`}>\n {label}\n </span>\n ))}\n </div>\n <ol className=\"diagnostics-timeline\" aria-label=\"Workload event timeline\">\n {displayedTimeline.map((entry) => {\n const recurrence = groupedTimeline ? timelineGroups.find((group) => group.latest === entry) : undefined;\n const kind = eventCategory(entry.reason);\n const category = warningIds.has(entry.id)\n ? \"warning\"\n : kind === \"event\" && entry.certainty === \"observed\"\n ? \"observed\"\n : kind;\n const label =\n category === \"warning\"\n ? \"Warning\"\n : category === \"rollout\"\n ? \"Rollout\"\n : category === \"restart\"\n ? \"Restart\"\n : category === \"readiness\"\n ? \"Readiness\"\n : entry.certainty === \"observed\"\n ? \"Observed change\"\n : \"Kubernetes event\";\n const object = entry.objectUid ? projected?.objects.get(entry.objectUid) : undefined;\n const reference = eventReferences.get(entry.id);\n const referenceKind = object?.kind ?? reference?.kind;\n const metadata = object?.metadata ?? reference;\n return (\n <li key={entry.id} className={`timeline-entry ${category}`}>\n <div className=\"timeline-time\">\n {entry.time ? <time dateTime={entry.time}>{formatDateTime(entry.time)}</time> : \"Time unknown\"}\n <small>{entry.certainty === \"observed\" ? \"Observed at snapshot\" : \"Kubernetes event time\"}</small>\n </div>\n <div className=\"timeline-content\">\n <div className=\"timeline-card-top\">\n <div className=\"timeline-card-heading\">\n {\" \"}\n <span className={`timeline-type ${category}`}>{label}</span>\n <h4>{entry.reason}</h4>\n <small className=\"timeline-resource-identity\">\n <AiIcon material={referenceKind === \"Pod\" ? \"view_in_ar\" : \"account_tree\"} size={12} />\n {metadata?.name\n ? `${metadata.namespace ?? \"Namespace unknown\"} / ${referenceKind ?? \"Resource\"} / ${metadata.name}`\n : \"Resource identity unavailable\"}\n </small>\n </div>\n <div className=\"timeline-card-actions\" role=\"group\" aria-label=\"Event actions\">\n {object && data && (\n <NativeTooltip\n title={`Open ${object.kind ?? \"Pod\"} ${object.metadata.namespace} / ${object.metadata.name}`}\n >\n <button\n type=\"button\"\n className=\"timeline-resource-action\"\n aria-label=\"Open resource\"\n onClick={(event) => openResource(object, data.clusterId, event)}\n >\n <AiIcon material=\"open_in_new\" />\n </button>\n </NativeTooltip>\n )}\n <IncidentCopyButton\n clusterId={data.clusterId}\n incident={{\n problem: entry.reason,\n facts: [\n entry.message,\n `Reported count ${recurrence?.count ?? entry.count}`,\n ...((recurrence?.affected ?? []).length > 1\n ? [`Affected resources: ${recurrence?.affected.join(\"; \")}`]\n : []),\n ],\n time: entry.time ?? data.time,\n resources: (recurrence?.entries ?? [entry]).slice(0, 12).flatMap((original) => {\n const originalObject = original.objectUid\n ? projected?.objects.get(original.objectUid)\n : undefined;\n const originalReference = eventReferences.get(original.id);\n const originalMetadata = originalObject?.metadata ?? originalReference;\n const originalKind = originalObject?.kind ?? originalReference?.kind;\n return originalMetadata?.name && originalKind\n ? [\n {\n kind: originalKind,\n namespace: originalMetadata.namespace,\n name: originalMetadata.name,\n },\n ]\n : [];\n }),\n }}\n />\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n aria-label=\"Explain with AI\"\n title=\"Explain with AI\"\n onClick={() =>\n explainDiagnosticFinding({\n clusterId: data.clusterId,\n title: entry.reason,\n summary: `${timelineResource(entry)}: ${entry.message}. Reported count ${recurrence?.count ?? entry.count}`,\n resource:\n metadata?.name && referenceKind\n ? { kind: referenceKind, namespace: metadata.namespace, name: metadata.name }\n : undefined,\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n <span className=\"timeline-action-label\">Explain with AI</span>\n </DiagnosticExplainButton>\n </div>\n </div>\n <p>{entry.message}</p>\n <small>\n {entry.certainty === \"reported\"\n ? \"Reported\"\n : entry.certainty === \"observed\"\n ? \"Observed\"\n : \"Unknown\"}{\" \"}\n · Count {recurrence?.count ?? entry.count}\n {entry.firstTime ? ` · First ${formatDateTime(entry.firstTime)}` : \"\"}\n </small>\n {entry.gap && <small>{entry.gap}</small>}\n {recurrence && recurrence.entries.length > 1 && (\n <details\n open={openTimeline.includes(recurrence.key)}\n onToggle={(event) => {\n const open = event.currentTarget.open;\n setOpenTimeline((items) =>\n open\n ? [...new Set([...items, recurrence.key])]\n : items.filter((item) => item !== recurrence.key),\n );\n }}\n >\n <summary>\n {recurrence.affected.length} affected resources · {recurrence.entries.length} original entries\n </summary>\n <small>{recurrence.affected.join(\" · \")}</small>\n <ul>\n {recurrence.entries.map((original, index) => (\n <li key={`${original.id}/${index}`}>\n <small>\n {original.time ? formatDateTime(original.time) : \"Time unknown\"} ·{\" \"}\n {timelineResource(original)} · Count {original.count}\n </small>\n {original.message}\n </li>\n ))}\n </ul>\n </details>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n {!timeline.length && (\n <div className=\"diagnostics-empty\">\n <p>\n {warningOnly\n ? \"No retained warning events match these filters\"\n : \"No retained events or observed changes match these filters\"}\n </p>\n {warningOnly && (\n <button type=\"button\" onClick={() => setWarningOnly(false)}>\n Show all events\n </button>\n )}\n </div>\n )}\n </>\n )}\n {(tab === \"Pending\" || readinessView) && data && (\n <>\n <label>\n {triageLabel}{\" \"}\n <DiagnosticsSelect\n label={triageLabel}\n value={triageUid}\n onChange={readinessView ? setNotReadyUid : setPendingUid}\n options={[\n { value: \"\", label: \"Select a pod\" },\n ...triagePods.map((pod) => ({\n value: pod.metadata.uid ?? \"\",\n label: `${pod.metadata.namespace} / ${pod.metadata.name}`,\n })),\n ]}\n />\n </label>\n {selectedPod && diagnosis ? (\n <>\n <div className={`pending-heading ${consumerStatus([selectedPod]).tone}`}>\n <div className=\"pending-title-row\">\n <div>\n <strong>\n {selectedPod.metadata.namespace} / {selectedPod.metadata.name}\n </strong>\n <div className=\"pending-state-row\">\n <h3>\n {readinessView\n ? \"Not ready\"\n : diagnosis.state === \"assigned-waiting\"\n ? \"Assigned and waiting\"\n : \"Unscheduled\"}\n </h3>\n {consumerStatus([selectedPod]).tone === \"error\" && <ConsumerStatus pods={[selectedPod]} />}\n </div>\n </div>\n <NativeTooltip title=\"Open pod details\">\n <button\n className=\"pending-open-action\"\n type=\"button\"\n onClick={(event) => openResource(selectedPod, data!.clusterId, event)}\n >\n <AiIcon material=\"open_in_new\" size={15} />\n Open pod\n </button>\n </NativeTooltip>\n </div>\n <p>\n {readinessView\n ? \"The pod is running but needs attention. Check readiness conditions, container status and events.\"\n : diagnosis.state === \"assigned-waiting\"\n ? \"A node is assigned. Check pod conditions and events for startup or storage issues.\"\n : \"No node is assigned. Start with scheduler events, then inspect constraints.\"}\n </p>\n <div className=\"pending-request-badges\">\n <span>\n <AiIcon material=\"memory\" size={14} />\n CPU request <strong>{podRequest(selectedPod, \"cpu\")}</strong>\n </span>\n <span>\n <AiIcon material=\"storage\" size={14} />\n Memory request <strong>{podRequest(selectedPod, \"memory\")}</strong>\n </span>\n </div>\n </div>\n <details className=\"diagnostics-explainer\">\n <summary>Scheduling constraints and pod conditions</summary>\n <p>\n Node selector:{\" \"}\n {Object.entries(selectedPod.spec?.nodeSelector ?? {})\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"None\"}\n </p>\n <p>\n Tolerations:{\" \"}\n {(selectedPod.spec?.tolerations ?? [])\n .map(\n (item) =>\n `${item.key || \"all keys\"} ${item.operator ?? \"Equal\"}${item.value ? ` ${item.value}` : \"\"} (${item.effect || \"all effects\"})`,\n )\n .join(\", \") || \"None\"}\n </p>\n <p>\n Required node affinity:{\" \"}\n {selectedPod.spec?.affinity?.nodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution\n ? JSON.stringify(\n selectedPod.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution,\n ).slice(0, 2000)\n : \"None\"}\n </p>\n\n <p>\n {selectedPod.status?.conditions\n ?.map(\n (condition) =>\n `${condition.type}: ${condition.status}${condition.message ? ` (${condition.message})` : \"\"}`,\n )\n .join(\" · \")}\n </p>\n </details>\n <IncidentCopyButton\n clusterId={data.clusterId}\n incident={{\n problem: triageLabel,\n facts: [\n readinessView ? consumerStatus([selectedPod]).label : diagnosis.state,\n `CPU request ${podRequest(selectedPod, \"cpu\")}; memory request ${podRequest(selectedPod, \"memory\")}`,\n ...diagnosis.evidence.slice(0, 8).map((entry) => entry.message),\n ],\n time: data.time,\n resources: [\n { kind: \"Pod\", namespace: selectedPod.metadata.namespace, name: selectedPod.metadata.name! },\n ],\n }}\n />\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n onClick={() =>\n explainDiagnosticFinding({\n clusterId: data.clusterId,\n title: triageLabel,\n summary: `${readinessView ? consumerStatus([selectedPod]).label : diagnosis.state}. CPU request ${podRequest(selectedPod, \"cpu\")}, memory request ${podRequest(selectedPod, \"memory\")}. ${diagnosis.evidence\n .slice(0, 8)\n .map((entry) => entry.message)\n .join(\"; \")}`,\n resource: {\n kind: \"Pod\",\n namespace: selectedPod.metadata.namespace,\n name: selectedPod.metadata.name!,\n },\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n Explain with AI\n </DiagnosticExplainButton>\n <h3>{readinessView ? \"Readiness and retained evidence\" : \"Scheduling evidence\"}</h3>\n <div className=\"diagnostics-table\">\n <table className=\"evidence-table\">\n <colgroup>\n <col className=\"evidence-source\" />\n <col className=\"evidence-node\" />\n <col className=\"evidence-finding\" />\n </colgroup>\n <thead>\n <tr>\n <th>Evidence source</th>\n <th>Node</th>\n <th>Finding</th>\n </tr>\n </thead>\n <tbody>\n {diagnosis.evidence.map((entry, index) => (\n <tr key={`${entry.node}/${index}`}>\n <td>\n <span className={`evidence-badge ${entry.source === \"event\" ? \"reported\" : \"inferred\"}`}>\n <AiIcon material={entry.source === \"event\" ? \"receipt_long\" : \"rule\"} size={13} />\n {entry.source === \"event\" ? \"Reported\" : \"Inferred\"}\n </span>\n <small>\n {entry.source === \"event\" ? \"Reported Kubernetes event\" : \"Local hard constraint\"}\n </small>\n </td>\n <td>{entry.node ?? \"—\"}</td>\n <td>{entry.message}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {!diagnosis.evidence.length && <p>No retained evidence is available for this pod</p>}\n <details className=\"diagnostics-explainer\">\n <summary>What this diagnosis can establish</summary>\n {diagnosis.limitations.map((message) => (\n <p key={message}>{message}</p>\n ))}\n </details>\n </>\n ) : (\n <p className=\"diagnostics-empty\">\n {!data.pods\n ? `Pod inventory unavailable. Check cluster access before investigating ${readinessView ? \"readiness\" : \"pending pods\"}.`\n : triagePods.length\n ? `Select a ${readinessView ? \"not ready\" : \"pending\"} pod to see evidence and requests`\n : `No ${readinessView ? \"not ready\" : \"pending\"} pods in this snapshot`}\n </p>\n )}\n </>\n )}\n </div>\n );\n}\nfunction ConsumerRows({\n group,\n clusterId,\n snapshotTime,\n expanded,\n toggle,\n usage,\n depth,\n}: {\n group: ConsumerGroup;\n depth: number;\n clusterId: string;\n snapshotTime: number;\n expanded: boolean;\n toggle: () => void;\n usage: PodUsage[];\n}) {\n return (\n <>\n <tr\n className={`consumer-workload-row consumer-depth-${depth} consumer-tone-${consumerStatus(group.pods).tone}`}\n data-row-depth={depth}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n {group.ownerResolved && resources[group.kind] && group.name !== \"Unknown\" ? (\n <NativeTooltip title={`Open ${group.kind} ${group.namespace} / ${group.name}`}>\n <button\n className=\"consumer-resource-link\"\n type=\"button\"\n onClick={(event) =>\n openResource(\n {\n kind: group.kind,\n metadata: { uid: group.identity, namespace: group.namespace, name: group.name },\n },\n clusterId,\n event,\n )\n }\n >\n <span className=\"consumer-link-name\">{group.name}</span>\n </button>\n </NativeTooltip>\n ) : (\n <span className=\"consumer-identity-label\">{group.name}</span>\n )}\n <ConsumerStatus pods={group.pods} />\n </div>\n <small className=\"consumer-subtitle\">\n <AiIcon material=\"folder_open\" size={12} />\n {group.namespace}\n <span>·</span>\n <AiIcon material={group.kind === \"Pod\" ? \"view_in_ar\" : \"account_tree\"} size={12} />\n {group.kind}\n <span>·</span>\n {group.pods.length} pods{group.ownerResolved ? \"\" : \" · Owner chain incomplete\"}\n </small>\n </div>\n <div className=\"consumer-row-actions\">\n {[\"warning\", \"error\"].includes(consumerStatus(group.pods).tone) && (\n <IncidentCopyButton\n clusterId={clusterId}\n incident={{\n problem: `${group.kind} ${group.name}: ${consumerStatus(group.pods).label}`,\n facts: [\n `${group.pods.length} pods`,\n `CPU ${resourceText(group.cpu.usage, \"cpu\")} used / ${resourceText(group.cpu.requests, \"cpu\")} requested`,\n `Memory ${resourceText(group.memory.usage, \"memory\")} used / ${resourceText(group.memory.requests, \"memory\")} requested`,\n ],\n time: snapshotTime,\n resources: [{ kind: group.kind, namespace: group.namespace, name: group.name }],\n }}\n />\n )}\n\n {[\"warning\", \"error\"].includes(consumerStatus(group.pods).tone) && (\n <DiagnosticExplainButton\n type=\"button\"\n className=\"explain-finding\"\n title=\"Explain with AI\"\n aria-label={`Explain finding for ${group.name}`}\n onClick={() =>\n explainDiagnosticFinding({\n clusterId,\n title: `${group.kind} ${group.name}`,\n summary: `${consumerStatus(group.pods).label}; ${group.pods.length} pods. CPU ${resourceText(group.cpu.usage, \"cpu\")} used / ${resourceText(group.cpu.requests, \"cpu\")} requested; memory ${resourceText(group.memory.usage, \"memory\")} used / ${resourceText(group.memory.requests, \"memory\")} requested`,\n resource: { kind: group.kind, namespace: group.namespace, name: group.name },\n })\n }\n >\n <AiIcon material=\"auto_awesome\" size={13} />\n </DiagnosticExplainButton>\n )}\n\n <span className=\"consumer-expand-slot\">\n <NativeTooltip title={expanded ? \"Collapse pods\" : \"Expand pods\"}>\n <button\n className=\"consumer-expand\"\n type=\"button\"\n aria-label={`${expanded ? \"Collapse\" : \"Expand\"} pods for ${group.name}`}\n aria-expanded={expanded}\n onClick={toggle}\n >\n <AiIcon material={expanded ? \"expand_less\" : \"expand_more\"} />\n </button>\n </NativeTooltip>\n </span>\n </div>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={group.cpu} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={group.memory} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <UnscheduledCell cpu={group.cpu} memory={group.memory} />\n </td>\n </tr>\n {expanded &&\n group.pods.map((pod) => (\n <tr\n key={pod.metadata.uid}\n className={`consumer-pod-row consumer-depth-${depth + 1} consumer-tone-${consumerStatus([pod]).tone}`}\n data-row-depth={depth + 1}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n <NativeTooltip title=\"Open pod details\">\n <button\n className=\"consumer-resource-link\"\n type=\"button\"\n onClick={(event) => openResource(pod, clusterId, event)}\n >\n <AiIcon material=\"view_in_ar\" size={14} />\n <span className=\"consumer-link-name\">{pod.metadata.name}</span>\n </button>\n </NativeTooltip>\n <ConsumerStatus pods={[pod]} />\n </div>\n <small className=\"consumer-subtitle\">\n {pod.status?.phase ?? \"Unknown\"}\n <span>·</span>\n {pod.spec?.nodeName ? `Node ${pod.spec.nodeName}` : \"No node assigned\"}\n </small>\n </div>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={podResourceGroup(pod, usage).cpu} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={podResourceGroup(pod, usage).memory} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <NativeTooltip\n title={\n pod.spec?.nodeName\n ? \"No unscheduled requests\"\n : \"Unscheduled requests are included in the workload total\"\n }\n >\n <span className=\"unscheduled-empty\">{pod.spec?.nodeName ? \"—\" : \"Included above\"}</span>\n </NativeTooltip>\n </td>\n </tr>\n ))}\n </>\n );\n}\n\nfunction podRequest(pod: DiagnosticsObject, metric: \"cpu\" | \"memory\"): string {\n try {\n return resourceText(effectivePodResource(pod, metric), metric);\n } catch {\n return \"Unavailable\";\n }\n}\nfunction NamespaceRows({\n namespace,\n groups,\n clusterId,\n snapshotTime,\n usage,\n open,\n toggleNamespace,\n expanded,\n toggleGroup,\n}: {\n namespace: string;\n groups: ConsumerGroup[];\n clusterId: string;\n snapshotTime: number;\n usage: PodUsage[];\n open: boolean;\n toggleNamespace: () => void;\n expanded: string[];\n toggleGroup: (key: string) => void;\n}) {\n const sum = (metric: \"cpu\" | \"memory\"): ResourceSummary =>\n groups.reduce(\n (total, group) => {\n const next = group[metric];\n return {\n requests: total.requests + next.requests,\n scheduledRequests: total.scheduledRequests + next.scheduledRequests,\n unscheduledRequests: total.unscheduledRequests + next.unscheduledRequests,\n usage:\n total.usage === undefined && next.usage === undefined ? undefined : (total.usage ?? 0) + (next.usage ?? 0),\n coveredPods: total.coveredPods + next.coveredPods,\n totalPods: total.totalPods + next.totalPods,\n unknownRequestPods: total.unknownRequestPods + next.unknownRequestPods,\n };\n },\n {\n requests: 0,\n scheduledRequests: 0,\n unscheduledRequests: 0,\n coveredPods: 0,\n totalPods: 0,\n unknownRequestPods: 0,\n } as ResourceSummary,\n );\n return (\n <>\n {namespace && (\n <tr\n className={`consumer-namespace-row consumer-depth-0 consumer-tone-${consumerStatus(groups.flatMap((group) => group.pods)).tone}`}\n data-row-depth={0}\n >\n <td>\n <div className=\"consumer-identity-row\">\n <div className=\"consumer-identity-main\">\n <div className=\"consumer-title-line\">\n <NativeTooltip title=\"Open namespace\">\n <button\n type=\"button\"\n className=\"consumer-resource-link namespace-identity\"\n onClick={(event) =>\n openResource({ kind: \"Namespace\", metadata: { name: namespace } }, clusterId, event)\n }\n >\n <AiIcon material=\"folder_open\" size={17} />\n <span className=\"consumer-link-name\">{namespace}</span>\n </button>\n </NativeTooltip>\n <ConsumerStatus pods={groups.flatMap((group) => group.pods)} />\n <small>\n {groups.filter((group) => consumerStatus(group.pods).tone === \"healthy\").length} ready ·{\" \"}\n {groups.filter((group) => [\"warning\", \"error\"].includes(consumerStatus(group.pods).tone)).length}{\" \"}\n need attention · {groups.filter((group) => consumerStatus(group.pods).tone === \"neutral\").length}{\" \"}\n unknown\n </small>\n </div>\n <NativeTooltip title=\"Resource totals include only consumers shown by the current filters\">\n <small className=\"consumer-subtitle\">\n {groups.length} filtered consumers<span>·</span>\n {groups.reduce((total, group) => total + group.pods.length, 0)} pods\n </small>\n </NativeTooltip>\n </div>\n <span className=\"consumer-expand-slot\">\n <NativeTooltip title={open ? \"Collapse namespace workloads\" : \"Expand namespace workloads\"}>\n <button\n className=\"consumer-expand\"\n type=\"button\"\n aria-label={`${open ? \"Collapse\" : \"Expand\"} workloads in ${namespace}`}\n aria-expanded={open}\n onClick={toggleNamespace}\n >\n <AiIcon material={open ? \"expand_less\" : \"expand_more\"} />\n </button>\n </NativeTooltip>\n </span>\n </div>\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={sum(\"cpu\")} metric=\"cpu\" />\n </td>\n <td className=\"numeric\">\n <ResourceCell summary={sum(\"memory\")} metric=\"memory\" />\n </td>\n <td className=\"numeric\">\n <UnscheduledCell cpu={sum(\"cpu\")} memory={sum(\"memory\")} />\n </td>\n </tr>\n )}\n {open &&\n groups.map((group) => (\n <ConsumerRows\n key={groupKey(group)}\n group={group}\n depth={namespace ? 1 : 0}\n snapshotTime={snapshotTime}\n clusterId={clusterId}\n expanded={expanded.includes(groupKey(group))}\n toggle={() => toggleGroup(groupKey(group))}\n usage={usage}\n />\n ))}\n </>\n );\n}\n\nfunction podResourceGroup(pod: DiagnosticsObject, usage: PodUsage[]): ConsumerGroup {\n return buildConsumerGroups(\n [\n {\n ...pod,\n kind: \"Pod\",\n metadata: { ...pod.metadata, ownerReferences: [] },\n status: { ...pod.status, phase: undefined },\n },\n ],\n [],\n usage,\n )[0]!;\n}\nfunction eventCategory(reason: string): string {\n if (reason === \"Observed change\") return \"observed\";\n if (reason === \"Warning\") return \"warning\";\n if ([\"Rollout\", \"RolloutObserved\"].includes(reason)) return \"rollout\";\n if (reason === \"Restart\" || reason.startsWith(\"Restarts/\")) return \"restart\";\n if (reason === \"Readiness\" || reason.startsWith(\"Readiness/\")) return \"readiness\";\n return \"event\";\n}\n"],"mappings":"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"}
@@ -33,6 +33,7 @@ const require_secure_node_shell_menu = require("./menus/secure-node-shell-menu.j
33
33
  const require_monitoring = require("./monitoring.js");
34
34
  const require_monitoring_history_collection = require("./monitoring-history-collection.js");
35
35
  const require_node_monitoring = require("./node-monitoring.js");
36
+ const require_pod_details_enhancements = require("./pod-details-enhancements.js");
36
37
  const require_pod_monitoring = require("./pod-monitoring.js");
37
38
  const require_power_logs_entrypoints = require("./power-logs-entrypoints.js");
38
39
  const require_power_logs = require("./power-logs.js");
@@ -82,6 +83,7 @@ var FreelensPowerRenderer = class extends require_extensions.Renderer.LensExtens
82
83
  require_monitoring_history_collection.startMonitoringHistoryCollection,
83
84
  require_monitoring.startMonitoring,
84
85
  require_pod_monitoring.startPodMonitoring,
86
+ require_pod_details_enhancements.startPodDetailsEnhancements,
85
87
  require_button_styles.startPowerButtonStyles,
86
88
  require_appearance.startAppearanceOverride,
87
89
  require_welcome.startWelcomeOverride,