From 5955a6668a4d81b2329a774c5649a4111d3b1f9f Mon Sep 17 00:00:00 2001 From: hampus-fluxer Date: Sun, 4 Jan 2026 00:04:26 +0100 Subject: [PATCH] fix(metrics): clickhouse query alias collision issue (#14) --- .../src/worker/WorkerMetricsCollector.ts | 2 +- fluxer_metrics/src/db/storage.rs | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/fluxer_api/src/worker/WorkerMetricsCollector.ts b/fluxer_api/src/worker/WorkerMetricsCollector.ts index 12ba43b1..017761d5 100644 --- a/fluxer_api/src/worker/WorkerMetricsCollector.ts +++ b/fluxer_api/src/worker/WorkerMetricsCollector.ts @@ -318,7 +318,7 @@ export class WorkerMetricsCollector { last_execution: Date | null; }>(` SELECT identifier, known_since, last_execution - FROM graphile_worker.known_crontabs + FROM graphile_worker._private_known_crontabs `); const now = new Date(); diff --git a/fluxer_metrics/src/db/storage.rs b/fluxer_metrics/src/db/storage.rs index 9946b58e..065abe19 100644 --- a/fluxer_metrics/src/db/storage.rs +++ b/fluxer_metrics/src/db/storage.rs @@ -108,28 +108,28 @@ pub struct CrashEventData { #[derive(Row, Serialize, Deserialize)] struct CounterQueryRow { - timestamp_bucket: i64, + timestamp_bucket_ms: i64, group_key: String, total: i64, } #[derive(Row, Serialize, Deserialize)] struct AggregatedCounterQueryRow { - period_start: i64, + period_start_ms: i64, group_key: String, total: i64, } #[derive(Row, Serialize, Deserialize)] struct GaugeQueryRow { - timestamp: i64, + timestamp_ms: i64, value: f64, dimensions: Vec<(String, String)>, } #[derive(Row, Serialize, Deserialize)] struct HistogramQueryRow { - timestamp_bucket: i64, + timestamp_bucket_ms: i64, avg_value: f64, } @@ -420,13 +420,13 @@ impl ClickHouseStorage { let query = format!( r#" SELECT - toUnixTimestamp64Milli(timestamp_bucket) AS timestamp_bucket, + toUnixTimestamp64Milli(timestamp_bucket) AS timestamp_bucket_ms, {group_expr} AS group_key, sum(value) AS total FROM {}.counters WHERE metric_name = ? - AND timestamp_bucket >= fromUnixTimestamp64Milli(?) - AND timestamp_bucket <= fromUnixTimestamp64Milli(?) + AND timestamp_bucket >= fromUnixTimestamp64Milli(?, 'UTC') + AND timestamp_bucket <= fromUnixTimestamp64Milli(?, 'UTC') GROUP BY timestamp_bucket, group_key ORDER BY timestamp_bucket "#, @@ -456,7 +456,7 @@ impl ClickHouseStorage { Some(map) }; DataPoint { - timestamp: r.timestamp_bucket, + timestamp: r.timestamp_bucket_ms, value: r.total as f64, dimensions: dims, } @@ -481,13 +481,13 @@ impl ClickHouseStorage { let query = format!( r#" SELECT - toUnixTimestamp64Milli(period_start) AS period_start, + toUnixTimestamp64Milli(period_start) AS period_start_ms, {group_expr} AS group_key, sum(total_value) AS total FROM {}.{table_name} WHERE metric_name = ? - AND period_start >= fromUnixTimestamp64Milli(?) - AND period_start <= fromUnixTimestamp64Milli(?) + AND period_start >= fromUnixTimestamp64Milli(?, 'UTC') + AND period_start <= fromUnixTimestamp64Milli(?, 'UTC') GROUP BY period_start, group_key ORDER BY period_start "#, @@ -517,7 +517,7 @@ impl ClickHouseStorage { Some(map) }; DataPoint { - timestamp: r.period_start, + timestamp: r.period_start_ms, value: r.total as f64, dimensions: dims, } @@ -536,13 +536,13 @@ impl ClickHouseStorage { let query = format!( r#" SELECT - toUnixTimestamp64Milli(timestamp) AS timestamp, + toUnixTimestamp64Milli(timestamp) AS timestamp_ms, value, dimensions FROM {}.gauges WHERE metric_name = ? - AND timestamp >= fromUnixTimestamp64Milli(?) - AND timestamp <= fromUnixTimestamp64Milli(?) + AND timestamp >= fromUnixTimestamp64Milli(?, 'UTC') + AND timestamp <= fromUnixTimestamp64Milli(?, 'UTC') ORDER BY timestamp "#, self.database @@ -566,7 +566,7 @@ impl ClickHouseStorage { Some(dimensions_to_json(&r.dimensions)) }; DataPoint { - timestamp: r.timestamp, + timestamp: r.timestamp_ms, value: r.value, dimensions: dims, } @@ -585,12 +585,12 @@ impl ClickHouseStorage { let query = format!( r#" SELECT - toUnixTimestamp64Milli(timestamp_bucket) AS timestamp_bucket, + toUnixTimestamp64Milli(timestamp_bucket) AS timestamp_bucket_ms, avg(value_ms) AS avg_value FROM {}.histogram_raw WHERE metric_name = ? - AND timestamp_bucket >= fromUnixTimestamp64Milli(?) - AND timestamp_bucket <= fromUnixTimestamp64Milli(?) + AND timestamp_bucket >= fromUnixTimestamp64Milli(?, 'UTC') + AND timestamp_bucket <= fromUnixTimestamp64Milli(?, 'UTC') GROUP BY timestamp_bucket ORDER BY timestamp_bucket "#, @@ -609,7 +609,7 @@ impl ClickHouseStorage { let data: Vec = rows .into_iter() .map(|r| DataPoint { - timestamp: r.timestamp_bucket, + timestamp: r.timestamp_bucket_ms, value: r.avg_value, dimensions: None, }) @@ -636,8 +636,8 @@ impl ClickHouseStorage { quantile(0.99)(value_ms) AS p99 FROM {}.histogram_raw WHERE metric_name = ? - AND timestamp_bucket >= fromUnixTimestamp64Milli(?) - AND timestamp_bucket <= fromUnixTimestamp64Milli(?) + AND timestamp_bucket >= fromUnixTimestamp64Milli(?, 'UTC') + AND timestamp_bucket <= fromUnixTimestamp64Milli(?, 'UTC') "#, self.database );