Skip to content

Commit ca84ecd

Browse files
committed
fix: Log an error for known unit mismatches
1 parent 713183f commit ca84ecd

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

relay-server/src/metrics_extraction/transactions.rs

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -229,33 +229,36 @@ fn extract_universal_tags(
229229
tags
230230
}
231231

232-
/// Returns the unit of the provided metric. Defaults to None.
232+
/// Returns the unit of the provided metric.
233+
///
234+
/// For known measurements, this returns `Some(MetricUnit)`, which can also include
235+
/// `Some(MetricUnit::None)`. For unknown measurement names, this returns `None`.
233236
#[cfg(feature = "processing")]
234-
fn get_metric_measurement_unit(metric: &str) -> MetricUnit {
237+
fn get_metric_measurement_unit(metric: &str) -> Option<MetricUnit> {
235238
match metric {
236239
// Web
237-
"fcp" => MetricUnit::Duration(DurationUnit::MilliSecond),
238-
"lcp" => MetricUnit::Duration(DurationUnit::MilliSecond),
239-
"fid" => MetricUnit::Duration(DurationUnit::MilliSecond),
240-
"fp" => MetricUnit::Duration(DurationUnit::MilliSecond),
241-
"ttfb" => MetricUnit::Duration(DurationUnit::MilliSecond),
242-
"ttfb.requesttime" => MetricUnit::Duration(DurationUnit::MilliSecond),
243-
"cls" => MetricUnit::None,
240+
"fcp" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
241+
"lcp" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
242+
"fid" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
243+
"fp" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
244+
"ttfb" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
245+
"ttfb.requesttime" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
246+
"cls" => Some(MetricUnit::None),
244247

245248
// Mobile
246-
"app_start_cold" => MetricUnit::Duration(DurationUnit::MilliSecond),
247-
"app_start_warm" => MetricUnit::Duration(DurationUnit::MilliSecond),
248-
"frames_total" => MetricUnit::None,
249-
"frames_slow" => MetricUnit::None,
250-
"frames_frozen" => MetricUnit::None,
249+
"app_start_cold" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
250+
"app_start_warm" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
251+
"frames_total" => Some(MetricUnit::None),
252+
"frames_slow" => Some(MetricUnit::None),
253+
"frames_frozen" => Some(MetricUnit::None),
251254

252255
// React-Native
253-
"stall_count" => MetricUnit::None,
254-
"stall_total_time" => MetricUnit::Duration(DurationUnit::MilliSecond),
255-
"stall_longest_time" => MetricUnit::Duration(DurationUnit::MilliSecond),
256+
"stall_count" => Some(MetricUnit::None),
257+
"stall_total_time" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
258+
"stall_longest_time" => Some(MetricUnit::Duration(DurationUnit::MilliSecond)),
256259

257260
// Default
258-
_ => MetricUnit::None,
261+
_ => None,
259262
}
260263
}
261264

@@ -316,7 +319,7 @@ fn extract_transaction_metrics_inner(
316319

317320
// Measurements
318321
if let Some(measurements) = event.measurements.value() {
319-
for (measurement_name, annotated) in measurements.iter() {
322+
for (name, annotated) in measurements.iter() {
320323
let measurement = match annotated.value() {
321324
Some(m) => m,
322325
None => continue,
@@ -328,19 +331,22 @@ fn extract_transaction_metrics_inner(
328331
};
329332

330333
let mut tags_for_measurement = tags.clone();
331-
if let Some(rating) = get_measurement_rating(measurement_name, value) {
334+
if let Some(rating) = get_measurement_rating(name, value) {
332335
tags_for_measurement.insert("measurement_rating".to_owned(), rating);
333336
}
334337

335-
let unit = match measurement.unit.value() {
336-
Some(unit) => *unit,
337-
None => get_metric_measurement_unit(measurement_name),
338-
};
338+
let stated_unit = measurement.unit.value().copied();
339+
let default_unit = get_metric_measurement_unit(name);
340+
if let (Some(default), Some(stated)) = (default_unit, stated_unit) {
341+
if default != stated {
342+
relay_log::error!("unit mismatch on measurements.{}: {}", name, stated);
343+
}
344+
}
339345

340346
push_metric(Metric::new_mri(
341347
METRIC_NAMESPACE,
342-
format_args!("measurements.{}", measurement_name),
343-
unit,
348+
format_args!("measurements.{}", name),
349+
stated_unit.or(default_unit).unwrap_or_default(),
344350
MetricValue::Distribution(value),
345351
unix_timestamp,
346352
tags_for_measurement,

0 commit comments

Comments
 (0)