Browse Source

Merge pull request #106 from hastic/data-folder-creation-single-place-#102

data folder creation single place
pull/108/head
glitch4347 2 years ago committed by GitHub
parent
commit
eee437d779
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      server/src/main.rs
  2. 15
      server/src/services/analytic_unit_service.rs
  3. 23
      server/src/services/data_service.rs
  4. 1
      server/src/services/mod.rs
  5. 16
      server/src/services/segments_service.rs

7
server/src/main.rs

@ -1,6 +1,6 @@
mod api; mod api;
use hastic::services::{analytic_service, analytic_unit_service, metric_service, segments_service}; use hastic::services::{analytic_service, analytic_unit_service, metric_service, segments_service, data_service};
use anyhow; use anyhow;
@ -9,9 +9,10 @@ async fn main() -> anyhow::Result<()> {
let config = hastic::config::Config::new()?; let config = hastic::config::Config::new()?;
let cfg_clone = config.clone(); let cfg_clone = config.clone();
let analytic_unit_service = analytic_unit_service::AnalyticUnitService::new()?; let data_service = data_service::DataService::new()?;
let analytic_unit_service = analytic_unit_service::AnalyticUnitService::new(&data_service)?;
let metric_service = metric_service::MetricService::new(&config.datasource_config); let metric_service = metric_service::MetricService::new(&config.datasource_config);
let segments_service = segments_service::SegmentsService::new()?; let segments_service = segments_service::SegmentsService::new(&data_service)?;
let mut analytic_service = analytic_service::AnalyticService::new( let mut analytic_service = analytic_service::AnalyticService::new(
analytic_unit_service.clone(), analytic_unit_service.clone(),

15
server/src/services/analytic_unit_service.rs

@ -1,5 +1,3 @@
use serde::{Deserialize, Serialize};
use serde_json::{Result, Value};
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use rusqlite::{params, Connection}; use rusqlite::{params, Connection};
@ -11,19 +9,20 @@ use super::analytic_service::analytic_unit::{
types::{self, AnalyticUnitConfig}, types::{self, AnalyticUnitConfig},
}; };
use super::data_service::DataService;
#[derive(Clone)] #[derive(Clone)]
pub struct AnalyticUnitService { pub struct AnalyticUnitService {
connection: Arc<Mutex<Connection>>, connection: Arc<Mutex<Connection>>,
} }
// TODO: get DataService
impl AnalyticUnitService { impl AnalyticUnitService {
pub fn new() -> anyhow::Result<AnalyticUnitService> { pub fn new(ds: &DataService) -> anyhow::Result<AnalyticUnitService> {
// TODO: remove repetitoin with segment_service let conn = ds.analytic_units_connection.clone();
std::fs::create_dir_all("./data").unwrap();
let conn = Connection::open("./data/analytic_units.db")?;
// TODO: add learning results field // TODO: add learning results field
conn.execute( conn.lock().unwrap().execute(
"CREATE TABLE IF NOT EXISTS analytic_unit ( "CREATE TABLE IF NOT EXISTS analytic_unit (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
last_detection INTEGER, last_detection INTEGER,
@ -35,7 +34,7 @@ impl AnalyticUnitService {
)?; )?;
Ok(AnalyticUnitService { Ok(AnalyticUnitService {
connection: Arc::new(Mutex::new(conn)), connection: conn
}) })
} }

23
server/src/services/data_service.rs

@ -0,0 +1,23 @@
use std::sync::{Arc, Mutex};
use rusqlite::{Connection};
pub struct DataService {
pub analytic_units_connection: Arc<Mutex<Connection>>,
pub segments_connection: Arc<Mutex<Connection>>
}
impl DataService {
pub fn new() -> anyhow::Result<DataService> {
std::fs::create_dir_all("./data").unwrap();
let analytic_units_connection = Connection::open("./data/analytic_units.db")?;
let segments_connection = Connection::open("./data/segments.db")?;
Ok(DataService {
analytic_units_connection: Arc::new(Mutex::new(analytic_units_connection)),
segments_connection: Arc::new(Mutex::new(segments_connection))
})
}
}

1
server/src/services/mod.rs

@ -1,4 +1,5 @@
pub mod analytic_service; pub mod analytic_service;
pub mod data_service;
pub mod analytic_unit_service; pub mod analytic_unit_service;
pub mod metric_service; pub mod metric_service;
pub mod segments_service; pub mod segments_service;

16
server/src/services/segments_service.rs

@ -6,9 +6,13 @@ use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use super::data_service::DataService;
pub const ID_LENGTH: usize = 20; pub const ID_LENGTH: usize = 20;
pub type SegmentId = String; pub type SegmentId = String;
// TODO: make logic with this enum shorter // TODO: make logic with this enum shorter
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)] #[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum SegmentType { pub enum SegmentType {
@ -58,19 +62,19 @@ impl Segment {
} }
} }
// TODO: get DataService
#[derive(Clone)] #[derive(Clone)]
pub struct SegmentsService { pub struct SegmentsService {
connection: Arc<Mutex<Connection>>, connection: Arc<Mutex<Connection>>,
} }
impl SegmentsService { impl SegmentsService {
pub fn new() -> anyhow::Result<SegmentsService> { pub fn new(ds: &DataService) -> anyhow::Result<SegmentsService> {
// TODO: move it to data service
std::fs::create_dir_all("./data").unwrap();
// TODO: add unilytic_unit id as a new field // TODO: add unilytic_unit id as a new field
let conn = Connection::open("./data/segments.db")?; let conn = ds.segments_connection.clone();
conn.execute( conn.lock().unwrap().execute(
"CREATE TABLE IF NOT EXISTS segment ( "CREATE TABLE IF NOT EXISTS segment (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
start INTEGER NOT NULL, start INTEGER NOT NULL,
@ -81,7 +85,7 @@ impl SegmentsService {
)?; )?;
Ok(SegmentsService { Ok(SegmentsService {
connection: Arc::new(Mutex::new(conn)), connection: conn
}) })
} }

Loading…
Cancel
Save