mirror of
https://github.com/csehviktor/status-monitor.git
synced 2025-08-08 18:06:14 +02:00
improve agent + config
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use common::metrics::{CPU, Disk, Memory, Metrics, Network, SystemInfo};
|
use common::metrics::{Disk, Memory, Metrics, Network, SystemInfo, CPU};
|
||||||
use sysinfo::{Disks, Networks, System};
|
use sysinfo::{Disks, Networks, System};
|
||||||
|
|
||||||
pub struct Collector {
|
pub struct Collector {
|
||||||
@@ -19,8 +19,7 @@ impl Collector {
|
|||||||
pub fn collect_all(&mut self) -> Metrics {
|
pub fn collect_all(&mut self) -> Metrics {
|
||||||
let system_info = self.collect_sysinfo();
|
let system_info = self.collect_sysinfo();
|
||||||
|
|
||||||
self.sys.refresh_cpu_usage();
|
self.sys.refresh_all();
|
||||||
self.sys.refresh_memory();
|
|
||||||
self.networks.refresh(true);
|
self.networks.refresh(true);
|
||||||
|
|
||||||
let cpu = self.collect_cpu();
|
let cpu = self.collect_cpu();
|
||||||
@@ -28,27 +27,23 @@ impl Collector {
|
|||||||
let memory = self.collect_memory();
|
let memory = self.collect_memory();
|
||||||
let network = self.collect_network();
|
let network = self.collect_network();
|
||||||
|
|
||||||
let metrics = Metrics {
|
Metrics {
|
||||||
system_info,
|
system_info,
|
||||||
cpu,
|
cpu,
|
||||||
disk,
|
disk,
|
||||||
memory,
|
memory,
|
||||||
network,
|
network,
|
||||||
};
|
}
|
||||||
|
|
||||||
metrics
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_sysinfo(&self) -> SystemInfo {
|
fn collect_sysinfo(&self) -> SystemInfo {
|
||||||
let system_info = SystemInfo {
|
SystemInfo {
|
||||||
uptime: System::uptime(),
|
uptime: System::uptime(),
|
||||||
host: System::host_name(),
|
host: System::host_name(),
|
||||||
name: System::name(),
|
name: System::name(),
|
||||||
kernel: System::kernel_version(),
|
kernel: System::kernel_version(),
|
||||||
os_version: System::os_version(),
|
os_version: System::os_version(),
|
||||||
};
|
}
|
||||||
|
|
||||||
system_info
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_cpu(&self) -> CPU {
|
fn collect_cpu(&self) -> CPU {
|
||||||
@@ -65,31 +60,21 @@ impl Collector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn collect_disk(&self) -> Disk {
|
fn collect_disk(&self) -> Disk {
|
||||||
let disk = self
|
let disk = self.disks.iter().max_by_key(|disk| disk.total_space()).unwrap();
|
||||||
.disks
|
|
||||||
.iter()
|
|
||||||
.max_by_key(|disk| disk.total_space())
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let total = disk.total_space();
|
|
||||||
let free = disk.available_space();
|
|
||||||
|
|
||||||
Disk {
|
Disk {
|
||||||
used: total - free,
|
free: disk.available_space(),
|
||||||
free,
|
total: disk.total_space(),
|
||||||
total
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_memory(&self) -> Memory {
|
fn collect_memory(&self) -> Memory {
|
||||||
let memory_metrics = Memory {
|
Memory {
|
||||||
used: self.sys.used_memory(),
|
used: self.sys.used_memory(),
|
||||||
total: self.sys.total_memory(),
|
total: self.sys.total_memory(),
|
||||||
swap_used: self.sys.used_swap(),
|
swap_used: self.sys.used_swap(),
|
||||||
swap_total: self.sys.total_swap(),
|
swap_total: self.sys.total_swap(),
|
||||||
};
|
}
|
||||||
|
|
||||||
memory_metrics
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_network(&self) -> Network {
|
fn collect_network(&self) -> Network {
|
||||||
|
|||||||
@@ -1,19 +1,23 @@
|
|||||||
|
use config::{load_config, Config};
|
||||||
|
use mqtt::MqttHandle;
|
||||||
use collector::Collector;
|
use collector::Collector;
|
||||||
|
use std::time::Duration;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time;
|
|
||||||
|
|
||||||
pub mod collector;
|
pub mod collector;
|
||||||
|
|
||||||
const REFRESH_INTERVAL: u64 = 3000;
|
#[tokio::main]
|
||||||
|
async fn main() -> anyhow::Result<()> {
|
||||||
|
let cfg = load_config()?;
|
||||||
|
let cfg: &'static mut Config = Box::leak(Box::new(cfg));
|
||||||
|
|
||||||
fn main() {
|
let client = MqttHandle::create(&mut cfg.mqtt).await;
|
||||||
let mut collector = Collector::new();
|
let mut collector = Collector::new();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let metrics = collector.collect_all();
|
let metrics = collector.collect_all();
|
||||||
|
client.send_metrics(metrics).await?;
|
||||||
|
|
||||||
println!("Metrics: {:?}", metrics);
|
thread::sleep(Duration::from_secs(cfg.send_interval_seconds));
|
||||||
|
|
||||||
thread::sleep(time::Duration::from_millis(REFRESH_INTERVAL));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user