From: Afreen Misbah Date: Wed, 25 Feb 2026 15:18:57 +0000 (+0530) Subject: mgr/dashboard: Add data resileincy card X-Git-Tag: v21.0.0~127^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=be5b640860afcf4cad33d4575f176aecc414c9f6;p=ceph.git mgr/dashboard: Add data resileincy card - shows data resiliency status - shows active-clean PGs donut chart - shows reasons for missing active+clean PGs Fixes https://tracker.ceph.com/issues/75067 Signed-off-by: Afreen Misbah --- diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.html index 70b5853016a1..1673b3f7fb34 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.html @@ -158,6 +158,32 @@ } + + @if(vm?.overallSystemSev) { +
+
+ + + Data resiliency + + +
+ } @else { + + } @@ -229,7 +255,20 @@ } - + + +
+ + + + Status unavailable for some data + + +

Ceph cannot reliably determine the current state of some data. Availability may be affected.

+
+
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.ts index 2e5ad7e0504c..e044b5efd850 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/overview/health-card/overview-health-card.component.ts @@ -54,6 +54,34 @@ type HwRowVM = { error: number; }; +const DATA_RESILIENCY = { + ok: { + icon: 'success', + title: $localize`Data is fully replicated and available.`, + description: $localize`All replicas are in place and I/O is operating normally. No action is required.` + }, + progress: { + icon: 'sync', + title: $localize`Data integrity checks in progress`, + description: $localize`Ceph is running routine consistency checks on stored data and metadata to ensure data integrity. Data remains safe and accessible.` + }, + warn: { + icon: 'warning', + title: $localize`Restoring data redundancy`, + description: $localize`Some data replicas are missing or not yet in their final location. Ceph is actively rebalancing data to return to a healthy state.` + }, + warnDataLoss: { + icon: 'warning', + title: $localize`Status unavailable for some data`, + description: $localize`Ceph cannot reliably determine the current state of some data. Availability may be affected.` + }, + error: { + icon: 'error', + title: $localize`Data unavailable or inconsistent, manual intervention required`, + description: $localize`Some data is currently unavailable or inconsistent. Ceph could not automatically restore these resources, and manual intervention is required to restore data availability and consistency.` + } +}; + @Component({ selector: 'cd-overview-health-card', imports: [ @@ -88,6 +116,7 @@ export class OverviewHealthCardComponent { @Output() activeSectionChange = new EventEmitter(); activeSection: HealthCardTabSection | null = null; + data = DATA_RESILIENCY; healthItems: HealthItemConfig[] = [ { key: 'mon', label: $localize`Monitor` },