mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
main: Add "--monitor-fd" to write structured event data to
If supplied then structured JSON event data will be written to that file descriptor. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
23
src/main.rs
23
src/main.rs
@@ -11,6 +11,9 @@ extern crate vmm_sys_util;
|
||||
#[macro_use(crate_authors)]
|
||||
extern crate clap;
|
||||
|
||||
#[macro_use]
|
||||
extern crate event_monitor;
|
||||
|
||||
use clap::{App, Arg, ArgGroup, ArgMatches};
|
||||
use libc::EFD_NONBLOCK;
|
||||
use log::LevelFilter;
|
||||
@@ -20,6 +23,8 @@ use signal_hook::{
|
||||
iterator::{exfiltrator::WithRawSiginfo, SignalsInfo},
|
||||
};
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::os::unix::io::FromRawFd;
|
||||
use std::sync::mpsc::channel;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::thread;
|
||||
@@ -315,6 +320,14 @@ fn create_app<'a, 'b>(
|
||||
.default_value(&api_server_path)
|
||||
.group("vmm-config"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("monitor-fd")
|
||||
.long("monitor-fd")
|
||||
.help("File descriptor to report events on")
|
||||
.takes_value(true)
|
||||
.min_values(1)
|
||||
.group("vmm-config"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("restore")
|
||||
.long("restore")
|
||||
@@ -389,6 +402,8 @@ fn start_vmm(cmd_arguments: ArgMatches, api_socket_path: &str) -> Result<(), Err
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
event!("vmm", "starting");
|
||||
|
||||
let hypervisor = hypervisor::new().map_err(Error::CreateHypervisor)?;
|
||||
let vmm_thread = vmm::start_vmm_thread(
|
||||
env!("CARGO_PKG_VERSION").to_string(),
|
||||
@@ -501,6 +516,14 @@ fn main() {
|
||||
.expect("Missing argument: api-socket")
|
||||
.to_string();
|
||||
|
||||
if let Some(fd) = cmd_arguments
|
||||
.value_of("monitor-fd")
|
||||
.map(|s| s.parse::<i32>().expect("Expect integral file descriptor"))
|
||||
{
|
||||
let file = unsafe { File::from_raw_fd(fd) };
|
||||
event_monitor::set_monitor(file).expect("Expected setting monitor to succeed");
|
||||
}
|
||||
|
||||
if let Err(e) = start_vmm(cmd_arguments, &api_socket_path) {
|
||||
eprintln!("{}", e);
|
||||
std::fs::remove_file(api_socket_path).ok();
|
||||
|
||||
Reference in New Issue
Block a user