gatherer/http_server: move metric trends_page_time to TrendAnalyzer.run() for higher granularity

This commit is contained in:
Astro 2022-12-30 03:22:35 +01:00
parent 934aa1461a
commit 20c072f72e
2 changed files with 13 additions and 8 deletions

View File

@ -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
}

View File

@ -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)
}