From a1bcaf93d1200d9e0f3e28b29967f02568cc5620 Mon Sep 17 00:00:00 2001 From: clerie Date: Sun, 21 Jul 2024 12:38:36 +0200 Subject: [PATCH] Escape metric label values --- src/main.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6c22a0e..28faec2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,6 +62,13 @@ async fn get_baeder_names() -> Result, String> { } +fn escape_metric_label_value(value: &String) -> String { + let value = value.replace(r#"\"#, r#"\\"#); + let value = value.replace("\n", r"\n"); + let value = value.replace(r#"""#, r#"\""#); + return value; +} + #[derive(Clone)] struct AppState { baedernames: HashMap, @@ -143,9 +150,13 @@ async fn route_metrics( let mut out = String::new(); for bad in trafficdata { + let badid = escape_metric_label_value(&bad.id); match state.baedernames.get(&bad.id) { - Some(name) => out.push_str(&format!("berlinerbaeder_occupation{{bad=\"{}\", badname=\"{}\"}} {}\n", bad.id, name, bad.counter.unwrap_or(-1))), - None => out.push_str(&format!("berlinerbaeder_occupation{{bad=\"{}\"}} {}\n", bad.id, bad.counter.unwrap_or(-1))), + Some(name) => { + let badname = escape_metric_label_value(name); + out.push_str(&format!("berlinerbaeder_occupation{{bad=\"{}\", badname=\"{}\"}} {}\n", badid, badname, bad.counter.unwrap_or(-1)))} + , + None => out.push_str(&format!("berlinerbaeder_occupation{{bad=\"{}\"}} {}\n", badid, bad.counter.unwrap_or(-1))), }; }