diff --git a/client/src/components/ScatterPlot.vue b/client/src/components/ScatterPlot.vue index f121ed5..0eeab96 100644 --- a/client/src/components/ScatterPlot.vue +++ b/client/src/components/ScatterPlot.vue @@ -7,17 +7,85 @@ diff --git a/client/src/views/Model.vue b/client/src/views/Model.vue index 2ceefba..dd904d0 100644 --- a/client/src/views/Model.vue +++ b/client/src/views/Model.vue @@ -2,7 +2,6 @@
Vue logo -
diff --git a/server/src/api/analytics.rs b/server/src/api/analytics.rs index 8b156e0..0cbb229 100644 --- a/server/src/api/analytics.rs +++ b/server/src/api/analytics.rs @@ -9,6 +9,7 @@ pub mod filters { ) -> impl Filter + Clone { list(client.clone()) .or(status(client.clone())) + .or(get_config(client.clone())) .or(list_train(client.clone())) // .or(create(db.clone())) // // .or(update(db.clone())) @@ -36,6 +37,16 @@ pub mod filters { .and_then(handlers::status) } + /// GET /analytics/config + pub fn get_config( + client: Client, + ) -> impl Filter + Clone { + warp::path!("analytics" / "config") + .and(warp::get()) + .and(with_client(client)) + .and_then(handlers::config) + } + /// GET /analytics/model pub fn list_train( client: Client, @@ -82,6 +93,16 @@ mod handlers { } } + pub async fn config(client: Client) -> Result { + match client.get_config().await { + Ok(cf) => Ok(API::json(&cf)), + Err(e) => { + println!("{:?}", e); + Err(warp::reject::custom(BadQuery)) + } + } + } + pub async fn list_train(client: Client) -> Result { match client.get_train().await { Ok(lt) => Ok(API::json(<)), diff --git a/server/src/services/analytic_service/analytic_client.rs b/server/src/services/analytic_service/analytic_client.rs index 2276e53..c01c64a 100644 --- a/server/src/services/analytic_service/analytic_client.rs +++ b/server/src/services/analytic_service/analytic_client.rs @@ -3,6 +3,7 @@ use tokio::sync::oneshot; use crate::services::segments_service::Segment; +use super::analytic_unit::types::AnalyticUnitConfig; use super::types::DetectionTask; use super::types::LearningStatus; use super::types::LearningTrain; @@ -34,6 +35,14 @@ impl AnalyticClient { Ok(r) } + pub async fn get_config(&self) -> anyhow::Result { + let (tx, rx) = oneshot::channel(); + let req = AnalyticServiceMessage::Request(RequestType::GetConfig(tx)); + self.tx.send(req).await?; + let r = rx.await?; + Ok(r) + } + pub async fn get_train(&self) -> anyhow::Result { let (tx, rx) = oneshot::channel(); let req = AnalyticServiceMessage::Request(RequestType::GetLearningTrain(tx)); diff --git a/server/src/services/analytic_service/analytic_service.rs b/server/src/services/analytic_service/analytic_service.rs index a929f95..449b229 100644 --- a/server/src/services/analytic_service/analytic_service.rs +++ b/server/src/services/analytic_service/analytic_service.rs @@ -1,7 +1,8 @@ +use super::analytic_unit::types::{AnalyticUnitConfig, PatternDetectorConfig}; use super::types::{self, DetectionRunnerConfig, LearningTrain}; use super::{ analytic_client::AnalyticClient, - pattern_detector::{self, LearningResults, PatternDetector}, + analytic_unit::pattern_detector::{self, LearningResults, PatternDetector}, types::{AnalyticServiceMessage, DetectionTask, LearningStatus, RequestType, ResponseType}, }; @@ -51,6 +52,7 @@ pub struct AnalyticService { metric_service: MetricService, segments_service: SegmentsService, learning_results: Option, + analytic_unit_config: AnalyticUnitConfig, learning_status: LearningStatus, tx: mpsc::Sender, rx: mpsc::Receiver, @@ -78,8 +80,14 @@ impl AnalyticService { AnalyticService { metric_service, segments_service, + // TODO: get it from persistance learning_results: None, + analytic_unit_config: AnalyticUnitConfig::PatternDetector(PatternDetectorConfig { + correlation_score: 0.95, + model_score: 0.95 + }), + learning_status: LearningStatus::Initialization, tx, rx, @@ -180,6 +188,9 @@ impl AnalyticService { .unwrap(); } } + RequestType::GetConfig(tx) => { + tx.send(self.analytic_unit_config.clone()).unwrap(); + } }; } diff --git a/server/src/services/analytic_service/analytic_unit/mod.rs b/server/src/services/analytic_service/analytic_unit/mod.rs new file mode 100644 index 0000000..a185aea --- /dev/null +++ b/server/src/services/analytic_service/analytic_unit/mod.rs @@ -0,0 +1,6 @@ +pub mod pattern_detector; +pub mod types; + +trait AnalyticUnit { + +} \ No newline at end of file diff --git a/server/src/services/analytic_service/pattern_detector.rs b/server/src/services/analytic_service/analytic_unit/pattern_detector.rs similarity index 99% rename from server/src/services/analytic_service/pattern_detector.rs rename to server/src/services/analytic_service/analytic_unit/pattern_detector.rs index 62a5673..7663aa5 100644 --- a/server/src/services/analytic_service/pattern_detector.rs +++ b/server/src/services/analytic_service/analytic_unit/pattern_detector.rs @@ -11,7 +11,9 @@ use linfa_svm::{error::Result, Svm}; use ndarray::{Array, ArrayView, Axis}; -use super::types::LearningTrain; +use crate::services::analytic_service::types::LearningTrain; + + #[derive(Clone)] pub struct LearningResults { diff --git a/server/src/services/analytic_service/analytic_unit/types.rs b/server/src/services/analytic_service/analytic_unit/types.rs new file mode 100644 index 0000000..d87f12f --- /dev/null +++ b/server/src/services/analytic_service/analytic_unit/types.rs @@ -0,0 +1,12 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct PatternDetectorConfig { + pub correlation_score: f32, + pub model_score: f32 +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum AnalyticUnitConfig { + PatternDetector(PatternDetectorConfig) +} \ No newline at end of file diff --git a/server/src/services/analytic_service/mod.rs b/server/src/services/analytic_service/mod.rs index a1100a7..fb15d78 100644 --- a/server/src/services/analytic_service/mod.rs +++ b/server/src/services/analytic_service/mod.rs @@ -1,5 +1,5 @@ mod analytic_service; -mod pattern_detector; +mod analytic_unit; pub mod types; pub mod analytic_client; diff --git a/server/src/services/analytic_service/types.rs b/server/src/services/analytic_service/types.rs index 0f0c8c5..7aa5669 100644 --- a/server/src/services/analytic_service/types.rs +++ b/server/src/services/analytic_service/types.rs @@ -1,6 +1,6 @@ use crate::services::segments_service::Segment; -use super::pattern_detector::{self, LearningResults, PatternDetector}; +use super::analytic_unit::{pattern_detector::{self, LearningResults}, types::AnalyticUnitConfig}; use anyhow::Result; use serde::Serialize; @@ -15,6 +15,7 @@ pub enum LearningStatus { Ready, } +// TODO: move to analytic_unit config of pattern detector #[derive(Clone, Serialize, Debug)] pub struct LearningTrain { pub features: Vec, @@ -58,6 +59,7 @@ pub enum RequestType { RunLearning, RunDetection(DetectionTask), GetStatus(oneshot::Sender), + GetConfig(oneshot::Sender), GetLearningTrain(oneshot::Sender), }