|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|