From ffbd93314165d7dcf06256827a3f095b76172d69 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Sun, 31 Oct 2021 00:26:03 +0300 Subject: [PATCH] rm arc --- server/src/api.rs | 17 ++++++++++------- server/src/api/metric.rs | 11 +++++------ server/src/services/analytic_service.rs | 13 ++++++------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/server/src/api.rs b/server/src/api.rs index 1acc0ce..7832764 100644 --- a/server/src/api.rs +++ b/server/src/api.rs @@ -30,22 +30,25 @@ pub struct Message { pub struct API<'a> { config: &'a Config, user_service: Arc>, - metric_service: Arc>, + metric_service: metric_service::MetricService, data_service: segments_service::SegmentsService, analytic_service: AnalyticService, } impl API<'_> { pub fn new(config: &Config) -> anyhow::Result> { + let ss = segments_service::SegmentsService::new()?; + let ms = metric_service::MetricService::new( + &config.prom_url, + &config.query, + ); + Ok(API { config: config, user_service: Arc::new(RwLock::new(user_service::UserService::new())), - metric_service: Arc::new(RwLock::new(metric_service::MetricService::new( - &config.prom_url, - &config.query, - ))), - data_service: segments_service::SegmentsService::new()?, - analytic_service: AnalyticService::new(config), + metric_service: ms.clone(), + data_service: ss.clone(), + analytic_service: AnalyticService::new(ms, ss), }) } diff --git a/server/src/api/metric.rs b/server/src/api/metric.rs index c729439..6ea43da 100644 --- a/server/src/api/metric.rs +++ b/server/src/api/metric.rs @@ -15,9 +15,8 @@ use anyhow; use crate::api::{self, API}; -use parking_lot::RwLock; use std::collections::HashMap; -use std::sync::Arc; + use super::BadQuery; @@ -28,7 +27,7 @@ struct QueryResponse { async fn get_query( p: HashMap, - ms: Arc>, + ms: metric_service::MetricService, ) -> anyhow::Result { if !p.contains_key("from") { return Err(anyhow::anyhow!("Missing attribute from")); @@ -43,14 +42,14 @@ async fn get_query( let to = p.get("to").unwrap().parse::()?; let step = p.get("step").unwrap().parse::()?; - let prom = ms.read().get_prom(); + let prom = ms.get_prom(); drop(ms); Ok(prom.query(from, to, step).await?) } async fn query( p: HashMap, - ms: Arc>, + ms: metric_service::MetricService, ) -> Result { match get_query(p, ms).await { Ok(res) => Ok(API::json(&res)), @@ -60,7 +59,7 @@ async fn query( } pub fn get_route( - metric_service: Arc>, + metric_service: metric_service::MetricService, ) -> impl Filter + Clone { return warp::path!("metric") .and(get()) diff --git a/server/src/services/analytic_service.rs b/server/src/services/analytic_service.rs index f435344..a5f2512 100644 --- a/server/src/services/analytic_service.rs +++ b/server/src/services/analytic_service.rs @@ -1,9 +1,6 @@ -use crate::{config::Config, utils::get_random_str}; +use crate::{utils::get_random_str}; -use super::{ - metric_service::MetricService, - segments_service::{Segment, SegmentType, ID_LENGTH}, -}; +use super::{metric_service::MetricService, segments_service::{self, ID_LENGTH, Segment, SegmentType, SegmentsService}}; use subbeat::metric::Metric; @@ -12,12 +9,14 @@ use anyhow; #[derive(Clone)] pub struct AnalyticService { metric_service: MetricService, + segments_service: SegmentsService } impl AnalyticService { - pub fn new(config: &Config) -> AnalyticService { + pub fn new(metric_service: MetricService, segments_service: segments_service::SegmentsService) -> AnalyticService { AnalyticService { - metric_service: MetricService::new(&config.prom_url, &config.query), + metric_service, + segments_service } }