diff --git a/console-web/app/(dashboard)/page.tsx b/console-web/app/(dashboard)/page.tsx
index a24ce7d..c736186 100755
--- a/console-web/app/(dashboard)/page.tsx
+++ b/console-web/app/(dashboard)/page.tsx
@@ -14,6 +14,7 @@ import { Spinner } from "@/components/ui/spinner"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import * as api from "@/lib/api"
import { ApiError } from "@/lib/api-client"
+import { normalizeTopologyTenantState } from "@/lib/tenant-state"
import { cn, formatBinaryBytes, formatK8sMemory } from "@/lib/utils"
import type { ClusterResourcesResponse, NamespaceItem, NodeInfo } from "@/types/api"
import type { TopologyOverviewResponse, TopologyTenantState } from "@/types/topology"
@@ -33,6 +34,16 @@ const STATE_THEME: Record<
dot: "bg-emerald-500",
card: "border-emerald-200 bg-emerald-50/60",
},
+ Reconciling: {
+ badge: "border-blue-200 bg-blue-50 text-blue-700",
+ dot: "bg-blue-500",
+ card: "border-blue-200 bg-blue-50/60",
+ },
+ Blocked: {
+ badge: "border-purple-200 bg-purple-50 text-purple-700",
+ dot: "bg-purple-500",
+ card: "border-purple-200 bg-purple-50/60",
+ },
Updating: {
badge: "border-blue-200 bg-blue-50 text-blue-700",
dot: "bg-blue-500",
@@ -60,8 +71,11 @@ function getTreeDotClass(state: string): string {
case "Ready":
case "Running":
return "bg-emerald-500"
+ case "Reconciling":
case "Updating":
return "bg-blue-500"
+ case "Blocked":
+ return "bg-purple-500"
case "Degraded":
case "Pending":
return "bg-amber-500"
@@ -151,7 +165,10 @@ export default function DashboardPage() {
const topologySummary = topology?.cluster.summary
const tenantCount = topology?.namespaces.reduce((sum, ns) => sum + ns.tenants.length, 0) ?? 0
const unhealthyCount =
- topology?.namespaces.reduce((sum, ns) => sum + ns.tenants.filter((t) => t.state !== "Ready").length, 0) ?? 0
+ topology?.namespaces.reduce(
+ (sum, ns) => sum + ns.tenants.filter((tenant) => normalizeTopologyTenantState(tenant.state) !== "Ready").length,
+ 0,
+ ) ?? 0
const allPods = topology?.namespaces.flatMap((ns) => ns.tenants.flatMap((t) => t.pods ?? [])) ?? []
const podTotal = allPods.length
@@ -257,6 +274,7 @@ export default function DashboardPage() {
const tenantId = `t:${ns.name}/${tenant.name}`
const pools = tenant.pools ?? []
const pods = tenant.pods ?? []
+ const tenantState = normalizeTopologyTenantState(tenant.state)
return (