feat: add vendor tenant metrics dashboard
All checks were successful
CI / build (push) Successful in 1m24s
CI / docker (push) Successful in 1m0s

Fleet overview page at /vendor/metrics showing per-tenant operational
metrics (agents, CPU, heap, HTTP requests, ingestion drops, uptime).
Queries each tenant's server via the new POST /api/v1/admin/server-metrics/query
REST API instead of direct ClickHouse access, supporting future per-tenant
CH instances.

Backend: TenantMetricsService fires 11 metric queries per tenant
concurrently over a 5-minute window, assembles into a summary snapshot.
ServerApiClient.queryServerMetrics() handles the M2M authenticated POST.

Frontend: VendorMetricsPage with KPI strip (fleet totals) and per-tenant
table with color-coded badges and heap usage bars. Auto-refreshes every 60s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-24 14:02:57 +02:00
parent 6c1241ed89
commit 1fbafbb16d
8 changed files with 547 additions and 1 deletions

View File

@@ -155,3 +155,48 @@ export interface AuditLogFilters {
page?: number;
size?: number;
}
// Tenant metrics (from server /api/v1/admin/metrics/summary)
export interface AgentMetrics {
live: number;
stale: number;
dead: number;
shutdown: number;
}
export interface IngestionMetrics {
bufferDepth: number;
dropsPerMinute: number;
}
export interface ServerMetrics {
cpuUsage: number;
heapUsedBytes: number;
heapMaxBytes: number;
uptimeSeconds: number;
threadCount: number;
}
export interface HttpMetrics {
requestsPerMinute: number;
errorRate: number;
}
export interface MetricsSummary {
collectedAt: string;
agents: AgentMetrics;
ingestion: IngestionMetrics;
server: ServerMetrics;
http: HttpMetrics;
authFailuresPerMinute: number;
}
export interface TenantMetricsEntry {
tenantId: string;
tenantName: string;
slug: string;
tier: string;
status: string;
serverState: string;
metrics: MetricsSummary | null;
}