defmodule Integrations.Kubernetes.Display do @moduledoc """ Dashboard panel for `Integrations.Kubernetes` (same package). Nested under the monitor's own namespace deliberately — the package's top-level module name never changes, and this module's name is guaranteed distinct from any separately-published standalone display package. `Display.BundledDefault` auto-hooks this whenever `Integrations.Kubernetes` starts, the same as if they were still one module. """ use CodeNameRaven.Display, category: :infrastructure, size_hint: :full @impl true def display_name, do: "Kubernetes" @impl true def compatible_monitors, do: [Integrations.Kubernetes] @impl true def render(assigns) do result = assigns[:result] nodes = (result && result.nodes) || [] deps = (result && result.deployments) || [] pods = (result && result.pods) || [] not_ready_nodes = Enum.filter(nodes, &(&1.ready != true)) degraded_deps = Enum.filter(deps, fn d -> d.available < d.desired end) problem_pods = Enum.filter(pods, fn p -> p.crash_looping or p.phase == "Failed" end) assigns = Map.merge(assigns, %{ nodes: nodes, deps: deps, pods: pods, not_ready_nodes: not_ready_nodes, degraded_deps: degraded_deps, problem_pods: problem_pods }) ~H"""
Not Ready Nodes
Degraded Deployments
Problem Pods