Skip to content

Commit 06d8cae

Browse files
feat: add orientation dimension
Signed-off-by: Henry <mail@henrygressmann.de>
1 parent c2ab4fc commit 06d8cae

22 files changed

Lines changed: 137 additions & 390 deletions

File tree

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

data/licenses-cargo.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

data/licenses-npm.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

scripts/build-tracker.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#!/usr/bin/env bash
22
cd "$(dirname "$0")" || exit
33
esbuild ../tracker/script.ts --minify --format=esm --target=chrome123,edge123,firefox124,safari17 --outfile=../tracker/script.min.js
4-
bunx tsc ../tracker/script.ts --target ESNext --module ESNext --declaration --emitDeclarationOnly --outFile ../tracker/script.d.ts
4+
bunx tsc ../tracker/script.ts --target ESNext --module ESNext --declaration --emitDeclarationOnly --outDir ../tracker

src/app/core/reports.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ pub enum Dimension {
6666
UtmCampaign,
6767
UtmContent,
6868
UtmTerm,
69-
ScreenSize,
69+
ScreenWidth,
70+
Orientation,
7071
}
7172

7273
#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, Copy, Hash, Eq, PartialEq, PartialOrd, Ord)]
@@ -192,7 +193,8 @@ fn filter_sql(filters: &[DimensionFilter]) -> Result<(String, ParamVec<'_>)> {
192193
Dimension::UtmCampaign => format!("utm_campaign {filter_value}"),
193194
Dimension::UtmContent => format!("utm_content {filter_value}"),
194195
Dimension::UtmTerm => format!("utm_term {filter_value}"),
195-
Dimension::ScreenSize => format!("screen_size {filter_value}"),
196+
Dimension::ScreenWidth => format!("screen_width {filter_value}"),
197+
Dimension::Orientation => format!("orientation {filter_value}"),
196198
})
197199
})
198200
.collect::<Result<Vec<String>>>()?;
@@ -483,7 +485,8 @@ pub fn dimension_report(
483485
Dimension::UtmCampaign => ("utm_campaign", "utm_campaign", None),
484486
Dimension::UtmContent => ("utm_content", "utm_content", None),
485487
Dimension::UtmTerm => ("utm_term", "utm_term", None),
486-
Dimension::ScreenSize => ("screen_size", "screen_size", None),
488+
Dimension::ScreenWidth => ("screen_width", "screen_width", None),
489+
Dimension::Orientation => ("orientation", "orientation", None),
487490
};
488491
let filters_sql = match (filters_sql.is_empty(), dimension_scope_sql) {
489492
(true, Some(scope)) => format!("and ({scope})"),

src/app/models.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ pub struct Event {
2323
pub utm_campaign: Option<String>,
2424
pub utm_content: Option<String>,
2525
pub utm_term: Option<String>,
26-
pub screen_size: Option<String>,
26+
pub screen_width: Option<String>,
27+
pub orientation: Option<String>,
2728
}
2829

2930
#[derive(Debug, Clone)]
@@ -101,7 +102,8 @@ macro_rules! event_params {
101102
$event.utm_term,
102103
None::<std::time::Duration>,
103104
None::<std::time::Duration>,
104-
$event.screen_size,
105+
$event.screen_width,
106+
$event.orientation,
105107
]
106108
};
107109
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
alter table events add column screen_size text;
1+
alter table events add column screen_width text;
2+
alter table events add column orientation text;

src/utils/seed.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const UTM_CONTENTS: &[&str] = &["", "banner", "sidebar", "footer", "popup"];
2222
const UTM_MEDIUMS: &[&str] = &["", "cpc", "organic", "referral", "email"];
2323
const UTM_SOURCES: &[&str] = &["", "google", "bing", "facebook", "twitter"];
2424
const UTM_TERMS: &[&str] = &["", "liwan", "analytics", "tracking", "web"];
25+
const SCREEN_WIDTH_BUCKETS: &[&str] = &["xs", "sm", "md", "lg", "xl", "2xl"];
26+
const ORIENTATIONS: &[&str] = &["portrait", "landscape"];
2527

