gatherer/http_server: move metric trends_page_time to TrendAnalyzer.run() for higher granularity
This commit is contained in:
parent
934aa1461a
commit
20c072f72e
|
@ -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<String>) -> (TrendsResults, Languages, HashMap<String, String>) {
|
||||
async fn query_trends(&self, language: Option<String>) -> (TrendsResults, Languages, HashMap<String, String>) {
|
||||
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<String>, 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<String>,
|
||||
) -> Response<UnsyncBoxBody<Bytes, axum::Error>> {
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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<String>,
|
||||
) -> Result<TrendsResults, RedisError> {
|
||||
let lang = if language.is_some() { "some" } else { "any" };
|
||||
|
||||
let until = current_hour();
|
||||
let mut analyzers: Vec<TrendAnalyzer> = 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::<HashSet<String>>();
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user