diff --git a/server/Cargo.lock b/server/Cargo.lock index 556121d..0256ab1 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1214,9 +1214,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "subbeat" -version = "0.0.5" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8575d807b45953cb0d42ec24574039393a5c41fc97c2750384d3370344632c3" +checksum = "d735937243354d601d8c45f3630db14aeb71a69750fe1c10eb826ac9d9492510" dependencies = [ "anyhow", "async-trait", diff --git a/server/Cargo.toml b/server/Cargo.toml index cccc94a..f27b15a 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.5" +subbeat = "0.0.6" config = "0.11.0" openssl = { version = "=0.10.33", features = ["vendored"] } rusqlite = "0.26.1" diff --git a/server/src/analytic_unit.rs b/server/src/analytic_unit.rs index 1e8ba80..b2d6eb8 100644 --- a/server/src/analytic_unit.rs +++ b/server/src/analytic_unit.rs @@ -1,50 +1,3 @@ -use anyhow; -use hastic::services::metric_service::MetricService; -use hastic::services::segments_service::Segment; -use hastic::{config::Config, services::segments_service::SegmentType}; - -use subbeat::metric::{Metric, MetricResult}; - struct AnalyticUnit { - metric_service: MetricService, -} - -impl AnalyticUnit { - fn new(config: &Config) -> AnalyticUnit { - AnalyticUnit { - metric_service: MetricService::new(&config.prom_url, &config.query), - } - } - - pub async fn get_detections(&self, from: u64, to: u64) -> anyhow::Result> { - let prom = self.metric_service.get_prom(); - let mr = prom.query(from, to, 10).await?; - - let key = mr.data.keys().nth(0).unwrap(); - let ts = &mr.data[key]; - - let mut result = Vec::::new(); - let mut from: Option = None; - for (t, v) in ts { - if *v > 100.0 { - if from.is_some() { - continue; - } else { - from = Some(*t); - } - } else { - if from.is_some() { - result.push(Segment { - id: None, - from: from.unwrap(), - to: *t, - segment_type: SegmentType::Detection, - }); - from = None; - } - } - } - - Ok(result) - } + // TODO: fields } diff --git a/server/src/main.rs b/server/src/main.rs index b8c8877..ef24f5b 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,6 +1,5 @@ use anyhow; -mod analytic_unit; mod api; #[tokio::main] diff --git a/server/src/services.rs b/server/src/services.rs index baf491d..fc83fda 100644 --- a/server/src/services.rs +++ b/server/src/services.rs @@ -1,3 +1,4 @@ pub mod metric_service; pub mod segments_service; pub mod user_service; +pub mod analytic_service; diff --git a/server/src/services/analytic_service.rs b/server/src/services/analytic_service.rs new file mode 100644 index 0000000..1706ddc --- /dev/null +++ b/server/src/services/analytic_service.rs @@ -0,0 +1,53 @@ +use crate::config::Config; + +use super::{metric_service::MetricService, segments_service::{Segment, SegmentType}}; + +use subbeat::metric::Metric; + +use anyhow; + + + +struct AnalyticService { + metric_service: MetricService, +} + +impl AnalyticService { + fn new(config: &Config) -> AnalyticService { + AnalyticService { + metric_service: MetricService::new(&config.prom_url, &config.query), + } + } + + pub async fn get_detections(&self, from: u64, to: u64) -> anyhow::Result> { + let prom = self.metric_service.get_prom(); + let mr = prom.query(from, to, 10).await?; + + let key = mr.data.keys().nth(0).unwrap(); + let ts = &mr.data[key]; + + let mut result = Vec::::new(); + let mut from: Option = None; + for (t, v) in ts { + if *v > 100.0 { + if from.is_some() { + continue; + } else { + from = Some(*t); + } + } else { + if from.is_some() { + result.push(Segment { + id: None, + from: from.unwrap(), + to: *t, + segment_type: SegmentType::Detection, + }); + from = None; + } + } + } + + Ok(result) + } +} diff --git a/server/src/services/segments_service.rs b/server/src/services/segments_service.rs index 6db0bb7..e413ac7 100644 --- a/server/src/services/segments_service.rs +++ b/server/src/services/segments_service.rs @@ -91,8 +91,6 @@ impl SegmentsService { .collect(); // merging - // TODO extract intersected ids - // TODO: merge with other segments let sgms = self.get_segments_intersected(segment.from, segment.to)?; let mut min = segment.from; let mut max = segment.to; @@ -153,7 +151,7 @@ impl SegmentsService { "DELETE FROM segment where ?1 <= start AND end <= ?2", params![from, to], )?; - return Ok(res); + Ok(res) } pub fn delete_segments(&self, ids: &Vec) -> anyhow::Result {