From 539a889deb091a4a61f95b31fec5837778ff833a Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Mon, 1 Nov 2021 20:25:14 +0300 Subject: [PATCH] fx detections --- .../services/analytic_service/analytic_client.rs | 6 ++++-- .../analytic_service/analytic_service.rs | 16 +++++++++++++--- .../analytic_service/pattern_detector.rs | 12 +++++++----- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/server/src/services/analytic_service/analytic_client.rs b/server/src/services/analytic_service/analytic_client.rs index c918458..60b0d74 100644 --- a/server/src/services/analytic_service/analytic_client.rs +++ b/server/src/services/analytic_service/analytic_client.rs @@ -42,7 +42,9 @@ impl AnalyticClient { })); self.tx.send(req).await?; // TODO: handle second error - let r = rx.await??; - return Ok(r); + match rx.await? { + Ok(r) => Ok(r), + Err(e) => Ok(Vec::new()), + } } } diff --git a/server/src/services/analytic_service/analytic_service.rs b/server/src/services/analytic_service/analytic_service.rs index 3d0695d..423a22a 100644 --- a/server/src/services/analytic_service/analytic_service.rs +++ b/server/src/services/analytic_service/analytic_service.rs @@ -1,9 +1,9 @@ +use super::types; use super::{ analytic_client::AnalyticClient, pattern_detector::{self, LearningResults, PatternDetector}, types::{AnalyticServiceMessage, DetectionTask, LearningStatus, RequestType, ResponseType}, }; -use super::types; use crate::services::{ metric_service::MetricService, @@ -19,8 +19,6 @@ use tokio::sync::{mpsc, oneshot}; use futures::future; - - // TODO: get this from pattern detector const DETECTION_STEP: u64 = 10; @@ -98,6 +96,18 @@ impl AnalyticService { })); } RequestType::RunDetection(task) => { + if self.learning_status == LearningStatus::Initialization { + match task + .sender + .send(Err(anyhow::format_err!("Analytics in initialization"))) + { + Ok(_) => {} + Err(e_) => { + println!("failed to send error about initialization"); + } + } + return; + } if self.learning_status == LearningStatus::Ready { self.run_detection_task(task); } else { diff --git a/server/src/services/analytic_service/pattern_detector.rs b/server/src/services/analytic_service/pattern_detector.rs index 29437bc..aae2c89 100644 --- a/server/src/services/analytic_service/pattern_detector.rs +++ b/server/src/services/analytic_service/pattern_detector.rs @@ -43,13 +43,15 @@ impl PatternDetector { // TODO: get iterator instead of vector pub fn detect(&self, ts: &Vec<(u64, f64)>) -> Vec<(u64, u64)> { - let mut results = Vec::new(); let mut i = 0; while i < ts.len() - self.learning_results.backet_size { + let backet: Vec<_> = ts + .iter() + .skip(i) + .take(self.learning_results.backet_size) + .collect(); - let backet: Vec<_> = ts.iter().skip(i).take(self.learning_results.backet_size).collect(); - let mut min = f64::MAX; let mut max = f64::MIN; @@ -59,8 +61,8 @@ impl PatternDetector { } if min > 10_000. && max < 100_000. { - let from = backet[i].0; - let to = backet[i + self.learning_results.backet_size - 1].0; + let from = backet[0].0; + let to = backet[backet.len() - 1].0; results.push((from, to)); }