From 4b5ee94724e0b183e5c35347a589e1ea24227fb9 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Sat, 23 Aug 2025 20:31:56 +0000 Subject: [PATCH] fix(metrics): casting is the name of the game --- src/db/webdav_metrics.rs | 14 +++++++------- src/routes/prometheus_metrics.rs | 20 ++++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/db/webdav_metrics.rs b/src/db/webdav_metrics.rs index 682b843..e9c1ebd 100644 --- a/src/db/webdav_metrics.rs +++ b/src/db/webdav_metrics.rs @@ -482,14 +482,14 @@ impl Database { COALESCE(COUNT(*)::INTEGER, 0) as total_sessions, COALESCE(COUNT(*) FILTER (WHERE s.status = 'completed')::INTEGER, 0) as successful_sessions, COALESCE(COUNT(*) FILTER (WHERE s.status = 'failed')::INTEGER, 0) as failed_sessions, - COALESCE(SUM(s.files_processed), 0)::BIGINT as total_files_processed, - COALESCE(SUM(s.total_bytes_processed), 0)::BIGINT as total_bytes_processed, - COALESCE(AVG(s.duration_ms / 1000.0), 0.0)::DOUBLE PRECISION as avg_session_duration_sec, - COALESCE(AVG(s.processing_rate_files_per_sec), 0.0)::DOUBLE PRECISION as avg_processing_rate, - COALESCE(SUM(s.total_http_requests), 0)::BIGINT as total_http_requests, + COALESCE(SUM(s.files_processed)::BIGINT, 0) as total_files_processed, + COALESCE(SUM(s.total_bytes_processed)::BIGINT, 0) as total_bytes_processed, + COALESCE(AVG(s.duration_ms / 1000.0)::DOUBLE PRECISION, 0.0) as avg_session_duration_sec, + COALESCE(AVG(s.processing_rate_files_per_sec)::DOUBLE PRECISION, 0.0) as avg_processing_rate, + COALESCE(SUM(s.total_http_requests)::BIGINT, 0) as total_http_requests, CASE - WHEN SUM(s.total_http_requests) > 0 - THEN (SUM(s.successful_requests)::DOUBLE PRECISION / SUM(s.total_http_requests) * 100.0) + WHEN SUM(s.total_http_requests)::BIGINT > 0 + THEN (SUM(s.successful_requests)::BIGINT::DOUBLE PRECISION / SUM(s.total_http_requests)::BIGINT * 100.0) ELSE 0.0 END as request_success_rate, COALESCE((SELECT AVG(duration_ms) FROM webdav_request_metrics r diff --git a/src/routes/prometheus_metrics.rs b/src/routes/prometheus_metrics.rs index 6de705d..94b9183 100644 --- a/src/routes/prometheus_metrics.rs +++ b/src/routes/prometheus_metrics.rs @@ -670,20 +670,20 @@ async fn collect_webdav_metrics(state: &Arc) -> Result 0 - THEN (SUM(successful_requests)::DECIMAL / SUM(total_http_requests) * 100) - ELSE 0 + WHEN SUM(total_http_requests)::BIGINT > 0 + THEN (SUM(successful_requests)::BIGINT::DECIMAL / SUM(total_http_requests)::BIGINT * 100)::DOUBLE PRECISION + ELSE 0::DOUBLE PRECISION END as request_success_rate, COALESCE( - (SELECT AVG(duration_ms) FROM webdav_request_metrics + (SELECT AVG(duration_ms)::DOUBLE PRECISION FROM webdav_request_metrics WHERE started_at > NOW() - INTERVAL '24 hours'), - 0 + 0::DOUBLE PRECISION ) as avg_request_duration_ms FROM webdav_sync_sessions WHERE started_at > NOW() - INTERVAL '24 hours'