mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-02-21 19:02:30 +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:
parent
ddbef7450d
commit
4822ed79e1
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -222,6 +222,7 @@ dependencies = [
|
||||
"credibility",
|
||||
"dirs",
|
||||
"epoll",
|
||||
"event_monitor",
|
||||
"hypervisor",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
|
@ -17,6 +17,7 @@ anyhow = "1.0"
|
||||
api_client = { path = "api_client" }
|
||||
clap = { version = "2.33.3", features = ["wrap_help"] }
|
||||
epoll = ">=4.0.1"
|
||||
event_monitor = { path = "event_monitor" }
|
||||
hypervisor = { path = "hypervisor" }
|
||||
libc = "0.2.86"
|
||||
log = { version = "0.4.14", features = ["std"] }
|
||||
|
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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user