Browse Source

metric service query

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
0fbf7038f7
  1. 4
      server/Cargo.lock
  2. 2
      server/Cargo.toml
  3. 4
      server/src/api/metric.rs
  4. 10
      server/src/services/analytic_service/analytic_service.rs
  5. 21
      server/src/services/metric_service.rs

4
server/Cargo.lock generated

@ -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",

2
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"

4
server/src/api/metric.rs

@ -37,9 +37,7 @@ async fn get_query(
let to = p.get("to").unwrap().parse::<u64>()?;
let step = p.get("step").unwrap().parse::<u64>()?;
let prom = ms.get_prom();
drop(ms);
Ok(prom.query(from, to, step).await?)
Ok(ms.query(from, to, step).await?)
}
async fn query(

10
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<Vec<Segment>> {
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());

21
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<MetricResult> {
return self.prom.query(from, to, step).await;
}
}

Loading…
Cancel
Save