Skip to content

Commit e2188ff

Browse files
committed
update add a Level label to the sentry metrics
1 parent d19e279 commit e2188ff

File tree

4 files changed

+55
-16
lines changed

4 files changed

+55
-16
lines changed

foundations/src/alerts/metrics.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Panic and sentry event related metrics.
22
3+
use super::Level;
34
use crate::telemetry::metrics::Counter;
45

56
/// Panic metrics.
@@ -13,5 +14,5 @@ pub mod panics {
1314
#[crate::telemetry::metrics::metrics(crate_path = "crate", unprefixed)]
1415
pub mod sentry_events {
1516
/// Total number of sentry events observed.
16-
pub fn total() -> Counter;
17+
pub fn total(level: Level) -> Counter;
1718
}

foundations/src/alerts/mod.rs

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,44 @@ pub use self::panic::{panic_hook, PanicHookBuilder};
6262
#[cfg(feature = "sentry")]
6363
pub use self::sentry::{sentry_hook, SentryHookBuilder};
6464

65+
/// Sentry event severity level for metrics labeling.
66+
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Serialize)]
67+
#[serde(rename_all = "lowercase")]
68+
#[allow(missing_docs)]
69+
pub enum Level {
70+
Debug,
71+
Info,
72+
Warning,
73+
Error,
74+
Fatal,
75+
}
76+
77+
#[cfg(feature = "sentry")]
78+
impl From<sentry_core::Level> for Level {
79+
fn from(level: sentry_core::Level) -> Self {
80+
match level {
81+
sentry_core::Level::Debug => Level::Debug,
82+
sentry_core::Level::Info => Level::Info,
83+
sentry_core::Level::Warning => Level::Warning,
84+
sentry_core::Level::Error => Level::Error,
85+
sentry_core::Level::Fatal => Level::Fatal,
86+
}
87+
}
88+
}
89+
90+
#[cfg(feature = "sentry")]
91+
impl From<Level> for sentry_core::Level {
92+
fn from(level: Level) -> Self {
93+
match level {
94+
Level::Debug => sentry_core::Level::Debug,
95+
Level::Info => sentry_core::Level::Info,
96+
Level::Warning => sentry_core::Level::Warning,
97+
Level::Error => sentry_core::Level::Error,
98+
Level::Fatal => sentry_core::Level::Fatal,
99+
}
100+
}
101+
}
102+
65103
/// Trait for recording sentry and panic hook metrics.
66104
///
67105
/// Implement this trait to use a custom metrics registry instead of
@@ -71,7 +109,7 @@ pub trait FatalErrorRegistry: Send + Sync {
71109
fn inc_panics_total(&self, by: u64);
72110

73111
/// Increment the sentry events counter.
74-
fn inc_sentry_events_total(&self, by: u64);
112+
fn inc_sentry_events_total(&self, level: Level, by: u64);
75113
}
76114

77115
#[doc(hidden)]
@@ -88,8 +126,8 @@ pub mod _private {
88126
super::metrics::panics::total().inc_by(by);
89127
}
90128

91-
fn inc_sentry_events_total(&self, by: u64) {
92-
super::metrics::sentry_events::total().inc_by(by);
129+
fn inc_sentry_events_total(&self, level: super::Level, by: u64) {
130+
super::metrics::sentry_events::total(level).inc_by(by);
93131
}
94132
}
95133

foundations/src/alerts/sentry.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ impl<R: FatalErrorRegistry + Send + Sync + 'static> SentryHookBuilder<HasRegistr
7373
let previous = options.before_send.take();
7474

7575
options.before_send = Some(Arc::new(move |event| {
76-
registry.inc_sentry_events_total(1);
76+
registry.inc_sentry_events_total(event.level.into(), 1);
7777

7878
// Call previous hook if any
7979
if let Some(ref prev) = previous {

foundations/tests/sentry_hook.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mod with_metrics {
1616
};
1717

1818
use super::{simulate_sentry_event, TEST_DSN};
19-
use foundations::alerts::metrics;
19+
use foundations::alerts::{metrics, Level};
2020

2121
#[test]
2222
fn sentry_hook_increments_metric_on_event() {
@@ -26,7 +26,7 @@ mod with_metrics {
2626
let _guard = sentry::init((TEST_DSN, options));
2727

2828
simulate_sentry_event();
29-
assert_eq!(metrics::sentry_events::total().get(), 1);
29+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 1);
3030
}
3131

3232
#[test]
@@ -40,7 +40,7 @@ mod with_metrics {
4040
simulate_sentry_event();
4141
simulate_sentry_event();
4242

43-
assert_eq!(metrics::sentry_events::total().get(), 3);
43+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 3);
4444
}
4545

4646
#[test]
@@ -67,7 +67,7 @@ mod with_metrics {
6767

6868
// Both hooks should have been called
6969
assert_eq!(previous_hook_count.load(Ordering::Relaxed), 2);
70-
assert_eq!(metrics::sentry_events::total().get(), 2);
70+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 2);
7171
}
7272

7373
#[test]
@@ -86,7 +86,7 @@ mod with_metrics {
8686
handle1.join().unwrap();
8787
handle2.join().unwrap();
8888

89-
assert_eq!(metrics::sentry_events::total().get(), 3);
89+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 3);
9090
}
9191

9292
#[test]
@@ -113,7 +113,7 @@ mod with_metrics {
113113
handle2.await.unwrap();
114114
});
115115

116-
assert_eq!(metrics::sentry_events::total().get(), 3);
116+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 3);
117117
}
118118

119119
#[test]
@@ -140,7 +140,7 @@ mod with_metrics {
140140
impl FatalErrorRegistry for TestRegistry {
141141
fn inc_panics_total(&self, _by: u64) {}
142142

143-
fn inc_sentry_events_total(&self, by: u64) {
143+
fn inc_sentry_events_total(&self, _level: Level, by: u64) {
144144
self.sentry_events.fetch_add(by, Ordering::Relaxed);
145145
}
146146
}
@@ -158,7 +158,7 @@ mod with_metrics {
158158

159159
// Custom registry should be used, not the default metrics
160160
assert_eq!(registry.sentry_events(), 1);
161-
assert_eq!(metrics::sentry_events::total().get(), 0);
161+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 0);
162162
}
163163

164164
#[test]
@@ -185,13 +185,13 @@ mod with_metrics {
185185
});
186186

187187
// The hook should have been called via the cloned options
188-
assert_eq!(metrics::sentry_events::total().get(), 1);
188+
assert_eq!(metrics::sentry_events::total(Level::Error).get(), 1);
189189
}
190190
}
191191

192192
#[cfg(not(feature = "metrics"))]
193193
mod no_metrics {
194-
use foundations::alerts::FatalErrorRegistry;
194+
use foundations::alerts::{FatalErrorRegistry, Level};
195195
use std::sync::{
196196
atomic::{AtomicU64, Ordering},
197197
Arc,
@@ -223,7 +223,7 @@ mod no_metrics {
223223
self.panics.fetch_add(by, Ordering::Relaxed);
224224
}
225225

226-
fn inc_sentry_events_total(&self, by: u64) {
226+
fn inc_sentry_events_total(&self, _level: Level, by: u64) {
227227
self.sentry_events.fetch_add(by, Ordering::Relaxed);
228228
}
229229
}

0 commit comments

Comments
 (0)