address telemetry log message locality (#736)

This commit is contained in:
bmc-msft
2021-03-26 18:45:36 -04:00
committed by GitHub
parent 5c149413a5
commit dc9b6fa1b0
4 changed files with 27 additions and 19 deletions

View File

@ -4,7 +4,7 @@
use super::afl; use super::afl;
use anyhow::{Error, Result}; use anyhow::{Error, Result};
use onefuzz::jitter::delay_with_jitter; use onefuzz::jitter::delay_with_jitter;
use onefuzz_telemetry::{track_event, Event::runtime_stats}; use onefuzz_telemetry::Event::runtime_stats;
use serde::Deserialize; use serde::Deserialize;
pub const STATS_DELAY: std::time::Duration = std::time::Duration::from_secs(30); pub const STATS_DELAY: std::time::Duration = std::time::Duration::from_secs(30);
@ -21,7 +21,7 @@ pub async fn monitor_stats(path: Option<String>, format: Option<StatsFormat>) ->
StatsFormat::AFL => afl::read_stats(&path).await, StatsFormat::AFL => afl::read_stats(&path).await,
}; };
if let Ok(stats) = stats { if let Ok(stats) = stats {
track_event(runtime_stats, stats); log_events!(runtime_stats; stats);
} }
delay_with_jitter(STATS_DELAY).await; delay_with_jitter(STATS_DELAY).await;
} }

View File

@ -492,23 +492,22 @@ pub fn set_property(entry: EventData) {
} }
} }
fn local_log_event(event: &Event, properties: &[EventData]) { pub fn format_events(events: &[EventData]) -> String {
let as_values = properties events
.iter() .iter()
.map(|x| x.as_values()) .map(|x| x.as_values())
.map(|(x, y)| format!("{}:{}", x, y)) .map(|(x, y)| format!("{}:{}", x, y))
.collect::<Vec<String>>() .collect::<Vec<String>>()
.join(" "); .join(" ")
log::log!(log::Level::Info, "{} {}", event.as_str(), as_values);
} }
pub fn track_event(event: Event, properties: Vec<EventData>) { pub fn track_event(event: &Event, properties: &[EventData]) {
use appinsights::telemetry::Telemetry; use appinsights::telemetry::Telemetry;
if let Some(client) = client(ClientType::Instance) { if let Some(client) = client(ClientType::Instance) {
let mut evt = appinsights::telemetry::EventTelemetry::new(event.as_str()); let mut evt = appinsights::telemetry::EventTelemetry::new(event.as_str());
let props = evt.properties_mut(); let props = evt.properties_mut();
for property in &properties { for property in properties {
let (name, val) = property.as_values(); let (name, val) = property.as_values();
props.insert(name.to_string(), val); props.insert(name.to_string(), val);
} }
@ -519,7 +518,7 @@ pub fn track_event(event: Event, properties: Vec<EventData>) {
let mut evt = appinsights::telemetry::EventTelemetry::new(event.as_str()); let mut evt = appinsights::telemetry::EventTelemetry::new(event.as_str());
let props = evt.properties_mut(); let props = evt.properties_mut();
for property in &properties { for property in properties {
if property.can_share_with_microsoft() { if property.can_share_with_microsoft() {
let (name, val) = property.as_values(); let (name, val) = property.as_values();
props.insert(name.to_string(), val); props.insert(name.to_string(), val);
@ -527,7 +526,6 @@ pub fn track_event(event: Event, properties: Vec<EventData>) {
} }
client.track(evt); client.track(evt);
} }
local_log_event(&event, &properties);
} }
pub fn to_log_level(level: &appinsights::telemetry::SeverityLevel) -> log::Level { pub fn to_log_level(level: &appinsights::telemetry::SeverityLevel) -> log::Level {
@ -540,18 +538,24 @@ pub fn to_log_level(level: &appinsights::telemetry::SeverityLevel) -> log::Level
} }
} }
pub fn should_log(level: &appinsights::telemetry::SeverityLevel) -> bool {
to_log_level(level) <= log::max_level()
}
pub fn log_message(level: appinsights::telemetry::SeverityLevel, msg: String) { pub fn log_message(level: appinsights::telemetry::SeverityLevel, msg: String) {
let log_level = to_log_level(&level);
log::log!(log_level, "{}", msg);
if let Some(client) = client(ClientType::Instance) { if let Some(client) = client(ClientType::Instance) {
client.track_trace(msg, level); client.track_trace(msg, level);
} }
} }
#[macro_export]
macro_rules! log_events {
($name: expr; $events: expr) => {{
onefuzz_telemetry::track_event(&$name, &$events);
log::info!(
"{} {}",
$name.as_str(),
onefuzz_telemetry::format_events(&$events)
);
}};
}
#[macro_export] #[macro_export]
macro_rules! event { macro_rules! event {
($name: expr ; $($k: path = $v: expr),*) => {{ ($name: expr ; $($k: path = $v: expr),*) => {{
@ -562,15 +566,17 @@ macro_rules! event {
})*; })*;
onefuzz_telemetry::track_event($name, events); log_events!($name; events);
}}; }};
} }
#[macro_export] #[macro_export]
macro_rules! log { macro_rules! log {
($level: expr, $($arg: tt)+) => {{ ($level: expr, $($arg: tt)+) => {{
if onefuzz_telemetry::should_log(&$level) { let log_level = onefuzz_telemetry::to_log_level(&$level);
if log_level <= log::max_level() {
let msg = format!("{}", format_args!($($arg)+)); let msg = format!("{}", format_args!($($arg)+));
log::log!(log_level, "{}", msg);
onefuzz_telemetry::log_message($level, msg.to_string()); onefuzz_telemetry::log_message($level, msg.to_string());
} }
}}; }};

View File

@ -1165,6 +1165,7 @@ dependencies = [
"clap", "clap",
"env_logger", "env_logger",
"futures", "futures",
"log",
"onefuzz-telemetry", "onefuzz-telemetry",
"reqwest", "reqwest",
"reqwest-retry", "reqwest-retry",

View File

@ -21,3 +21,4 @@ url = { version = "2.2", features = ["serde"] }
reqwest-retry = { path = "../agent/reqwest-retry"} reqwest-retry = { path = "../agent/reqwest-retry"}
onefuzz-telemetry = { path = "../agent/onefuzz-telemetry" } onefuzz-telemetry = { path = "../agent/onefuzz-telemetry" }
uuid = "0.8" uuid = "0.8"
log = "0.4"