diff --git a/src/options/structs.rs b/src/options/structs.rs index d0ea23d..8e3ac3f 100644 --- a/src/options/structs.rs +++ b/src/options/structs.rs @@ -11,8 +11,20 @@ pub enum ConfigActuality { Remote, } -/// # struct for the 1st level in json conf file +/// # Struct for the 1st level in json conf file +/// ## for storing main config data +/// /// > (needed in serialization and deserialization) +/// +/// *depends on* : `TrackingProcess` +/// +/// ``` +/// { +/// -> "dateOfCreation": "1721381809104", +/// -> "configServer": "localhost", +/// -> "processes": [ +/// { ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Processes { // #[serde(rename="id")] @@ -25,8 +37,24 @@ pub struct Processes { pub processes: Vec, } -/// # struct for each process to contain info, such as name, path and dependencies +/// # 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` +/// +/// ``` +/// ... +/// "processes": [ +/// -> { +/// -> "name": "temp-process", +/// -> "path": "/home/user/monitor/runner-rs/temp-process", +/// -> "dependencies": { ... } +/// -> }, ... +/// ] +/// ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] pub struct TrackingProcess { pub name: String, @@ -34,8 +62,22 @@ pub struct TrackingProcess { pub dependencies: Dependencies, } -/// # struct for processes' dependencies including files and services +/// # 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` +/// +/// ``` +/// ... +/// "path": "/home/user/monitor/runner-rs/temp-process", +/// -> "dependencies": { +/// -> "files": [ ... ], +/// -> "services": [ ... ] +/// -> } +/// ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Dependencies { #[serde(default)] @@ -44,17 +86,49 @@ pub struct Dependencies { pub services: Vec, } -/// # struct for containing file object with its triggers to manipulate in daemons +/// # 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` +/// +/// ``` +/// ... +/// "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, + pub triggers: FileTriggers, } -/// # struct for containing service object with its triggers to manipulate in daemons +/// # 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` +/// +/// ``` +/// ... +/// "services": [ +/// -> { +/// -> "hostname" : "ya.ru", +/// -> "port" : 443, +/// -> "triggers": { ... } +/// -> } , +/// ... +/// ], ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Services { pub hostname: String, @@ -62,8 +136,23 @@ pub struct Services { pub triggers: ServiceTriggers, } -/// # struct for instancing each service's policies such as on lost or time to wait till reachable +/// # 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* : - +/// +/// ``` +/// ... +/// "port": 443, +/// -> "triggers": { +/// -> "wait": 10, +/// -> "delay": 2, +/// -> "onLost": "hold" +/// -> } +/// ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ServiceTriggers { pub wait: u32, @@ -72,24 +161,44 @@ pub struct ServiceTriggers { pub on_lost: String, } -/// # struct for instancing each file's policies such as on-delete or onupdate events +/// # 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* : - +/// +/// ``` +/// ... +/// "src": "/home/user/monitor/runner-rs/tests/examples/", +/// -> "triggers": { +/// -> "onDelete": "stop", +/// -> "onChange": "stay" +/// -> } +/// ... +/// ``` #[derive(Debug, Serialize, Deserialize, Clone)] -pub struct FIleTriggers { +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 { @@ -101,7 +210,12 @@ impl Metrics { } +/// # Container metrics struct +/// ## for gathering all container metrics /// +/// > (needed in gathering metrics) +/// +/// *depends on* : - /// #[derive(Debug, Clone, Serialize)] pub struct ContainerMetrics { @@ -111,7 +225,7 @@ pub struct ContainerMetrics { // 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 { @@ -123,7 +237,12 @@ impl ContainerMetrics { } } +/// # Process metrics struct +/// ## for gathering each process's all metrics /// +/// > (needed in gathering metrics) +/// +/// *depends on* : - /// #[derive(Debug, Clone, Serialize)] pub struct ProcessMetrics { @@ -131,7 +250,7 @@ pub struct ProcessMetrics { cpu_load : f32, ram_load : f32, } - +/// ## Process struct's constructor impl ProcessMetrics { pub fn new(process_name :&str, cpu: f32, ram: f32) -> Self { ProcessMetrics { @@ -142,6 +261,13 @@ impl ProcessMetrics { } } +/// # 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, @@ -149,6 +275,7 @@ pub struct PacketInfo { 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 { diff --git a/src/utils/metrics.rs b/src/utils/metrics.rs index 7e8e663..9b736d4 100644 --- a/src/utils/metrics.rs +++ b/src/utils/metrics.rs @@ -1,29 +1,32 @@ // submodule needed to get metrics such as // cpu load, ram/rom load and net activity -use std::sync::Mutex; +// use std::sync::Mutex; use std::sync::Arc; use crate::options::structs::TrackingProcess; use sysinfo::{Process, System}; use tokio::join; -use crate::options::structs::{ProcessMetrics, ContainerMetrics, PacketInfo}; +use crate::options::structs::{ProcessMetrics, ContainerMetrics}; use crate::utils::get_container_id; // use pcap::{Device, Capture, Active}; // use std::net::Ipv4Addr; // use anyhow::{Result, Ok}; -type PacketBuffer = Arc>>; +// type PacketBuffer = Arc>>; -// init_metrics_grubber - fn for initializing -// loop for unstoppable grubbing metrics. -// -// input : vec of processes -// output : Err if it cant create grubbers | Ok on finish -// initiator : main thread -// managing : object of unix-socket reader -// depends on : network activity -// !! FOR PROCESS !! -// pub async fn init_metrics_grubber(prcs: Arc>) { +/// # Fn init_metrics_grubber +/// ## for initializing process of unstoppable grubbing metrics. +/// +/// `input` : vec of processes +/// +/// `output` : Err if it cant create grubbers | Ok on finish +/// +/// `initiator` : main thread +/// +/// `managing` : object of unix-socket reader +/// +/// `depends on` : network activity +/// pub async fn init_metrics_grubber() { let mut system = System::new(); // let mut buffer: Vec = vec![];