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');