From 101d145709e1bc47e30725249685c48ec186f573 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 25 Jul 2022 02:19:30 -0400 Subject: [PATCH] Query pending TTS job count (public use) --- .../src/helpers/boolean_converters.rs | 1 + .../lib/database_queries/src/helpers/mod.rs | 3 +- .../src/helpers/numeric_converters.rs | 29 +++++++++++++++++++ .../get_pending_tts_inference_job_count.rs | 24 +++++++++++++++ .../src/queries/tts/tts_inference_jobs/mod.rs | 1 + 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 crates/lib/database_queries/src/helpers/numeric_converters.rs create mode 100644 crates/lib/database_queries/src/queries/tts/tts_inference_jobs/get_pending_tts_inference_job_count.rs diff --git a/crates/lib/database_queries/src/helpers/boolean_converters.rs b/crates/lib/database_queries/src/helpers/boolean_converters.rs index c35678a450..45d122f3c7 100644 --- a/crates/lib/database_queries/src/helpers/boolean_converters.rs +++ b/crates/lib/database_queries/src/helpers/boolean_converters.rs @@ -1,3 +1,4 @@ +// TODO: Use macros to generate everything, or better, use a library (or stdlib) that does these. /// MySQL stores non-nullable booleans as i8. pub fn i8_to_bool(value: i8) -> bool { diff --git a/crates/lib/database_queries/src/helpers/mod.rs b/crates/lib/database_queries/src/helpers/mod.rs index 62d38a8df4..1810de830c 100644 --- a/crates/lib/database_queries/src/helpers/mod.rs +++ b/crates/lib/database_queries/src/helpers/mod.rs @@ -1 +1,2 @@ -pub mod boolean_converters; \ No newline at end of file +pub mod boolean_converters; +pub mod numeric_converters; \ No newline at end of file diff --git a/crates/lib/database_queries/src/helpers/numeric_converters.rs b/crates/lib/database_queries/src/helpers/numeric_converters.rs new file mode 100644 index 0000000000..3dd428573f --- /dev/null +++ b/crates/lib/database_queries/src/helpers/numeric_converters.rs @@ -0,0 +1,29 @@ +// TODO: Use macros to generate everything, or better, use a library (or stdlib) that does these. + +pub fn try_i64_to_u64_or_min(value: i64) -> u64 { + if value < 0 { + u64::MIN + } else { + value as u64 + } +} + +#[cfg(test)] +mod tests { + use crate::helpers::numeric_converters::try_i64_to_u64_or_min; + + #[test] + fn test_try_i64_to_u64_or_min() { + // Positive + assert_eq!(try_i64_to_u64_or_min(1i64), 1u64); + assert_eq!(try_i64_to_u64_or_min(1000i64), 1000u64); + assert_eq!(try_i64_to_u64_or_min(9999999i64), 9999999u64); + assert_eq!(try_i64_to_u64_or_min(i64::MAX), 9223372036854775807u64); + // Zero + assert_eq!(try_i64_to_u64_or_min(0i64), 0u64); + // Negative + assert_eq!(try_i64_to_u64_or_min(-1i64), 0u64); + assert_eq!(try_i64_to_u64_or_min(-1000i64), 0u64); + assert_eq!(try_i64_to_u64_or_min(i64::MIN), 0u64); + } +} diff --git a/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/get_pending_tts_inference_job_count.rs b/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/get_pending_tts_inference_job_count.rs new file mode 100644 index 0000000000..3b26429b28 --- /dev/null +++ b/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/get_pending_tts_inference_job_count.rs @@ -0,0 +1,24 @@ +use container_common::anyhow_result::AnyhowResult; +use crate::helpers::numeric_converters::try_i64_to_u64_or_min; +use sqlx::MySqlPool; + +pub async fn get_pending_tts_inference_job_count( + pool: &MySqlPool, +) -> AnyhowResult { + let result : CountResult = sqlx::query_as!( + CountResult, + r#" +SELECT count(*) as record_count +FROM tts_inference_jobs +WHERE status IN ("pending", "started", "attempt_failed") + "#, + ) + .fetch_one(pool) + .await?; + + Ok(try_i64_to_u64_or_min(result.record_count)) +} + +struct CountResult { + record_count: i64, +} \ No newline at end of file diff --git a/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/mod.rs b/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/mod.rs index b15fce6350..dd06526791 100644 --- a/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/mod.rs +++ b/crates/lib/database_queries/src/queries/tts/tts_inference_jobs/mod.rs @@ -1,4 +1,5 @@ pub mod _keys; +pub mod get_pending_tts_inference_job_count; pub mod insert_tts_inference_job; pub mod kill_tts_inference_jobs; pub mod list_available_tts_inference_jobs;