diff --git a/services/api/src/analytics.rs b/services/api/src/analytics.rs index 2131e9f..b88ee90 100644 --- a/services/api/src/analytics.rs +++ b/services/api/src/analytics.rs @@ -20,11 +20,21 @@ impl Analytics { ctx: &Context<'ctx>, #[graphql(default = 60)] bucket_size: u64, world_id: Option, + #[graphql(default = false)] hi_precision: bool, ) -> Vec { let pool = ctx.data::>().unwrap(); - let sql = format!("SELECT time_bucket('{} seconds', time) AS bucket, count(*), event_name, world_id FROM analytics WHERE time > now() - interval '1 day' {} GROUP BY bucket, world_id, event_name ORDER BY bucket ASC", - bucket_size, + let sql = format!("SELECT time_bucket('{} seconds', time) AS bucket, count(*), event_name, world_id FROM analytics WHERE time > now() - interval '{}' {} GROUP BY bucket, world_id, event_name ORDER BY bucket ASC", + if hi_precision { + 5 + } else { + bucket_size + }, + if hi_precision { + "1 hour" + } else { + "1 day" + }, if let Some(world_id) = world_id { format!("AND world_id = {}", world_id) } else { diff --git a/services/api/src/html/ingest.html b/services/api/src/html/ingest.html index 4a58545..ae5d958 100644 --- a/services/api/src/html/ingest.html +++ b/services/api/src/html/ingest.html @@ -148,6 +148,12 @@ +

+ [home] [1 day w/ 5m buckets] [1 hour w/ 5s buckets] +

@@ -293,7 +299,11 @@ query: ` { analytics { - events(bucketSize: ${60 * 5}) { + events(${ + location.search.includes("hi=1") + ? "hiPrecision: true" + : "bucketSize: 300" + }) { eventName count time