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:
Rob Bradford
2021-02-17 11:19:39 +00:00
parent ddbef7450d
commit 4822ed79e1
3 changed files with 25 additions and 0 deletions

View File

@@ -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();