2.2 KiB
2.2 KiB
Data Model — Tenant UI Polish
This feature is read-only. It introduces no schema changes.
Entities
Tenant
- Role: scope boundary for all queries.
- Source:
Tenant::current()(Filament tenancy).
OperationRun
- Role: operations feed, KPIs, and canonical “View run” destinations.
- Key fields used (existing):
tenant_idtypestatus(queued|running|completed)outcome(succeeded|partial|failed|...)created_at,started_at,completed_atsummary_counts,failure_summary(JSONB)
Derived values:
- Active:
status IN ('queued','running') - Terminal:
status = 'completed' - Avg duration (7 days): only terminal runs with
started_atandcompleted_at.
InventoryItem
- Role: inventory totals and coverage chips.
- Key fields used (existing, inferred from resources):
tenant_id- coverage-related flags / fields used to categorize: Restorable, Partial, Risk, Dependencies
Derived values:
- Total items
- Coverage % =
restorable / total(if total > 0) - Chip counts: Restorable, Partial, Risk, Dependencies
InventorySyncRun
- Role: “Last Inventory Sync” and “Sync Runs” list.
- Key fields used:
tenant_id- status + timestamps
- any “selection_hash / selection payload” metadata used for display
Finding (Drift Finding)
- Role: drift KPIs and “Needs Attention”.
- Key fields used (existing migration):
tenant_idseverity(enum-like string)status(open/closed)- timestamps
scope_keyfor grouping
Derived values:
- Open findings by severity
- Staleness: last drift scan older than 7 days
KPI Queries (read-only)
Dashboard
- Drift KPIs: counts of open findings by severity + stale drift indicator.
- Operations health: counts of active runs + failed/partial recent.
- Recent lists: latest 10 findings + latest 10 operation runs.
Inventory hub
- Total items
- Coverage % (restorable/total)
- Last inventory sync (status + timestamp)
- Active operations: (all active runs) + (inventory.sync active runs)
Operations index
- Total runs (30d)
- Active runs (queued + running)
- Failed/partial (7d)
- Avg duration (7d, terminal runs only)
All queries must be tenant-scoped.