Files
2026-07-13 13:39:12 +08:00

147 lines
6.0 KiB
Markdown

---
title: "Monitoring & Costs — Navigation Structure"
version: 3.8.40
lastUpdated: 2026-06-28
---
# Monitoring & Costs — Navigation Structure
> Implemented in Group B (plan 16). See `src/shared/constants/sidebarVisibility.ts`.
---
## High-Level Navigation
The dashboard sidebar (after Group B) has these top-level sections in order:
```
Home
Providers
Combos
API Keys
Settings
Analytics
Costs ← NEW (Group B, plan 16)
Monitoring ← REORGANIZED (Group B, plan 16)
...
```
---
## Costs section (new, level 1)
Path prefix: `/dashboard/costs/`
| Item | URL | Description |
| ------------- | ------------------------------------ | ------------------------------------------------ |
| Overview | `/dashboard/costs` | Aggregated cost dashboard (moved from Analytics) |
| Pricing | `/dashboard/costs/pricing` | Per-model pricing table |
| Budget | `/dashboard/costs/budget` | Budget thresholds + alerts |
| Quota Sharing | `/dashboard/costs/quota-share` | Quota Share pools + usage |
| Plan Config | `/dashboard/costs/quota-share/plans` | Per-provider plan overrides |
**Rationale**: Pricing, Budget, and Quota Sharing were previously under
`Monitoring > Costs Parameters`. Moving them to a dedicated top-level section
makes them discoverable without navigating through observability tooling.
---
## Monitoring section (reorganized)
The Monitoring section now has **Activity at the top** followed by **3 subgroups**:
```
Monitoring
├── Activity ← Timeline feed (top-level item)
├── Logs group
│ ├── Logs (all)
│ ├── Proxy Logs
│ └── Console Logs
├── Audit group
│ ├── Audit Log
│ ├── MCP Audit
│ └── A2A Audit
└── System group
├── Health
└── Runtime
```
### What changed from the old structure
| Before | After |
| -------------------------------------------------------------------------------- | ------------------------------------------------- |
| Activity = tab inside Logs that rendered the Audit Log | Activity = dedicated feed (`/dashboard/activity`) |
| Costs Parameters group in Monitoring | Moved to Costs section |
| Flat list: Logs, Activity (logs), Audit, Health, Runtime, Pricing, Budget, Quota | Structured 3-group + dedicated Costs section |
---
## Activity vs Audit Log
These two are now distinct:
| Dimension | Activity (`/dashboard/activity`) | Audit Log (`/dashboard/audit`) |
| ---------------- | ------------------------------------------------------ | ----------------------------------------- |
| **Purpose** | User-facing event feed ("what happened recently") | Compliance / security log |
| **Data source** | `GET /api/compliance/audit-log?level=high` | `GET /api/compliance/audit-log?level=all` |
| **Format** | Timeline, grouped by day, human-readable verbs + icons | Dense paginaged table, 50/page |
| **Filters** | Event type category | Action, severity, actor, date range |
| **Export** | Not available | JSON export |
| **Actor filter** | Not applicable | Filterable by actor |
| **Events shown** | High-level actions only (allowlist) | All audit events |
### High-Level Actions allowlist
Defined in `src/lib/audit/highLevelActions.ts`. Controls which events appear in
the Activity feed. The allowlist includes:
- Provider add/remove/test events
- Combo create/update/delete
- API key lifecycle (create, revoke, rotate)
- Budget threshold reached
- Auth login/logout
- Cloud agent session creation
- MCP tool registration
- Webhook create/delete
- Quota pool/plan changes (`quota.*` actions, Group B)
- Platform events (update, deploy)
- Skill install/remove
Events not in this list appear only in the Audit Log.
### Adding a new high-level action
Edit `src/lib/audit/highLevelActions.ts` and add the action string to
`HIGH_LEVEL_ACTIONS`. This requires a PR (the list is code, not DB-configurable).
The corresponding icon can be added to `src/lib/audit/activityIcons.ts`.
---
## Redirect: `/dashboard/logs/activity`
The old path `/dashboard/logs/activity` is permanently redirected (HTTP 308) to
`/dashboard/activity` via `permanentRedirect()` in
`src/app/(dashboard)/dashboard/logs/activity/page.tsx`.
The legacy sidebar ID `logs-activity` is preserved in `HIDEABLE_SIDEBAR_ITEM_IDS`
(but removed from `SIDEBAR_DEFINITIONS`) to avoid breaking user presets that
reference the old ID.
---
## i18n
Namespaces added by Group B:
| Namespace key | Covers |
| ----------------------- | -------------------------------------------------------------- |
| `sidebar.costsSection` | Costs section label |
| `sidebar.activity` | Activity sidebar item |
| `sidebar.logsGroup` | Logs subgroup label |
| `sidebar.systemGroup` | System subgroup label |
| `sidebar.costsOverview` | Costs overview item |
| `activity.*` | All Activity page strings (title, verbs, filters, empty state) |
Source-of-truth locales: `pt-BR` and `en`. All other 39 locales fall back to
English via the `next-intl` fallback mechanism (configured in `src/i18n/config.ts`).