Include real OS info in metrics. (#10425)

calculated a hashed user ID from either auth user id or API key
Also correctly populates OS.

These will make our metrics more useful and powerful for analysis.
This commit is contained in:
iceweasel-oai
2026-02-05 06:30:31 -08:00
committed by GitHub
parent 040ecee715
commit f2ffc4e5d0
8 changed files with 88 additions and 32 deletions

View File

@@ -36,3 +36,46 @@ pub fn take_last_bytes_at_char_boundary(s: &str, maxb: usize) -> &str {
}
&s[start..]
}
/// Sanitize a tag value to comply with metric tag validation rules:
/// only ASCII alphanumeric, '.', '_', '-', and '/' are allowed.
pub fn sanitize_metric_tag_value(value: &str) -> String {
const MAX_LEN: usize = 256;
let sanitized: String = value
.chars()
.map(|ch| {
if ch.is_ascii_alphanumeric() || matches!(ch, '.' | '_' | '-' | '/') {
ch
} else {
'_'
}
})
.collect();
let trimmed = sanitized.trim_matches('_');
if trimmed.is_empty() || trimmed.chars().all(|ch| !ch.is_ascii_alphanumeric()) {
return "unspecified".to_string();
}
if trimmed.len() <= MAX_LEN {
trimmed.to_string()
} else {
trimmed[..MAX_LEN].to_string()
}
}
#[cfg(test)]
mod tests {
use super::sanitize_metric_tag_value;
use pretty_assertions::assert_eq;
#[test]
fn sanitize_metric_tag_value_trims_and_fills_unspecified() {
let msg = "///";
assert_eq!(sanitize_metric_tag_value(msg), "unspecified");
}
#[test]
fn sanitize_metric_tag_value_replaces_invalid_chars() {
let msg = "bad value!";
assert_eq!(sanitize_metric_tag_value(msg), "bad_value");
}
}