diff --git a/gatherer/src/http_server.rs b/gatherer/src/http_server.rs index 9bc2b5d..89a19a5 100644 --- a/gatherer/src/http_server.rs +++ b/gatherer/src/http_server.rs @@ -1,7 +1,7 @@ use std::{ collections::{HashMap, HashSet}, ops::Deref, - net::SocketAddr, time::Instant, + net::SocketAddr, }; use askama::Template; use axum::{ @@ -39,7 +39,7 @@ pub struct ServerState { } impl ServerState { - async fn gather(&self, language: Option) -> (TrendsResults, Languages, HashMap) { + async fn query_trends(&self, language: Option) -> (TrendsResults, Languages, HashMap) { let mut store = self.store.clone(); let mut store_ = self.store.clone(); @@ -116,7 +116,7 @@ struct TrendsPage { impl TrendsPage { async fn generate(language: Option, state: ServerState) -> Self { - let (results, languages, tag_images) = state.gather(language.clone()).await; + let (results, languages, tag_images) = state.query_trends(language.clone()).await; // redis queries done, data is ready for rendering, means the // service is very much alive: @@ -139,15 +139,10 @@ async fn trends_page( state: ServerState, language: Option, ) -> Response> { - let t1 = Instant::now(); let lang = if language.is_some() { "some" } else { "any" }; let page = TrendsPage::generate(language, state) .await; - let t2 = Instant::now(); - metrics::histogram!("trends_page_time", t2 - t1, "step" => "query", "lang" => lang); let res = page.template().into_response(); - let t3 = Instant::now(); - metrics::histogram!("trends_page_time", t3 - t2, "step" => "render", "lang" => lang); metrics::increment_counter!("trends_page_requests", "lang" => lang); res } diff --git a/gatherer/src/trends.rs b/gatherer/src/trends.rs index 3f390d5..08a83bb 100644 --- a/gatherer/src/trends.rs +++ b/gatherer/src/trends.rs @@ -1,6 +1,7 @@ use std::{cmp::Ordering, collections::HashSet}; use std::collections::BTreeMap; use std::sync::Arc; +use std::time::Instant; use redis::{ RedisError, }; @@ -49,6 +50,8 @@ impl TrendAnalyzer { periods: &[u64], language: Option, ) -> Result { + let lang = if language.is_some() { "some" } else { "any" }; + let until = current_hour(); let mut analyzers: Vec = periods.iter() .cloned() @@ -60,11 +63,16 @@ impl TrendAnalyzer { score_threshold: None, }).collect(); + let t1 = Instant::now(); let tags = store.get_trend_pools(&language, periods).await? .into_iter() .flat_map(|(_period, tags)| tags.into_iter()) .collect::>(); + let t2 = Instant::now(); let trend_tags = store.get_trend_tags(&language, tags.into_iter()).await?; + let t3 = Instant::now(); + metrics::histogram!("trends_page_time", t2 - t1, "step" => "get_trend_pools", "lang" => lang); + metrics::histogram!("trends_page_time", t3 - t2, "step" => "get_trend_tags", "lang" => lang); for trend_tag in trend_tags.into_iter() { let trend_tag = Arc::new(trend_tag); let name = Arc::new(trend_tag.name.clone()); @@ -82,6 +90,8 @@ impl TrendAnalyzer { (analyzer.until, analyzer.period, result) }) .collect(); + let t4 = Instant::now(); + metrics::histogram!("trends_page_time", t4 - t3, "step" => "analyze", "lang" => lang); Ok(results) }