Browse Source

buggy config patch

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
27640a5b6f
  1. 14
      client/src/views/Home.vue
  2. 2
      server/src/api/analytics.rs
  3. 9
      server/src/services/analytic_service/analytic_service.rs
  4. 8
      server/src/services/analytic_service/analytic_unit/mod.rs
  5. 102
      server/src/services/analytic_service/analytic_unit/types.rs

14
client/src/views/Home.vue

@ -33,6 +33,8 @@ import Graph from '@/components/Graph.vue';
import AnalyticStatus from '@/components/AnlyticsStatus.vue'; import AnalyticStatus from '@/components/AnlyticsStatus.vue';
import { AnalyticUnitType } from '@/types/analytic_units'; import { AnalyticUnitType } from '@/types/analytic_units';
import * as _ from 'lodash';
export default defineComponent({ export default defineComponent({
name: 'Home', name: 'Home',
@ -45,13 +47,17 @@ export default defineComponent({
this.$refs.graph.deleteAllSegments(); this.$refs.graph.deleteAllSegments();
}, },
changeAnalyticUnitType(e) { changeAnalyticUnitType(e) {
this.$store.dispatch('patchConfig', { [e.target.value]: true } ); this.$store.dispatch('patchConfig', { [e.target.value]: null } );
}, },
correlationScoreChange(e) { correlationScoreChange(e) {
this.$store.dispatch('patchConfig', { Pattern: { correlation_score: e.target.value } }); let cfg = _.clone(this.analyticUnitConfig);
cfg.correlation_score = parseFloat(e.target.value);
this.$store.dispatch('patchConfig', { Pattern: cfg });
}, },
modelScoreChange(e) { modelScoreChange(e) {
this.$store.dispatch('patchConfig', { Pattern: { model_score: e.target.value } }); let cfg = _.clone(this.analyticUnitConfig);
cfg.model_score = parseFloat(e.target.value);
this.$store.dispatch('patchConfig', { Pattern: cfg });
} }
}, },
data: function () { data: function () {
@ -59,7 +65,7 @@ export default defineComponent({
analyticUnitTypes: [ analyticUnitTypes: [
AnalyticUnitType.THRESHOLD, AnalyticUnitType.THRESHOLD,
AnalyticUnitType.PATTERN, AnalyticUnitType.PATTERN,
AnalyticUnitType.ANOMALY, AnalyticUnitType.ANOMALY,
] ]
} }
}, },

2
server/src/api/analytics.rs

@ -120,7 +120,7 @@ mod handlers {
pub async fn patch_config(client: Client, patch: PatchConfig) -> Result<impl warp::Reply, warp::Rejection> { pub async fn patch_config(client: Client, patch: PatchConfig) -> Result<impl warp::Reply, warp::Rejection> {
println!("{:?}", patch); // println!("{:?}", patch);
match client.patch_config(patch).await { match client.patch_config(patch).await {
Ok(cf) => Ok(API::json(&cf)), Ok(cf) => Ok(API::json(&cf)),
Err(e) => { Err(e) => {

9
server/src/services/analytic_service/analytic_service.rs

@ -219,9 +219,12 @@ impl AnalyticService {
} }
} }
fn patch_config(&mut self, mut patch: PatchConfig) { fn patch_config(&mut self, patch: PatchConfig) {
// let r = patch.take(); let (new_conf, need_learning) = self.analytic_unit_config.patch(patch);
println!("{:?}", patch); self.analytic_unit_config = new_conf;
if need_learning {
self.consume_request(RequestType::RunLearning);
}
} }
pub async fn serve(&mut self) { pub async fn serve(&mut self) {

8
server/src/services/analytic_service/analytic_unit/mod.rs

@ -3,14 +3,12 @@ pub mod threshold_analytic_unit;
pub mod anomaly_analytic_unit; pub mod anomaly_analytic_unit;
pub mod types; pub mod types;
use self::{ use self::{anomaly_analytic_unit::AnomalyAnalyticUnit, pattern_analytic_unit::PatternAnalyticUnit, threshold_analytic_unit::ThresholdAnalyticUnit, types::AnalyticUnitConfig};
pattern_analytic_unit::PatternAnalyticUnit, threshold_analytic_unit::ThresholdAnalyticUnit,
types::AnalyticUnitConfig,
};
pub fn resolve(cfg: AnalyticUnitConfig) -> Box<dyn types::AnalyticUnit + Send + Sync> { pub fn resolve(cfg: AnalyticUnitConfig) -> Box<dyn types::AnalyticUnit + Send + Sync> {
match cfg { match cfg {
AnalyticUnitConfig::Pattern(c) => Box::new(PatternAnalyticUnit::new(c.clone())),
AnalyticUnitConfig::Threshold(c) => Box::new(ThresholdAnalyticUnit::new(c.clone())), AnalyticUnitConfig::Threshold(c) => Box::new(ThresholdAnalyticUnit::new(c.clone())),
AnalyticUnitConfig::Pattern(c) => Box::new(PatternAnalyticUnit::new(c.clone())),
AnalyticUnitConfig::Anomaly(c) => Box::new(AnomalyAnalyticUnit::new(c.clone()))
} }
} }

102
server/src/services/analytic_service/analytic_unit/types.rs

@ -1,12 +1,12 @@
use fastrand::bool;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use async_trait::async_trait; use async_trait::async_trait;
use crate::services::{ use crate::services::{
analytic_service::types, metric_service::MetricService, segments_service::SegmentsService, metric_service::MetricService, segments_service::SegmentsService,
}; };
use super::threshold_analytic_unit::ThresholdAnalyticUnit;
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PatternConfig { pub struct PatternConfig {
@ -14,20 +14,112 @@ pub struct PatternConfig {
pub model_score: f32, pub model_score: f32,
} }
impl Default for PatternConfig {
fn default() -> Self {
PatternConfig {
correlation_score: 0.95,
model_score: 0.95,
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct AnomalyConfig { pub struct AnomalyConfig {
pub sesonality: bool, pub sesonality: bool,
} }
impl Default for AnomalyConfig {
fn default() -> Self {
AnomalyConfig {
sesonality: false
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ThresholdConfig { pub struct ThresholdConfig {
pub threashold: f64, pub threashold: f64,
} }
impl Default for ThresholdConfig {
fn default() -> Self {
ThresholdConfig {
threashold: 0.5
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub enum AnalyticUnitConfig { pub enum AnalyticUnitConfig {
Pattern(PatternConfig), Pattern(PatternConfig),
Threshold(ThresholdConfig), Threshold(ThresholdConfig),
Anomaly(AnomalyConfig)
}
impl AnalyticUnitConfig {
// return tru if patch is different type
pub fn patch(&self, patch: PatchConfig) -> (AnalyticUnitConfig, bool) {
match patch {
PatchConfig::Pattern(tcfg) => {
match self.clone() {
AnalyticUnitConfig::Pattern(_) => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Pattern(tcfg.unwrap()), false)
} else {
return (AnalyticUnitConfig::Pattern(Default::default()), false)
}
},
_ => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Pattern(tcfg.unwrap()), true)
} else {
return (AnalyticUnitConfig::Pattern(Default::default()), true)
}
},
}
}
PatchConfig::Anomaly(tcfg) => {
match self.clone() {
AnalyticUnitConfig::Anomaly(_) => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Anomaly(tcfg.unwrap()), false)
} else {
return (AnalyticUnitConfig::Anomaly(Default::default()), false)
}
},
_ => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Anomaly(tcfg.unwrap()), true)
} else {
return (AnalyticUnitConfig::Anomaly(Default::default()), true)
}
},
}
}
PatchConfig::Threshold(tcfg) => {
match self.clone() {
AnalyticUnitConfig::Threshold(_) => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Threshold(tcfg.unwrap()), false)
} else {
return (AnalyticUnitConfig::Threshold(Default::default()), false)
}
},
_ => {
if tcfg.is_some() {
return (AnalyticUnitConfig::Threshold(tcfg.unwrap()), true)
} else {
return (AnalyticUnitConfig::Threshold(Default::default()), true)
}
},
}
}
}
}
} }
pub enum LearningResult { pub enum LearningResult {
@ -49,7 +141,7 @@ pub trait AnalyticUnit {
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug)]
pub enum PatchConfig { pub enum PatchConfig {
Pattern(bool), Pattern(Option<PatternConfig>),
Threshold(bool), Threshold(Option<ThresholdConfig>),
Anomaly(bool) Anomaly(Option<AnomalyConfig>)
} }

Loading…
Cancel
Save