rpki/src/progress_log.rs

48 lines
1.3 KiB
Rust

use serde_json::Value;
use time::format_description::well_known::Rfc3339;
fn progress_enabled() -> bool {
std::env::var("RPKI_PROGRESS_LOG")
.ok()
.map(|v| matches!(v.as_str(), "1" | "true" | "TRUE" | "yes" | "YES"))
.unwrap_or(false)
}
pub fn slow_threshold_secs() -> f64 {
std::env::var("RPKI_PROGRESS_SLOW_SECS")
.ok()
.and_then(|v| v.parse::<f64>().ok())
.filter(|v| *v >= 0.0)
.unwrap_or(30.0)
}
pub fn stage_fresh_slow_threshold_ms() -> u64 {
std::env::var("RPKI_PROGRESS_STAGE_FRESH_SLOW_MS")
.ok()
.and_then(|v| v.parse::<u64>().ok())
.unwrap_or(1_000)
}
pub fn emit(kind: &str, payload: Value) {
if !progress_enabled() {
return;
}
let ts = time::OffsetDateTime::now_utc()
.format(&Rfc3339)
.unwrap_or_else(|_| "1970-01-01T00:00:00Z".to_string());
let mut map = serde_json::Map::new();
map.insert("ts".to_string(), Value::String(ts));
map.insert("kind".to_string(), Value::String(kind.to_string()));
match payload {
Value::Object(obj) => {
for (k, v) in obj {
map.insert(k, v);
}
}
other => {
map.insert("value".to_string(), other);
}
}
eprintln!("[progress] {}", Value::Object(map));
}