mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-03 20:15:45 +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",
|
"credibility",
|
||||||
"dirs",
|
"dirs",
|
||||||
"epoll",
|
"epoll",
|
||||||
|
"event_monitor",
|
||||||
"hypervisor",
|
"hypervisor",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -17,6 +17,7 @@ anyhow = "1.0"
|
|||||||
api_client = { path = "api_client" }
|
api_client = { path = "api_client" }
|
||||||
clap = { version = "2.33.3", features = ["wrap_help"] }
|
clap = { version = "2.33.3", features = ["wrap_help"] }
|
||||||
epoll = ">=4.0.1"
|
epoll = ">=4.0.1"
|
||||||
|
event_monitor = { path = "event_monitor" }
|
||||||
hypervisor = { path = "hypervisor" }
|
hypervisor = { path = "hypervisor" }
|
||||||
libc = "0.2.86"
|
libc = "0.2.86"
|
||||||
log = { version = "0.4.14", features = ["std"] }
|
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)]
|
#[macro_use(crate_authors)]
|
||||||
extern crate clap;
|
extern crate clap;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate event_monitor;
|
||||||
|
|
||||||
use clap::{App, Arg, ArgGroup, ArgMatches};
|
use clap::{App, Arg, ArgGroup, ArgMatches};
|
||||||
use libc::EFD_NONBLOCK;
|
use libc::EFD_NONBLOCK;
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
@ -20,6 +23,8 @@ use signal_hook::{
|
|||||||
iterator::{exfiltrator::WithRawSiginfo, SignalsInfo},
|
iterator::{exfiltrator::WithRawSiginfo, SignalsInfo},
|
||||||
};
|
};
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::os::unix::io::FromRawFd;
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
@ -315,6 +320,14 @@ fn create_app<'a, 'b>(
|
|||||||
.default_value(&api_server_path)
|
.default_value(&api_server_path)
|
||||||
.group("vmm-config"),
|
.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(
|
||||||
Arg::with_name("restore")
|
Arg::with_name("restore")
|
||||||
.long("restore")
|
.long("restore")
|
||||||
@ -389,6 +402,8 @@ fn start_vmm(cmd_arguments: ArgMatches, api_socket_path: &str) -> Result<(), Err
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event!("vmm", "starting");
|
||||||
|
|
||||||
let hypervisor = hypervisor::new().map_err(Error::CreateHypervisor)?;
|
let hypervisor = hypervisor::new().map_err(Error::CreateHypervisor)?;
|
||||||
let vmm_thread = vmm::start_vmm_thread(
|
let vmm_thread = vmm::start_vmm_thread(
|
||||||
env!("CARGO_PKG_VERSION").to_string(),
|
env!("CARGO_PKG_VERSION").to_string(),
|
||||||
@ -501,6 +516,14 @@ fn main() {
|
|||||||
.expect("Missing argument: api-socket")
|
.expect("Missing argument: api-socket")
|
||||||
.to_string();
|
.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) {
|
if let Err(e) = start_vmm(cmd_arguments, &api_socket_path) {
|
||||||
eprintln!("{}", e);
|
eprintln!("{}", e);
|
||||||
std::fs::remove_file(api_socket_path).ok();
|
std::fs::remove_file(api_socket_path).ok();
|
||||||
|
Loading…
Reference in New Issue
Block a user