diff --git a/noxis-rs/src/options/structs.rs b/noxis-rs/src/options/structs.rs new file mode 100644 index 0000000..65c1a19 --- /dev/null +++ b/noxis-rs/src/options/structs.rs @@ -0,0 +1,291 @@ +#![allow(dead_code)] + +use std::net::Ipv4Addr; +use serde::{Deserialize, Serialize}; + +/// # an Error enum (next will be deleted and replaced) +pub enum CustomError { + Fatal, +} + +#[derive(Debug, PartialEq)] +pub enum ConfigActuality { + Local, + Remote, +} + +/// # Struct for the 1st level in json conf file +/// ## for storing main config data +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : `TrackingProcess` +/// +/// ``` json +/// { +/// -> "dateOfCreation": "1721381809104", +/// -> "configServer": "localhost", +/// -> "processes": [ +/// { ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Processes { + // #[serde(rename="id")] + // runner_id: usize, + #[serde(rename = "dateOfCreation")] + pub date_of_creation: String, + #[serde(rename = "configServer")] + pub config_server: String, + #[serde(default)] + pub processes: Vec, +} + +/// # Struct for the 2nd level in json conf file +/// ## for each process to contain info, such as name, path and dependencies +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : `Dependencies` +/// +/// ``` json +/// ... +/// "processes": [ +/// -> { +/// -> "name": "temp-process", +/// -> "path": "/home/user/monitor/runner-rs/temp-process", +/// -> "dependencies": { ... } +/// -> }, ... +/// ] +/// ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TrackingProcess { + pub name: String, + pub path: String, + pub dependencies: Dependencies, +} + +/// # Struct for the 3d level in json conf file +/// ## for processes' dependencies including files and services +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : `Files`, `Services` +/// +/// ``` json +/// ... +/// "path": "/home/user/monitor/runner-rs/temp-process", +/// -> "dependencies": { +/// -> "files": [ ... ], +/// -> "services": [ ... ] +/// -> } +/// ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Dependencies { + #[serde(default)] + pub files: Vec, + #[serde(default)] + pub services: Vec, +} + +/// # Struct for the 4th level in json conf file +/// ## for containing file object with its triggers to manipulate in daemons +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : `FileTriggers` +/// +/// ``` json +/// ... +/// "files": [ +/// -> { +/// -> "filename": "dep-file", +/// -> "src": "/home/user/monitor/runner-rs/tests/examples/", +/// -> "triggers": { ... } +/// -> } , +/// ... +/// ], ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Files { + pub filename: String, + pub src: String, + pub triggers: FileTriggers, +} + +/// # Struct for the 4th level in json conf file +/// ## for containing service object with its triggers to manipulate in daemons +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : `ServiceTriggers` +/// +/// ``` json +/// ... +/// "services": [ +/// -> { +/// -> "hostname" : "ya.ru", +/// -> "port" : 443, +/// -> "triggers": { ... } +/// -> } , +/// ... +/// ], ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Services { + pub hostname: String, + pub port: u32, + pub triggers: ServiceTriggers, +} + +/// # Struct for the 5th level in json conf file +/// ## for instancing each service's policies such as on lost or time to wait till reachable +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : - +/// +/// ``` json +/// ... +/// "port": 443, +/// -> "triggers": { +/// -> "wait": 10, +/// -> "delay": 2, +/// -> "onLost": "hold" +/// -> } +/// ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct ServiceTriggers { + pub wait: u32, + pub delay: u32, + #[serde(rename = "onLost")] + pub on_lost: String, +} + +/// # Struct for the 5th level in json conf file +/// ## for instancing each file's policies such as on-delete or onupdate events +/// +/// > (needed in serialization and deserialization) +/// +/// *depends on* : - +/// +/// ``` json +/// ... +/// "src": "/home/user/monitor/runner-rs/tests/examples/", +/// -> "triggers": { +/// -> "onDelete": "stop", +/// -> "onChange": "stay" +/// -> } +/// ... +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct FileTriggers { + #[serde(rename = "onDelete")] + pub on_delete: String, + #[serde(rename = "onChange")] + pub on_change: String, +} + +/// # Metrics struct +/// ## for gathering all system metrics (from container + each process) +/// +/// > (needed in hagent communication, `?...?`) +/// +/// *depends on* : `ContainerMetrics`, `ProcessMetrics` +/// +#[derive(Debug, Clone, Serialize,)] +pub struct Metrics { + pub container_metrics : ContainerMetrics, + pub processes_metrics : Vec, + // pub net_metrics : Vec, +} +/// ## Metrics struct's constructor +impl Metrics { + pub fn new(cm: ContainerMetrics, prm: Vec) -> Self { + Metrics { + container_metrics : cm, + processes_metrics : prm, + // net_metrics : net, + } + } +} + + +/// # Container metrics struct +/// ## for gathering all container metrics +/// +/// > (needed in gathering metrics) +/// +/// *depends on* : - +/// +#[derive(Debug, Clone, Serialize)] +pub struct ContainerMetrics { + container_id : String, + cpu_load : f32, + ram_load : f32, + // pub net_activity : ??? + processes : Vec, +} +/// ## Container struct's constructor +impl ContainerMetrics { + pub fn new(container_id : &str, cpu: f32, ram: f32, subsystems: Vec,) -> Self{ + ContainerMetrics { + container_id : String::from(container_id), + cpu_load : cpu, + ram_load : ram, + processes : subsystems, + } + } +} + +/// # Process metrics struct +/// ## for gathering each process's all metrics +/// +/// > (needed in gathering metrics) +/// +/// *depends on* : - +/// +#[derive(Debug, Clone, Serialize)] +pub struct ProcessMetrics { + pub process_name : String, + cpu_load : f32, + ram_load : f32, +} +/// ## Process struct's constructor +impl ProcessMetrics { + pub fn new(process_name :&str, cpu: f32, ram: f32) -> Self { + ProcessMetrics { + process_name : String::from(process_name), + cpu_load : cpu, + ram_load : ram, + } + } +} + +/// # Packet info struct +/// ## for gathering info about container's net activity +/// +/// > (needed in gathering metrics) +/// +/// *depends on* : - +/// +#[derive(Debug, Clone, Serialize)] +pub struct PacketInfo { + protocol : String, + dst_ip : Ipv4Addr, + src_ip : Ipv4Addr, + size : usize, +} +/// ## PacketInfo's constructor +impl PacketInfo { + pub fn new(prt: String, dest: Ipv4Addr, src: Ipv4Addr, size_of_packet: usize) -> Self { + PacketInfo { + protocol : prt, + dst_ip : dest, + src_ip : src, + size : size_of_packet, + } + } +} \ No newline at end of file