gr v2
parent
d67e77c5cc
commit
5a9bf795e9
|
|
@ -1,6 +1,4 @@
|
||||||
/target
|
/target
|
||||||
.idea
|
.idea
|
||||||
Dockerfile
|
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
settings.json
|
|
||||||
hagent_test.sock
|
hagent_test.sock
|
||||||
24
Cargo.toml
24
Cargo.toml
|
|
@ -1,24 +1,12 @@
|
||||||
[package]
|
[workspace]
|
||||||
name = "runner-rs"
|
resolver = "2"
|
||||||
version = "0.10.11"
|
members = [
|
||||||
edition = "2021"
|
"noxis-rs",
|
||||||
|
"noxis-cli",
|
||||||
|
]
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
debug = true
|
debug = true
|
||||||
|
|
||||||
[profile.test]
|
[profile.test]
|
||||||
debug = false
|
debug = false
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
anyhow = "1.0.93"
|
|
||||||
chrono = "0.4.38"
|
|
||||||
clap = { version = "4.5.21", features = ["derive"] }
|
|
||||||
env_logger = "0.11.3"
|
|
||||||
inotify = "0.10.2"
|
|
||||||
log = "0.4.22"
|
|
||||||
pcap = "2.2.0"
|
|
||||||
redis = "0.25.4"
|
|
||||||
serde = { version = "1.0.203", features = ["derive"] }
|
|
||||||
serde_json = "1.0.118"
|
|
||||||
sysinfo = "0.32.0"
|
|
||||||
tokio = { version = "1.38.0", features = ["full", "time"] }
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
# runner-rs ( with amd64 and riscv64 support )
|
# Monitor "Noxis" ( with amd64 and riscv64 support )
|
||||||

|

|
||||||
in-container integrating util to handle processes runtime
|
in-container integrating util to handle processes runtime
|
||||||
|
|
||||||
|
|
@ -8,6 +8,9 @@ in-container integrating util to handle processes runtime
|
||||||
- `rustup (>=1.27.1)`
|
- `rustup (>=1.27.1)`
|
||||||
- `gcc-riscv64-unknown-elf`
|
- `gcc-riscv64-unknown-elf`
|
||||||
- `build-essential`
|
- `build-essential`
|
||||||
|
- `gcc-riscv64-linux-gnu`
|
||||||
|
- `binutils-riscv64-linux-gnu`
|
||||||
|
|
||||||
|
|
||||||
## Setting up
|
## Setting up
|
||||||
Download and execute rustup.sh
|
Download and execute rustup.sh
|
||||||
|
|
@ -29,7 +32,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
cd runner-rs/ && rustup target add riscv64gc-unknown-linux-gnu && rustup target add x86_64-unknown-linux-gnu
|
cd runner-rs/ && rustup target add riscv64gc-unknown-linux-gnu && rustup target add x86_64-unknown-linux-gnu
|
||||||
~~~
|
~~~
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Cargo is configured to build an app for amd64/linux defaultly. RISC-based compilation is optional.
|
> Cargo is configured to build an app for amd64/linux defaultly. RISCV-based compilation is optional.
|
||||||
|
|
||||||
3.1. Release build of app for amd64/linux
|
3.1. Release build of app for amd64/linux
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "noxis-cli"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
[package]
|
||||||
|
name = "noxis-rs"
|
||||||
|
version = "0.10.11"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.93"
|
||||||
|
chrono = "0.4.38"
|
||||||
|
clap = { version = "4.5.21", features = ["derive"] }
|
||||||
|
env_logger = "0.11.3"
|
||||||
|
inotify = "0.10.2"
|
||||||
|
log = "0.4.22"
|
||||||
|
pcap = "2.2.0"
|
||||||
|
redis = "0.25.4"
|
||||||
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
|
serde_json = "1.0.118"
|
||||||
|
sysinfo = "0.32.0"
|
||||||
|
tokio = { version = "1.38.0", features = ["full", "time"] }
|
||||||
|
|
@ -1,291 +0,0 @@
|
||||||
#![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<TrackingProcess>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # 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<Files>,
|
|
||||||
#[serde(default)]
|
|
||||||
pub services: Vec<Services>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # 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<ProcessMetrics>,
|
|
||||||
// pub net_metrics : Vec<PacketInfo>,
|
|
||||||
}
|
|
||||||
/// ## Metrics struct's constructor
|
|
||||||
impl Metrics {
|
|
||||||
pub fn new(cm: ContainerMetrics, prm: Vec<ProcessMetrics>) -> 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<String>,
|
|
||||||
}
|
|
||||||
/// ## Container struct's constructor
|
|
||||||
impl ContainerMetrics {
|
|
||||||
pub fn new(container_id : &str, cpu: f32, ram: f32, subsystems: Vec<String>,) -> 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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue