Storage Dashboard
Ceph storage visualization in Compass — cluster health, pool usage, OSD status, and monitor inventory from the FFO ontology.
The Storage Dashboard provides visibility into Ceph storage infrastructure by querying entity and relationship data from the Federal Frontier Ontology (FFO). It displays cluster health, storage pools, OSDs (Object Storage Daemons), and monitors in a tabular format.
Data Model
Ceph storage entities are modeled in the FFO TypeDB schema as standard entity types with relationships:
| Entity | Key Attributes | Description |
|---|---|---|
| Ceph Cluster | entity_name, health, capacity |
Top-level storage cluster |
| Pool | entity_name, usage, pg_count |
Storage pool within a cluster |
| OSD | entity_name, status, capacity |
Individual storage daemon |
| Monitor | entity_name, status, ip_address |
Ceph monitor node |
Important: Ceph entities use entity_name (not name) as their display identifier. This differs from most other FFO entity types. Queries and display logic must account for this distinction.
Dashboard Views
Cluster Health
The top-level view shows all Ceph clusters with their health status and aggregate capacity. Health values map to Ceph’s native health states: HEALTH_OK, HEALTH_WARN, and HEALTH_ERR.
Pool Usage
Displays storage pools within each cluster, showing:
- Pool name and type (replicated, erasure-coded)
- Current usage and available capacity
- Placement group (PG) count
- Associated applications
OSD Status
Lists all OSDs with their operational status:
- Up/In — Normal operation, serving I/O
- Up/Out — Running but not participating in data placement
- Down/In — Not running but still in the CRUSH map
- Down/Out — Removed from active service
Monitor Inventory
Shows Ceph monitors with their status and network addresses. A healthy Ceph cluster requires a quorum of monitors (typically 3 or 5).
API Response Handling
The storage dashboard handles two response formats from the Compass API:
- Array format — Response body is a direct JSON array of entities
- Wrapped format — Response body is
{"results": [...]}with entities inside
The frontend uses a getRows() helper function to normalize both formats into a consistent array for table rendering:
function getRows(response) {
if (Array.isArray(response)) {
return response;
}
if (response?.results && Array.isArray(response.results)) {
return response.results;
}
return [];
}
This dual-format support exists because different API endpoints and MCP tool responses may return data in either shape. Always use getRows() rather than assuming a specific response structure.
Querying Storage Data
Storage data can also be queried through the AI Chat interface. Common queries:
| Query | What it returns |
|---|---|
| “ceph health” | Cluster health summary (template match) |
| “show ceph pools” | Pool listing with usage |
| “list OSDs” | OSD inventory with status |
| “ceph capacity” | Aggregate and per-pool capacity |
The “ceph health” query is handled by a query template for instant results. Other storage queries go through the LLM path and may invoke FFO MCP tools or the Ceph MCP server directly.
Troubleshooting
| Symptom | Likely Cause | Resolution |
|---|---|---|
| Empty storage tables | FFO has no Ceph entities loaded | Verify Ceph entities exist in TypeDB; check data ingestion |
| Entity names show as blank | Querying name instead of entity_name |
Ensure queries and display use entity_name for Ceph entities |
| Tables show “No data” | API returned unexpected format | Check browser console; verify getRows() is handling the response shape |
| Stale capacity numbers | FFO data not recently synced | Check the Ceph data ingestion pipeline and sync schedule |