From bfaec567256092fc43dd5be30fab9943ad200a51 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Mon, 1 Nov 2021 19:17:17 +0300 Subject: [PATCH] buggy detections --- .../analytic_service/analytic_service.rs | 4 -- .../analytic_service/pattern_detector.rs | 39 ++++++++++++++++--- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/server/src/services/analytic_service/analytic_service.rs b/server/src/services/analytic_service/analytic_service.rs index 4ec3495..3d0695d 100644 --- a/server/src/services/analytic_service/analytic_service.rs +++ b/server/src/services/analytic_service/analytic_service.rs @@ -249,10 +249,6 @@ impl AnalyticService { }) .collect(); - // TODO: run detections - // TODO: convert detections to segments - // Ok(result_segments) - match tx.send(Ok(result_segments)) { Ok(_) => {} Err(_e) => { diff --git a/server/src/services/analytic_service/pattern_detector.rs b/server/src/services/analytic_service/pattern_detector.rs index d34b605..29437bc 100644 --- a/server/src/services/analytic_service/pattern_detector.rs +++ b/server/src/services/analytic_service/pattern_detector.rs @@ -4,6 +4,8 @@ use tokio::time::{sleep, Duration}; #[derive(Debug, Clone)] pub struct LearningResults { backet_size: usize, + // avg_min: f64, + // avg_max: f64, } #[derive(Clone)] @@ -26,18 +28,45 @@ impl PatternDetector { max_size = max_size.max(r.len()); } - let ten_millis = time::Duration::from_millis(1000); - thread::sleep(ten_millis); + // let mut max_sum = 0; + // let mut min_sum = 0; - sleep(Duration::from_millis(1000)).await; + // for read in reads { + // let my_max = read.iter().map(|(t,v)| *v).max().unwrap(); + // let my_min = read.iter().min().unwrap(); + // } LearningResults { backet_size: (min_size + max_size) / 2, } } + // TODO: get iterator instead of vector pub fn detect(&self, ts: &Vec<(u64, f64)>) -> Vec<(u64, u64)> { - // fill backet - return Vec::new(); + + 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 mut min = f64::MAX; + let mut max = f64::MIN; + + for (t, v) in backet.iter() { + min = v.min(min); + max = v.max(max); + } + + if min > 10_000. && max < 100_000. { + let from = backet[i].0; + let to = backet[i + self.learning_results.backet_size - 1].0; + results.push((from, to)); + } + + i += 100; + } + + return results; } }