2628
pub fn random_events(
2729
time_range: (DateTime<Utc>, DateTime<Utc>),
@@ -106,6 +108,8 @@ pub fn random_events(
106108
let browser = random_el(BROWSERS, 0.0);
107109
let mobile = rng.random_bool(0.48);
108110
let (city, country) = random_el(CITIES, 0.8);
111+
let screen_width = random_el(SCREEN_WIDTH_BUCKETS, 0.0);
112+
let orientation = random_el(ORIENTATIONS, 0.0);
109113

110114
Some(Event {
111115
browser: if browser.is_empty() { None } else { Some(browser.to_string()) },
@@ -125,7 +129,8 @@ pub fn random_events(
125129
utm_medium: Some(random_el(UTM_MEDIUMS, 0.6).to_string()),
126130
utm_source: Some(random_el(UTM_SOURCES, 0.6).to_string()),
127131
utm_term: Some(random_el(UTM_TERMS, 0.6).to_string()),
128-
screen_size: None,
132+
screen_width: Some(screen_width.to_string()),
133+
orientation: Some(orientation.to_string()),
129134
})
130135
})
131136
}

src/web/routes/dashboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ async fn project_detailed_handler(
227227
let city = city.filter(|city| !city.is_empty());
228228
data.push(DimensionTableRow { dimension_value: key, value, display_name: city, icon: country });
229229
}
230-
Dimension::ScreenSize => {
230+
Dimension::ScreenWidth | Dimension::Orientation => {
231231
let display_name =
232232
key.chars().next().map(|c| c.to_uppercase().collect::<String>() + &key[c.len_utf8()..]);
233233
data.push(DimensionTableRow { dimension_value: key, value, display_name, icon: None });

src/web/routes/event.rs

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ struct EventRequest {
3131
url: String,
3232
referrer: Option<String>,
3333
utm: Option<Utm>,
34-
screen_width: Option<u32>,
34+
screen_width: Option<String>,
35+
orientation: Option<String>,
3536
}
3637

3738
#[derive(serde::Deserialize, JsonSchema)]
@@ -43,15 +44,6 @@ struct Utm {
4344
term: Option<String>,
4445
}
4546

46-
fn screen_size_bucket(width: u32) -> &'static str {
47-
match width {
48-
0..=767 => "mobile",
49-
768..=1023 => "tablet",
50-
1024..=2559 => "desktop",
51-
_ => "ultrawide",
52-
}
53-
}
54-
5547
static EXISTING_ENTITIES: LazyLock<quick_cache::sync::Cache<String, ()>> =
5648
LazyLock::new(|| quick_cache::sync::Cache::new(512));
5749

@@ -141,45 +133,10 @@ fn process_event(
141133
utm_medium: event.utm.as_ref().and_then(|u| u.medium.clone()),
142134
utm_source: event.utm.as_ref().and_then(|u| u.source.clone()),
143135
utm_term: event.utm.as_ref().and_then(|u| u.term.clone()),
144-
screen_size: event.screen_width.map(|w| screen_size_bucket(w).to_string()),
136+
screen_width: event.screen_width,
137+
orientation: event.orientation,
145138
};
146139

147140
events.send(event)?;
148141
Ok(())
149142
}
150-
151-
#[cfg(test)]
152-
mod tests {
153-
use super::screen_size_bucket;
154-
155-
#[test]
156-
fn test_screen_size_bucket_mobile() {
157-
assert_eq!(screen_size_bucket(0), "mobile");
158-
assert_eq!(screen_size_bucket(375), "mobile");
159-
assert_eq!(screen_size_bucket(430), "mobile");
160-
assert_eq!(screen_size_bucket(767), "mobile");
161-
}
162-
163-
#[test]
164-
fn test_screen_size_bucket_tablet() {
165-
assert_eq!(screen_size_bucket(768), "tablet");
166-
assert_eq!(screen_size_bucket(810), "tablet");
167-
assert_eq!(screen_size_bucket(1023), "tablet");
168-
}
169-
170-
#[test]
171-
fn test_screen_size_bucket_desktop() {
172-
assert_eq!(screen_size_bucket(1024), "desktop");
173-
assert_eq!(screen_size_bucket(1280), "desktop");
174-
assert_eq!(screen_size_bucket(1920), "desktop");
175-
assert_eq!(screen_size_bucket(2559), "desktop");
176-
}
177-
178-
#[test]
179-
fn test_screen_size_bucket_ultrawide() {
180-
assert_eq!(screen_size_bucket(2560), "ultrawide");
181-
assert_eq!(screen_size_bucket(3440), "ultrawide");
182-
assert_eq!(screen_size_bucket(3840), "ultrawide");
183-
assert_eq!(screen_size_bucket(7680), "ultrawide");
184-
}
185-
}

0 commit comments

Comments
 (0)