feat: implement metrics support

This commit is contained in:
Alex Zenla
2024-04-10 12:58:21 +00:00
parent 183b4ddf73
commit 9b47cd648d
13 changed files with 341 additions and 33 deletions

View File

@ -25,6 +25,7 @@ rtnetlink = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
sys-mount = { workspace = true }
sysinfo = { workspace = true }
tokio = { workspace = true }
walkdir = { workspace = true }

View File

@ -7,7 +7,7 @@ use std::env;
#[tokio::main]
async fn main() -> Result<()> {
env::set_var("RUST_BACKTRACE", "1");
env_logger::Builder::from_env(Env::default().default_filter_or("warn")).init();
env_logger::Builder::from_env(Env::default().default_filter_or("trace")).init();
if env::var("KRATA_UNSAFE_ALWAYS_ALLOW_INIT").unwrap_or("0".to_string()) != "1" {
let pid = std::process::id();
if pid > 3 {

View File

@ -8,11 +8,12 @@ use krata::idm::{
client::IdmClient,
protocol::{
idm_event::Event, idm_request::Request, idm_response::Response, IdmEvent, IdmExitEvent,
IdmPingResponse, IdmRequest,
IdmMetricsResponse, IdmPingResponse, IdmRequest,
},
};
use log::debug;
use nix::unistd::Pid;
use sysinfo::System;
use tokio::{select, sync::broadcast};
pub struct GuestBackground {
@ -80,10 +81,26 @@ impl GuestBackground {
async fn handle_idm_request(&mut self, packet: IdmRequest) -> Result<()> {
let id = packet.id;
if let Some(Request::Ping(_)) = packet.request {
self.idm
.respond(id, Response::Ping(IdmPingResponse {}))
.await?;
match packet.request {
Some(Request::Ping(_)) => {
self.idm
.respond(id, Response::Ping(IdmPingResponse {}))
.await?;
}
Some(Request::Metrics(_)) => {
let mut sys = System::new();
sys.refresh_memory();
let response = IdmMetricsResponse {
total_memory_bytes: sys.total_memory(),
used_memory_bytes: sys.used_memory(),
};
self.idm.respond(id, Response::Metrics(response)).await?;
}
None => {}
}
Ok(())
}