From d5d0c29dee5f8f502872734d04ed10a958236b75 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Mon, 8 Nov 2021 21:41:26 +0300 Subject: [PATCH] analytic unit config --- server/src/api/analytics.rs | 21 +++++++++++++++++++ .../analytic_service/analytic_client.rs | 9 ++++++++ .../analytic_service/analytic_service.rs | 13 +++++++++++- .../analytic_service/analytic_unit/mod.rs | 5 ++++- .../{ => analytic_unit}/pattern_detector.rs | 4 +++- .../analytic_service/analytic_unit/types.rs | 9 ++++++++ server/src/services/analytic_service/mod.rs | 2 +- server/src/services/analytic_service/types.rs | 4 +++- 8 files changed, 62 insertions(+), 5 deletions(-) rename server/src/services/analytic_service/{ => analytic_unit}/pattern_detector.rs (99%) 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 index 2dc47f2..a185aea 100644 --- a/server/src/services/analytic_service/analytic_unit/mod.rs +++ b/server/src/services/analytic_service/analytic_unit/mod.rs @@ -1,3 +1,6 @@ -trait AnalyticUnit where C: AnalyticUnitConfig { +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 index 7aa5a98..d87f12f 100644 --- a/server/src/services/analytic_service/analytic_unit/types.rs +++ b/server/src/services/analytic_service/analytic_unit/types.rs @@ -1,3 +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 d72f7d6..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}; +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), }