From a597151e2086e12814fea12abe1a4c31d0ca1f7f Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Sun, 3 Mar 2019 03:35:05 -0500 Subject: show invocations in stats --- src/db/mod.rs | 41 ++++++++++++++++++++++++++++++++++++++++- src/db/schema.rs | 1 + 2 files changed, 41 insertions(+), 1 deletion(-) (limited to 'src/db') 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 { .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, + pub total_meme_invocations: usize, + pub audio_meme_invocations: usize, + pub random_meme_invocations: usize, } pub fn stats(conn: &PgConnection) -> Result { 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 { .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, -- cgit v1.3.1