Skip to content

Commit 742541b

Browse files
committed
Qualify rollup fields and fix avgIf aliases
1 parent 6d5001b commit 742541b

1 file changed

Lines changed: 52 additions & 18 deletions

File tree

services/rend-api/src/telemetry.rs

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,12 +1395,12 @@ fn clickhouse_edge_overview_query(
13951395
format!(
13961396
"\
13971397
SELECT \
1398-
ifNull(sum(request_count), 0) AS request_count, \
1399-
ifNull(sum(bytes_served), 0) AS bytes_served, \
1400-
ifNull(sum(cache_hit_count), 0) AS cache_hit_count, \
1401-
ifNull(sum(error_count), 0) AS error_count, \
1402-
if(isFinite(avgIf(request_duration_p50_ms, request_count > 0)), avgIf(request_duration_p50_ms, request_count > 0), 0) AS request_duration_p50_ms, \
1403-
if(isFinite(avgIf(request_duration_p95_ms, request_count > 0)), avgIf(request_duration_p95_ms, request_count > 0), 0) AS request_duration_p95_ms \
1398+
ifNull(sum(edge_rollups.request_count), 0) AS request_count, \
1399+
ifNull(sum(edge_rollups.bytes_served), 0) AS bytes_served, \
1400+
ifNull(sum(edge_rollups.cache_hit_count), 0) AS cache_hit_count, \
1401+
ifNull(sum(edge_rollups.error_count), 0) AS error_count, \
1402+
if(isFinite(avgIf(edge_rollups.request_duration_p50_ms, edge_rollups.request_count > 0)), avgIf(edge_rollups.request_duration_p50_ms, edge_rollups.request_count > 0), 0) AS request_duration_p50_ms, \
1403+
if(isFinite(avgIf(edge_rollups.request_duration_p95_ms, edge_rollups.request_count > 0)), avgIf(edge_rollups.request_duration_p95_ms, edge_rollups.request_count > 0), 0) AS request_duration_p95_ms \
14041404
FROM ( \
14051405
SELECT \
14061406
bucket_start, \
@@ -1416,7 +1416,7 @@ fn clickhouse_edge_overview_query(
14161416
AND bucket_start >= fromUnixTimestamp64Milli({}) \
14171417
AND bucket_start < fromUnixTimestamp64Milli({}) \
14181418
GROUP BY bucket_start, asset_id \
1419-
) \
1419+
) AS edge_rollups \
14201420
FORMAT JSONEachRow",
14211421
window.started_at.timestamp_millis(),
14221422
window.ended_at.timestamp_millis(),
@@ -1430,16 +1430,16 @@ fn clickhouse_player_overview_query(
14301430
format!(
14311431
"\
14321432
SELECT \
1433-
ifNull(sum(sessions), 0) AS sessions, \
1434-
ifNull(sum(views), 0) AS views, \
1435-
ifNull(sum(startup_failures), 0) AS startup_failures, \
1436-
ifNull(sum(watch_time_ms), 0) AS watch_time_ms, \
1437-
ifNull(sum(stalled_sessions), 0) AS stalled_sessions, \
1438-
ifNull(sum(stall_count), 0) AS stall_count, \
1439-
ifNull(sum(stall_duration_ms), 0) AS stall_duration_ms, \
1440-
ifNull(sum(playback_failures), 0) AS playback_failures, \
1441-
if(isFinite(avgIf(first_frame_p50_ms, views > 0)), avgIf(first_frame_p50_ms, views > 0), 0) AS first_frame_p50_ms, \
1442-
if(isFinite(avgIf(first_frame_p95_ms, views > 0)), avgIf(first_frame_p95_ms, views > 0), 0) AS first_frame_p95_ms \
1433+
ifNull(sum(player_rollups.sessions), 0) AS sessions, \
1434+
ifNull(sum(player_rollups.views), 0) AS views, \
1435+
ifNull(sum(player_rollups.startup_failures), 0) AS startup_failures, \
1436+
ifNull(sum(player_rollups.watch_time_ms), 0) AS watch_time_ms, \
1437+
ifNull(sum(player_rollups.stalled_sessions), 0) AS stalled_sessions, \
1438+
ifNull(sum(player_rollups.stall_count), 0) AS stall_count, \
1439+
ifNull(sum(player_rollups.stall_duration_ms), 0) AS stall_duration_ms, \
1440+
ifNull(sum(player_rollups.playback_failures), 0) AS playback_failures, \
1441+
if(isFinite(avgIf(player_rollups.first_frame_p50_ms, player_rollups.views > 0)), avgIf(player_rollups.first_frame_p50_ms, player_rollups.views > 0), 0) AS first_frame_p50_ms, \
1442+
if(isFinite(avgIf(player_rollups.first_frame_p95_ms, player_rollups.views > 0)), avgIf(player_rollups.first_frame_p95_ms, player_rollups.views > 0), 0) AS first_frame_p95_ms \
14431443
FROM ( \
14441444
SELECT \
14451445
bucket_start, \
@@ -1459,7 +1459,7 @@ fn clickhouse_player_overview_query(
14591459
AND bucket_start >= fromUnixTimestamp64Milli({}) \
14601460
AND bucket_start < fromUnixTimestamp64Milli({}) \
14611461
GROUP BY bucket_start, asset_id \
1462-
) \
1462+
) AS player_rollups \
14631463
FORMAT JSONEachRow",
14641464
window.started_at.timestamp_millis(),
14651465
window.ended_at.timestamp_millis(),
@@ -1893,6 +1893,40 @@ mod tests {
18931893
assert!(query.contains("FORMAT JSONEachRow"));
18941894
}
18951895

1896+
#[test]
1897+
fn overview_queries_do_not_reuse_aggregate_aliases_in_avgif_conditions() {
1898+
let window = NormalizedPlaybackAnalyticsWindow {
1899+
started_at: DateTime::parse_from_rfc3339("2026-06-13T11:00:00.000Z")
1900+
.unwrap()
1901+
.with_timezone(&Utc),
1902+
ended_at: DateTime::parse_from_rfc3339("2026-06-13T12:00:00.000Z")
1903+
.unwrap()
1904+
.with_timezone(&Utc),
1905+
};
1906+
1907+
let edge_query =
1908+
clickhouse_edge_overview_query("00000000-0000-0000-0000-000000000001", window);
1909+
assert!(edge_query.contains("AS edge_rollups"));
1910+
assert!(edge_query.contains(
1911+
"avgIf(edge_rollups.request_duration_p50_ms, edge_rollups.request_count > 0)"
1912+
));
1913+
assert!(edge_query.contains(
1914+
"avgIf(edge_rollups.request_duration_p95_ms, edge_rollups.request_count > 0)"
1915+
));
1916+
1917+
let player_query =
1918+
clickhouse_player_overview_query("00000000-0000-0000-0000-000000000001", window);
1919+
assert!(player_query.contains("AS player_rollups"));
1920+
assert!(
1921+
player_query
1922+
.contains("avgIf(player_rollups.first_frame_p50_ms, player_rollups.views > 0)")
1923+
);
1924+
assert!(
1925+
player_query
1926+
.contains("avgIf(player_rollups.first_frame_p95_ms, player_rollups.views > 0)")
1927+
);
1928+
}
1929+
18961930
#[test]
18971931
fn clickhouse_rows_use_artifact_billing_metadata_for_delivery() {
18981932
let ingested_at = DateTime::parse_from_rfc3339("2026-06-13T12:00:01.000Z")

0 commit comments

Comments
 (0)