diff options
| author | Nathan Perry <avaglir@gmail.com> | 2019-03-03 03:35:05 -0500 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2019-03-03 03:35:05 -0500 |
| commit | a597151e2086e12814fea12abe1a4c31d0ca1f7f (patch) | |
| tree | 72d49618f89e0ae7c0816efb62222201273cd3ae /src/db | |
| parent | e277e52cbec7bd178337019df7840691845d683d (diff) | |
show invocations in stats
Diffstat (limited to 'src/db')
| -rw-r--r-- | src/db/mod.rs | 41 | ||||
| -rw-r--r-- | src/db/schema.rs | 1 |
2 files changed, 41 insertions, 1 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 840bb07..b3861d2 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -3,6 +3,10 @@ use std::{ env, }; +use chrono::{ + DateTime, + Utc, +}; use diesel::{ NotFound, prelude::*, @@ -154,15 +158,20 @@ pub fn rand_audio_meme(conn: &PgConnection) -> Result<Meme> { .map_err(Error::from) } -#[derive(Debug, Copy, Clone, Default)] +#[derive(Debug, Copy, Clone)] pub struct Stats { pub memes_overall: usize, pub audio_memes: usize, pub image_memes: usize, + pub started_recording: DateTime<Utc>, + pub total_meme_invocations: usize, + pub audio_meme_invocations: usize, + pub random_meme_invocations: usize, } pub fn stats(conn: &PgConnection) -> Result<Stats> { use diesel::dsl::{count_star, count}; + use chrono::NaiveDateTime; let total_count: i64 = memes::table .select(count_star()) @@ -181,9 +190,39 @@ pub fn stats(conn: &PgConnection) -> Result<Stats> { .first(conn) .map_err(Error::from)?; + let started_recording: NaiveDateTime = invocation_records::table + .select(invocation_records::time) + .order(invocation_records::time) + .first(conn) + .map_err(Error::from)?; + + let started_recording = DateTime::from_utc(started_recording, Utc{}); + + let total_meme_invocations: i64 = invocation_records::table + .select(count_star()) + .first(conn) + .map_err(Error::from)?; + + let audio_meme_invocations: i64 = invocation_records::table + .inner_join(memes::table) + .select(count_star()) + .filter(memes::audio_id.is_not_null()) + .first(conn) + .map_err(Error::from)?; + + let random_meme_invocations: i64 = invocation_records::table + .select(count_star()) + .filter(invocation_records::random.eq(true)) + .first(conn) + .map_err(Error::from)?; + Ok(Stats { memes_overall: total_count as usize, image_memes: image_count as usize, audio_memes: audio_count as usize, + started_recording, + total_meme_invocations: total_meme_invocations as usize, + audio_meme_invocations: audio_meme_invocations as usize, + random_meme_invocations: random_meme_invocations as usize, }) } diff --git a/src/db/schema.rs b/src/db/schema.rs index 1ab5fa1..01ec1d0 100644 --- a/src/db/schema.rs +++ b/src/db/schema.rs @@ -73,6 +73,7 @@ joinable!(memes -> audio (audio_id)); joinable!(memes -> images (image_id)); joinable!(memes -> metadata (metadata_id)); joinable!(tombstones -> metadata (metadata_id)); +joinable!(invocation_records -> memes (meme_id)); allow_tables_to_appear_in_same_query!( audio, |
