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:

  1. Array format — Response body is a direct JSON array of entities
  2. 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