fix(obs): validate numeric env settings (#4474)

Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
houseme
2026-07-08 18:42:09 +08:00
committed by GitHub
parent 757f9b3b7b
commit 3ddade24f2
5 changed files with 189 additions and 14 deletions
+27 -1
View File
@@ -424,7 +424,7 @@ fn build_meter_provider(
.build()
.map_err(|e| TelemetryError::BuildMetricExporter(e.to_string()))?;
let meter_interval = config.meter_interval.unwrap_or(METER_INTERVAL);
let meter_interval = resolve_meter_interval(config);
let (provider, recorder) = Recorder::builder(service_name.to_string())
.with_meter_provider(|b: opentelemetry_sdk::metrics::MeterProviderBuilder| {
@@ -608,6 +608,22 @@ fn create_periodic_reader(interval: u64) -> PeriodicReader<opentelemetry_stdout:
.build()
}
fn resolve_meter_interval(config: &OtelConfig) -> u64 {
match config.meter_interval {
Some(0) => {
warn!(
result = "invalid_meter_interval",
configured_seconds = 0_u64,
fallback_seconds = METER_INTERVAL,
"Metrics export interval is invalid; using default interval"
);
METER_INTERVAL
}
Some(interval) => interval,
None => METER_INTERVAL,
}
}
fn resolve_signal_headers(common_headers: Option<&str>, signal_headers: Option<&str>) -> HashMap<String, String> {
let mut headers = HashMap::new();
if let Some(raw_headers) = common_headers {
@@ -698,6 +714,16 @@ mod tests {
assert_eq!(resolve_signal_timeout(None, Some(0)), None);
}
#[test]
fn test_resolve_meter_interval_rejects_zero() {
let config = OtelConfig {
meter_interval: Some(0),
..OtelConfig::default()
};
assert_eq!(resolve_meter_interval(&config), METER_INTERVAL);
}
#[test]
fn test_get_object_duration_histogram_metric_match_is_scoped() {
assert!(is_get_object_duration_histogram_metric("rustfs_io_get_object_stage_duration_seconds"));