Browse Source

fx detections

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
539a889deb
  1. 6
      server/src/services/analytic_service/analytic_client.rs
  2. 16
      server/src/services/analytic_service/analytic_service.rs
  3. 12
      server/src/services/analytic_service/pattern_detector.rs

6
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()),
}
}
}

16
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 {

12
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));
}

Loading…
Cancel
Save