krata: implement event notifications

This commit is contained in:
Alex Zenla
2024-03-06 15:57:56 +00:00
parent e300fd924f
commit 7c8d38a0ca
8 changed files with 248 additions and 17 deletions

View File

@ -1,7 +1,10 @@
use anyhow::{anyhow, Result};
use clap::{Parser, Subcommand};
use env_logger::Env;
use krata::control::{DestroyGuestRequest, LaunchGuestRequest, ListGuestsRequest};
use krata::control::{
watch_events_reply::Event, DestroyGuestRequest, LaunchGuestRequest, ListGuestsRequest,
WatchEventsRequest,
};
use kratactl::{client::ControlClientProvider, console::StdioConsoleStream};
use tonic::Request;
@ -18,7 +21,6 @@ struct ControllerArgs {
#[derive(Subcommand, Debug)]
enum Commands {
List {},
Launch {
#[arg(short, long, default_value_t = 1)]
cpus: u32,
@ -41,6 +43,7 @@ enum Commands {
#[arg()]
guest: String,
},
Watch {},
}
#[tokio::main]
@ -116,6 +119,35 @@ async fn main() -> Result<()> {
println!("{}", table.to_string());
}
}
Commands::Watch {} => {
let response = client
.watch_events(Request::new(WatchEventsRequest {}))
.await?;
let mut stream = response.into_inner();
while let Some(reply) = stream.message().await? {
let Some(event) = reply.event else {
continue;
};
match event {
Event::GuestLaunched(launched) => {
println!("event=guest.launched guest={}", launched.guest_id);
}
Event::GuestDestroyed(destroyed) => {
println!("event=guest.destroyed guest={}", destroyed.guest_id);
}
Event::GuestExited(exited) => {
println!(
"event=guest.exited guest={} code={}",
exited.guest_id, exited.code
);
}
}
}
}
}
Ok(())
}