From 0fbf7038f7c2400c647d0a532af5e113e56f8698 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Wed, 3 Nov 2021 18:05:05 +0300 Subject: [PATCH] metric service query --- server/Cargo.lock | 4 ++-- server/Cargo.toml | 2 +- server/src/api/metric.rs | 4 +--- .../analytic_service/analytic_service.rs | 10 ++++----- server/src/services/metric_service.rs | 21 ++++++++++++------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/server/Cargo.lock b/server/Cargo.lock index 4f1dc60..62c8c68 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1258,9 +1258,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "subbeat" -version = "0.0.6" +version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d735937243354d601d8c45f3630db14aeb71a69750fe1c10eb826ac9d9492510" +checksum = "b4f17db62e5423f5cf82139d2e45ec13ea10a3cab03e3bc50f6b5c3961a4e34d" dependencies = [ "anyhow", "async-trait", diff --git a/server/Cargo.toml b/server/Cargo.toml index e436e4e..6e8dd69 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -13,7 +13,7 @@ parking_lot = "0.11.2" serde = { version = "1.0", features = ["derive"] } fastrand = "1.5.0" # subbeat = { path = "../../../subbeat/subbeat/" } -subbeat = "0.0.6" +subbeat = "0.0.7" config = "0.11.0" openssl = { version = "=0.10.33", features = ["vendored"] } rusqlite = "0.26.1" diff --git a/server/src/api/metric.rs b/server/src/api/metric.rs index e21eb1f..85a41c3 100644 --- a/server/src/api/metric.rs +++ b/server/src/api/metric.rs @@ -37,9 +37,7 @@ async fn get_query( let to = p.get("to").unwrap().parse::()?; let step = p.get("step").unwrap().parse::()?; - let prom = ms.get_prom(); - drop(ms); - Ok(prom.query(from, to, step).await?) + Ok(ms.query(from, to, step).await?) } async fn query( diff --git a/server/src/services/analytic_service/analytic_service.rs b/server/src/services/analytic_service/analytic_service.rs index 6da49de..59b01ba 100644 --- a/server/src/services/analytic_service/analytic_service.rs +++ b/server/src/services/analytic_service/analytic_service.rs @@ -175,7 +175,7 @@ impl AnalyticService { Err(_e) => println!("Fail to send notification about learning start"), } - let prom = ms.get_prom(); + // TODO: logic for returning error @@ -198,7 +198,7 @@ impl AnalyticService { let fs = segments .iter() - .map(|s| prom.query(s.from, s.to, DETECTION_STEP)); + .map(|s| ms.query(s.from, s.to, DETECTION_STEP)); let rs = future::join_all(fs).await; // TODO: run this on label adding @@ -248,10 +248,9 @@ impl AnalyticService { from: u64, to: u64, ) { - let prom = ms.get_prom(); let pt = pattern_detector::PatternDetector::new(lr); - let mr = prom.query(from, to, DETECTION_STEP).await.unwrap(); + let mr = ms.query(from, to, DETECTION_STEP).await.unwrap(); if mr.data.keys().len() == 0 { match tx.send(Ok(Vec::new())) { @@ -295,8 +294,7 @@ impl AnalyticService { step: u64, threashold: f64, ) -> anyhow::Result> { - let prom = self.metric_service.get_prom(); - let mr = prom.query(from, to, step).await?; + let mr = self.metric_service.query(from, to, step).await?; if mr.data.keys().len() == 0 { return Ok(Vec::new()); diff --git a/server/src/services/metric_service.rs b/server/src/services/metric_service.rs index edd9ad0..d124d8d 100644 --- a/server/src/services/metric_service.rs +++ b/server/src/services/metric_service.rs @@ -1,21 +1,26 @@ -use subbeat::datasources::prometheus::Prometheus; +use subbeat::{datasources::prometheus::Prometheus, metric::{Metric, MetricResult}}; +// TODO: use resolve function as in subbeat itself #[derive(Clone)] pub struct MetricService { - url: String, - query: String, + // url: String, + // query: String, + + prom: Prometheus } impl MetricService { pub fn new(url: &str, query: &str) -> MetricService { MetricService { - url: url.to_string(), - query: query.to_string(), + // url: url.to_string(), + // query: query.to_string(), + prom: Prometheus::new(&url.to_string(), &query.to_string()) } } - // TODO: make prom as field, but Prometheus should be clonable first - pub fn get_prom(&self) -> Prometheus { - Prometheus::new(&self.url.to_string(), &self.query.to_string()) + pub async fn query(&self, from: u64, to: u64, step: u64) -> anyhow::Result { + return self.prom.query(from, to, step).await; } + } +