From 3f2b5415ed5419148ecbf4cb1bf1dcb93f7d7249 Mon Sep 17 00:00:00 2001 From: Trey t Date: Tue, 9 Dec 2025 10:56:47 -0600 Subject: [PATCH] Fix frontend/backend type mismatches in monitoring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TypeScript types now match Go backend JSON field names: - MemoryStats: used_bytes, total_bytes, usage_percent, heap_alloc, heap_sys, heap_inuse - DiskStats: used_bytes, total_bytes, free_bytes, usage_percent - RuntimeStats: num_gc, last_gc_pause_ns - HTTPStats: requests_total, requests_per_minute - EndpointStats: error_rate (ratio), p95_latency_ms - AsynqStats: removed total_* aggregates (calculated in frontend) Updated components to use correct field names and calculate aggregates where needed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../src/components/monitoring/http-stats.tsx | 26 ++++------- .../src/components/monitoring/queue-stats.tsx | 46 +++++++++++-------- .../src/components/monitoring/stats-cards.tsx | 16 +++---- admin/src/types/monitoring.ts | 46 ++++++++----------- 4 files changed, 66 insertions(+), 68 deletions(-) diff --git a/admin/src/components/monitoring/http-stats.tsx b/admin/src/components/monitoring/http-stats.tsx index c5cbd73..6831f79 100644 --- a/admin/src/components/monitoring/http-stats.tsx +++ b/admin/src/components/monitoring/http-stats.tsx @@ -41,9 +41,9 @@ export function HTTPStatsOverview({ stats }: HTTPStatsProps) { -
{(stats.total_requests ?? 0).toLocaleString()}
+
{(stats.requests_total ?? 0).toLocaleString()}

- {(stats.requests_per_second ?? 0).toFixed(2)} req/s + {(stats.requests_per_minute ?? 0).toFixed(2)} req/min

@@ -55,9 +55,6 @@ export function HTTPStatsOverview({ stats }: HTTPStatsProps) {
{formatLatency(stats.avg_latency_ms)}
-

- P95: {formatLatency(stats.p95_latency_ms)} -

@@ -67,10 +64,7 @@ export function HTTPStatsOverview({ stats }: HTTPStatsProps) { -
{formatPercent(stats.error_rate)}
-

- {(stats.errors_total ?? 0).toLocaleString()} total errors -

+
{formatPercent((stats.error_rate ?? 0) * 100)}
@@ -80,8 +74,8 @@ export function HTTPStatsOverview({ stats }: HTTPStatsProps) { -
{(stats.requests_per_second ?? 0).toFixed(2)}
-

requests per second

+
{(stats.requests_per_minute ?? 0).toFixed(2)}
+

requests per minute

@@ -121,22 +115,22 @@ export function HTTPEndpointStats({ stats }: HTTPStatsProps) { Endpoint Requests Avg Latency - Errors + P95 Latency Error Rate {sortedEndpoints.map(([endpoint, data]) => { - const errorRate = data.count > 0 ? (data.errors / data.count) * 100 : 0; + const errorRatePercent = (data.error_rate ?? 0) * 100; return ( {endpoint} {data.count.toLocaleString()} {formatLatency(data.avg_latency_ms)} - {data.errors} + {formatLatency(data.p95_latency_ms)} - 5 ? 'text-red-500' : ''}> - {formatPercent(errorRate)} + 5 ? 'text-red-500' : ''}> + {formatPercent(errorRatePercent)} diff --git a/admin/src/components/monitoring/queue-stats.tsx b/admin/src/components/monitoring/queue-stats.tsx index edb0cd8..b4481a0 100644 --- a/admin/src/components/monitoring/queue-stats.tsx +++ b/admin/src/components/monitoring/queue-stats.tsx @@ -18,7 +18,7 @@ interface QueueStatsProps { } export function QueueOverview({ stats }: QueueStatsProps) { - if (!stats) { + if (!stats || !stats.queues) { return ( @@ -33,6 +33,18 @@ export function QueueOverview({ stats }: QueueStatsProps) { ); } + // Calculate totals from individual queues + const totals = Object.values(stats.queues).reduce( + (acc, queue) => ({ + pending: acc.pending + (queue.pending ?? 0), + active: acc.active + (queue.active ?? 0), + scheduled: acc.scheduled + (queue.scheduled ?? 0), + retry: acc.retry + (queue.retry ?? 0), + failed: acc.failed + (queue.failed ?? 0), + }), + { pending: 0, active: 0, scheduled: 0, retry: 0, failed: 0 } + ); + return (
@@ -41,7 +53,7 @@ export function QueueOverview({ stats }: QueueStatsProps) { -
{stats.total_pending}
+
{totals.pending}

tasks waiting

@@ -52,7 +64,7 @@ export function QueueOverview({ stats }: QueueStatsProps) { -
{stats.total_active}
+
{totals.active}

currently running

@@ -63,7 +75,7 @@ export function QueueOverview({ stats }: QueueStatsProps) { -
{stats.total_scheduled}
+
{totals.scheduled}

future tasks

@@ -74,7 +86,7 @@ export function QueueOverview({ stats }: QueueStatsProps) { -
{stats.total_retry}
+
{totals.retry}

awaiting retry

@@ -85,7 +97,7 @@ export function QueueOverview({ stats }: QueueStatsProps) { -
{stats.total_failed}
+
{totals.failed}

permanently failed

@@ -143,7 +155,6 @@ export function QueueDetails({ stats }: QueueStatsProps) { Queue - Size Pending Active Scheduled @@ -157,26 +168,25 @@ export function QueueDetails({ stats }: QueueStatsProps) { {sortedQueues.map(([queueName, queue]) => ( {getPriorityBadge(queueName)} - {queue.size} - {queue.pending} + {queue.pending ?? 0} - 0 ? 'text-blue-500 font-medium' : ''}> - {queue.active} + 0 ? 'text-blue-500 font-medium' : ''}> + {queue.active ?? 0} - {queue.scheduled} + {queue.scheduled ?? 0} - 0 ? 'text-yellow-500' : ''}> - {queue.retry} + 0 ? 'text-yellow-500' : ''}> + {queue.retry ?? 0} - {queue.archived} + {queue.archived ?? 0} - {queue.completed} + {queue.completed ?? 0} - 0 ? 'text-red-500 font-medium' : ''}> - {queue.failed} + 0 ? 'text-red-500 font-medium' : ''}> + {queue.failed ?? 0} diff --git a/admin/src/components/monitoring/stats-cards.tsx b/admin/src/components/monitoring/stats-cards.tsx index 44b8a02..5264d81 100644 --- a/admin/src/components/monitoring/stats-cards.tsx +++ b/admin/src/components/monitoring/stats-cards.tsx @@ -35,9 +35,9 @@ function ProcessCard({ stats, title }: ProcessCardProps) {
- Memory + Go Heap
-

{formatBytes(stats.memory?.go_alloc)}

+

{formatBytes(stats.memory?.heap_alloc)}

@@ -122,9 +122,9 @@ export function SystemOverview({ apiStats, workerStats }: SystemOverviewProps) { -
{formatPercent(stats.memory?.system_percent)}
+
{formatPercent(stats.memory?.usage_percent)}

- {formatBytes(stats.memory?.system_used)} / {formatBytes(stats.memory?.system_total)} + {formatBytes(stats.memory?.used_bytes)} / {formatBytes(stats.memory?.total_bytes)}

@@ -135,9 +135,9 @@ export function SystemOverview({ apiStats, workerStats }: SystemOverviewProps) { -
{formatPercent(stats.disk?.percent)}
+
{formatPercent(stats.disk?.usage_percent)}

- {formatBytes(stats.disk?.used)} / {formatBytes(stats.disk?.total)} + {formatBytes(stats.disk?.used_bytes)} / {formatBytes(stats.disk?.total_bytes)}

@@ -148,9 +148,9 @@ export function SystemOverview({ apiStats, workerStats }: SystemOverviewProps) { -
{(apiStats?.runtime.gc_runs || 0) + (workerStats?.runtime.gc_runs || 0)}
+
{(apiStats?.runtime?.num_gc || 0) + (workerStats?.runtime?.num_gc || 0)}

- Total pause: {((apiStats?.runtime.gc_pause_total_ns || 0) + (workerStats?.runtime.gc_pause_total_ns || 0)) / 1000000}ms + Last pause: {safeToFixed(((apiStats?.runtime?.last_gc_pause_ns || 0) + (workerStats?.runtime?.last_gc_pause_ns || 0)) / 1000000)}ms

diff --git a/admin/src/types/monitoring.ts b/admin/src/types/monitoring.ts index 0d612f4..da63f8f 100644 --- a/admin/src/types/monitoring.ts +++ b/admin/src/types/monitoring.ts @@ -12,55 +12,54 @@ export interface LogEntry { export interface CPUStats { usage_percent: number; + num_cpu: number; load_avg_1: number; load_avg_5: number; load_avg_15: number; } export interface MemoryStats { - system_total: number; - system_used: number; - system_percent: number; - go_alloc: number; - go_total_alloc: number; - go_sys: number; - go_heap_alloc: number; - go_heap_sys: number; + // System memory + used_bytes: number; + total_bytes: number; + usage_percent: number; + // Go heap + heap_alloc: number; + heap_sys: number; + heap_inuse: number; } export interface DiskStats { - total: number; - used: number; - percent: number; + used_bytes: number; + total_bytes: number; + free_bytes: number; + usage_percent: number; } export interface RuntimeStats { goroutines: number; - gc_runs: number; - gc_pause_ns: number; - gc_pause_total_ns: number; + num_gc: number; + last_gc_pause_ns: number; uptime_seconds: number; } export interface EndpointStats { count: number; - total_latency_ms: number; avg_latency_ms: number; - errors: number; + p95_latency_ms: number; + error_rate: number; } export interface HTTPStats { - total_requests: number; - requests_per_second: number; + requests_total: number; + requests_per_minute: number; avg_latency_ms: number; - p95_latency_ms: number; - errors_total: number; error_rate: number; by_endpoint: Record; + by_status_code: Record; } export interface QueueStats { - size: number; pending: number; active: number; scheduled: number; @@ -72,11 +71,6 @@ export interface QueueStats { export interface AsynqStats { queues: Record; - total_pending: number; - total_active: number; - total_scheduled: number; - total_retry: number; - total_failed: number; } export interface SystemStats {