From 31b60c4e24cb19cc4af48dae6f128da6da0476b7 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:09:24 +0100 Subject: [PATCH] feat: add V7 migration for per-processor-id continuous aggregate --- .../migration/V7__processor_stats_by_id.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql b/cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql new file mode 100644 index 00000000..ed8a4af4 --- /dev/null +++ b/cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql @@ -0,0 +1,21 @@ +-- V7: Per-processor-id continuous aggregate for route detail page +CREATE MATERIALIZED VIEW stats_1m_processor_detail +WITH (timescaledb.continuous) AS +SELECT + time_bucket('1 minute', start_time) AS bucket, + group_name, + route_id, + processor_id, + processor_type, + COUNT(*) AS total_count, + COUNT(*) FILTER (WHERE status = 'FAILED') AS failed_count, + SUM(duration_ms) AS duration_sum, + MAX(duration_ms) AS duration_max, + approx_percentile(0.99, percentile_agg(duration_ms)) AS p99_duration +FROM processor_executions +GROUP BY bucket, group_name, route_id, processor_id, processor_type; + +SELECT add_continuous_aggregate_policy('stats_1m_processor_detail', + start_offset => INTERVAL '1 hour', + end_offset => INTERVAL '1 minute', + schedule_interval => INTERVAL '1 minute');