Skip to content

Commit ee8736b

Browse files
committed
feat(backend): add details to stats route
1 parent 7604043 commit ee8736b

4 files changed

+105
-23
lines changed

.sqlx/query-380478cb8ad1617f3fab5c585a823f347bbf81239b4f7cde7a3598503d8df8fb.json

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

.sqlx/query-4157dcc2163d9bc3f5ab68420b68c3915a36f2747ad8f5d308887c5f678dd38a.json

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

.sqlx/query-5b633799e662acec390827cae94d238fcf2595625d157c06e6dffe3a38b3f84f.json renamed to .sqlx/query-59ba62e340cd452e67c1dd163863b26fb1cd01c9c15d30cd700fb887596774de.json

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

crates/elder-scrobz-db/src/stats.rs

Lines changed: 63 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,91 @@ use utoipa::ToSchema;
44

55
#[derive(Debug, Serialize, ToSchema)]
66
pub struct Stats {
7-
raw_scrobble_count: i64,
8-
scrobble_count: i64,
9-
unparsable_scrobble_count: i64,
10-
release_count: i64,
11-
track_count: i64,
12-
missing_coverarts_count: i64,
7+
total_raw_scrobble_count: i64,
8+
total_scrobble_count: i64,
9+
total_track_count: i64,
10+
total_releases_count: i64,
11+
total_artists_count: i64,
12+
unparsable_scrobbles: MissingDataStats,
13+
release_without_coverart: MissingDataStats,
14+
artist_without_thumbnail: MissingDataStats,
15+
}
16+
17+
#[derive(Debug, Serialize, ToSchema)]
18+
pub struct MissingDataStats {
19+
count: usize,
20+
ids: Vec<String>,
1321
}
1422

1523
impl Stats {
1624
pub async fn get(pool: &PgPool) -> Result<Stats, sqlx::Error> {
17-
let raw_scrobble_count = query_scalar!(r#"SELECT count(*) FROM scrobbles_raw"#)
25+
let total_raw_scrobble_count = query_scalar!(r#"SELECT count(*) FROM scrobbles_raw"#)
26+
.fetch_one(pool)
27+
.await?
28+
.unwrap();
29+
30+
let total_scrobble_count = query_scalar!(r#"SELECT count(*) FROM scrobbles"#)
1831
.fetch_one(pool)
1932
.await?
2033
.unwrap();
2134

22-
let scrobble_count = query_scalar!(r#"SELECT count(*) FROM scrobbles"#)
35+
let total_releases_count = query_scalar!(r#"SELECT count(*) FROM releases"#)
2336
.fetch_one(pool)
2437
.await?
2538
.unwrap();
2639

27-
let release_count = query_scalar!(r#"SELECT count(*) FROM releases"#)
40+
let total_artists_count = query_scalar!(r#"SELECT count(*) FROM artists"#)
2841
.fetch_one(pool)
2942
.await?
3043
.unwrap();
3144

32-
let missing_coverarts_count =
33-
query_scalar!(r#"SELECT count(*) FROM releases WHERE cover_art_url IS NULL"#)
34-
.fetch_one(pool)
35-
.await?
36-
.unwrap();
45+
let unparsable_scrobbles = query_scalar!(
46+
r#"SELECT r.id FROM scrobbles_raw r
47+
LEFT JOIN scrobbles s ON s.source_id = r.id
48+
WHERE s.source_id IS NULL;"#
49+
)
50+
.fetch_all(pool)
51+
.await?;
52+
53+
let unparsable_scrobbles = MissingDataStats {
54+
count: unparsable_scrobbles.len(),
55+
ids: unparsable_scrobbles,
56+
};
57+
58+
let missing_coverarts =
59+
query_scalar!(r#"SELECT mbid FROM releases WHERE cover_art_url IS NULL"#)
60+
.fetch_all(pool)
61+
.await?;
62+
63+
let release_without_coverart = MissingDataStats {
64+
count: missing_coverarts.len(),
65+
ids: missing_coverarts,
66+
};
67+
68+
let missing_thumbnail =
69+
query_scalar!(r#"SELECT mbid FROM artists WHERE thumbnail_url IS NULL"#)
70+
.fetch_all(pool)
71+
.await?;
72+
73+
let artist_without_thumbnail = MissingDataStats {
74+
count: missing_thumbnail.len(),
75+
ids: missing_thumbnail,
76+
};
3777

38-
let track_count = query_scalar!(r#"SELECT count(*) FROM tracks"#)
78+
let total_track_count = query_scalar!(r#"SELECT count(*) FROM tracks"#)
3979
.fetch_one(pool)
4080
.await?
4181
.unwrap();
4282

4383
Ok(Stats {
44-
raw_scrobble_count,
45-
scrobble_count,
46-
unparsable_scrobble_count: raw_scrobble_count - scrobble_count,
47-
release_count,
48-
track_count,
49-
missing_coverarts_count,
84+
total_raw_scrobble_count,
85+
total_scrobble_count,
86+
total_track_count,
87+
total_releases_count,
88+
total_artists_count,
89+
unparsable_scrobbles,
90+
release_without_coverart,
91+
artist_without_thumbnail,
5092
})
5193
}
5294
}

0 commit comments

Comments
 (0)