Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion spec/SDD-Keylime-Monitoring-Tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ keylime-webtool-frontend/src/
| | +-- TopBar.tsx Hamburger toggle, search, theme toggle, user menu
| +-- common/
| +-- DataTable.tsx Generic sortable, selectable table
| +-- KpiCard.tsx Metric card with variant styling
| +-- KpiCard.tsx Metric card with variant styling, optional drill-down link (FR-084)
| +-- StatusBadge.tsx Color-coded status label
| +-- AgentStateChart.tsx Recharts pie chart for agent states
+-- hooks/
Expand Down Expand Up @@ -1043,6 +1043,7 @@ Maximum 5 parallel concurrent log fetches to the Verifier API, enforced via Toki
| Sidebar alert indicator for service outages | Surfaces integration health at a glance without navigating away; shares cached TanStack Query data with Integrations page to avoid extra requests | FR-081 |
| Agent UUID hyperlinks in failure list | One-click drill-down from failure to agent detail eliminates manual navigation; uses React Router `<Link>` for SPA navigation without full reload | FR-082 |
| Inline copy-to-clipboard button in Raw Data source selector | Single compact button adjacent to filter group copies whichever JSON view is active; uses Clipboard API with 2s checkmark feedback for confirmation; avoids per-view copy buttons to reduce clutter | FR-083 |
| Clickable KPI cards with drill-down navigation | Each `KpiCard` accepts an optional `linkTo` prop (route string); when set, the card renders as a React Router `<Link>`, shows pointer cursor and hover highlight, and navigates to the target view (with optional query params for pre-applied filters) | FR-084 |

---

Expand Down Expand Up @@ -1144,6 +1145,7 @@ Maximum 5 parallel concurrent log fetches to the Verifier API, enforced via Toki
| FR-081 | 3.2.2 | `Sidebar.tsx`: `useHasServiceDown()` hook queries integration health, renders exclamation badge on Integrations nav item |
| FR-082 | 3.2.2 | Failure categorization list renders agent UUIDs as React Router `<Link>` to `/agents/{agent_id}` detail page |
| FR-083 | 3.4.3 | Raw Data tab: compact copy icon button to the right of source selector group; Clipboard API with 2s checkmark feedback |
| FR-084 | 3.2.2 | `KpiCard.tsx`: optional `linkTo` prop wraps card in React Router `<Link>`; Dashboard page maps each KPI to its target route (e.g., Failed Agents → `/agents?state=failed,invalid_quote,tenant_failed`) |

### 6.2 Non-Functional Requirements

Expand Down
50 changes: 50 additions & 0 deletions spec/SRS-Keylime-Monitoring-Tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ The System transforms Keylime from a CLI-driven security tool into a visual oper
| FR-081 | Sidebar alert indicator for integration service outages | MUST | Dashboard - Navigation Structure |
| FR-082 | Agent ID hyperlinks in failure categorization list | MUST | Attestation Analytics - Failure Categorization |
| FR-083 | Copy-to-clipboard button in Raw Data source selector toolbar | MUST | Agent Detail - Raw Data |
| FR-084 | Fleet Overview KPI card drill-down navigation | SHOULD | Dashboard - Key Performance Indicators |

### 2.2 Non-Functional Requirements

Expand Down Expand Up @@ -2616,6 +2617,55 @@ Feature: Raw Data Copy-to-Clipboard Button
Then the button MUST return to its default icon state
```

### FR-084: Fleet Overview KPI Card Drill-Down Navigation

**Description:** Each KPI card on the Fleet Overview Dashboard SHOULD act as a clickable navigation element that takes the user to the relevant detailed view. The cards MUST display a visual affordance (e.g., cursor change, hover highlight) indicating they are interactive. The navigation targets are: Total Active Agents → Agent List; Failed Agents → Agent List filtered by failed states (7, 9, 10); Attestation Success Rate → Attestation Analytics; Average Attestation Latency → Attestation Analytics; Certificate Expiry Warnings → Certificates; Active IMA Policies → Policies; Revocation Events (24h) → Alerts; Consecutive Failures → Agent List sorted by failure count; Registration Count → Agent List.

**Trace:** Dashboard - Key Performance Indicators; FR-001

```gherkin
Feature: Fleet Overview KPI Card Drill-Down Navigation

Scenario: Click Total Active Agents card
Given the user is viewing the Fleet Overview Dashboard
And the "Total Active Agents" KPI card displays "247"
When the user clicks the "Total Active Agents" card
Then the System MUST navigate to the Agent List page at /agents

Scenario: Click Failed Agents card navigates with filter
Given the user is viewing the Fleet Overview Dashboard
And the "Failed Agents" KPI card displays "3"
When the user clicks the "Failed Agents" card
Then the System MUST navigate to the Agent List page
And the agent state filter MUST be pre-applied for states FAILED, INVALID_QUOTE, and TENANT_FAILED

Scenario: Click Attestation Success Rate card
Given the user is viewing the Fleet Overview Dashboard
When the user clicks the "Attestation Success Rate" card
Then the System MUST navigate to the Attestation Analytics page at /attestations

Scenario: Click Certificate Expiry Warnings card
Given the user is viewing the Fleet Overview Dashboard
When the user clicks the "Certificate Expiry Warnings" card
Then the System MUST navigate to the Certificates page at /certificates

Scenario: Click Active IMA Policies card
Given the user is viewing the Fleet Overview Dashboard
When the user clicks the "Active IMA Policies" card
Then the System MUST navigate to the Policies page at /policies

Scenario: Click Revocation Events card
Given the user is viewing the Fleet Overview Dashboard
When the user clicks the "Revocation Events (24h)" card
Then the System MUST navigate to the Alerts page at /alerts

Scenario: KPI cards show interactive affordance
Given the user is viewing the Fleet Overview Dashboard
When the user hovers over any KPI card
Then the card MUST display a pointer cursor
And the card SHOULD display a hover highlight effect
```

---

## 4. Non-Functional Requirements Detail
Expand Down
Loading