diff --git a/Cargo.lock b/Cargo.lock index a772367..b30b369 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -56,12 +56,11 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "metrics" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +checksum = "77b9e10a211c839210fd7f99954bda26e5f8e26ec686ad68da6a32df7c80e782" dependencies = [ "ahash", - "metrics-macros", "portable-atomic", ] @@ -74,17 +73,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "metrics-macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "once_cell" version = "1.17.1" diff --git a/Cargo.toml b/Cargo.toml index 419163b..a24fe61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,5 +13,5 @@ categories = ["observability", "operations"] [dependencies] cadence = "0.29" -metrics = "0.21" +metrics = "0.22" thiserror = "1.0" diff --git a/src/builder.rs b/src/builder.rs index ad6e82e..7972bae 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -41,7 +41,7 @@ pub enum StatsdError { #[error("Could not register the metrics recorder")] RecorderError { #[from] - source: SetRecorderError, + source: SetRecorderError, }, } @@ -136,8 +136,8 @@ impl StatsdBuilder { /// .build(Some("prefix")) /// .expect("Could not create StatsdRecorder"); /// - /// metrics::set_boxed_recorder(Box::new(recorder)); - /// metrics::counter!("counter.name",10); + /// metrics::set_global_recorder(recorder); + /// metrics::counter!("counter.name").increment(10); /// ``` /// will emit a counter metric name as `prefix.counter.name` pub fn build(self, prefix: Option<&str>) -> Result { @@ -279,6 +279,9 @@ mod tests { } } + static METADATA: metrics::Metadata = + metrics::Metadata::new(module_path!(), metrics::Level::INFO, Some(module_path!())); + #[test] #[should_panic] fn bad_host_name() { @@ -299,7 +302,7 @@ mod tests { fn counter() { let env = Environ::new(None); let key = Key::from_name("counter.name"); - let counter = env.recorder.register_counter(&key); + let counter = env.recorder.register_counter(&key, &METADATA); counter.increment(1); assert_eq!("counter.name:1|c", env.receive_on_server()); } @@ -310,7 +313,7 @@ mod tests { let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("counter.name", tags)); - let coutner = env.recorder.register_counter(&key); + let coutner = env.recorder.register_counter(&key, &METADATA); coutner.increment(10); assert_eq!("counter.name:10|c|#t1:v1,t2:v2", env.receive_on_server()); } @@ -319,7 +322,7 @@ mod tests { fn gauge() { let env = Environ::new(None); let key = Key::from_name("gauge.name"); - let gauge = env.recorder.register_gauge(&key); + let gauge = env.recorder.register_gauge(&key, &METADATA); gauge.set(50.25); assert_eq!("gauge.name:50.25|g", env.receive_on_server()); } @@ -329,7 +332,7 @@ mod tests { let env = Environ::new(None); let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("gauge.name", tags)); - let gauge = env.recorder.register_gauge(&key); + let gauge = env.recorder.register_gauge(&key, &METADATA); gauge.set(50.25); assert_eq!("gauge.name:50.25|g|#t1:v1,t2:v2", env.receive_on_server()); } @@ -338,7 +341,7 @@ mod tests { fn histogram() { let env = Environ::new(None); let key = Key::from_name("histogram.name"); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!("histogram.name:100|h", env.receive_on_server()); } @@ -347,7 +350,7 @@ mod tests { fn histogram_with_decimals() { let env = Environ::new(None); let key = Key::from_name("histogram.name"); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.52); assert_eq!("histogram.name:100.52|h", env.receive_on_server()); } @@ -357,7 +360,7 @@ mod tests { let env = Environ::new_histogram_is_distribution(); let key = Key::from_name("distribution.name"); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.52); assert_eq!("distribution.name:100.52|d", env.receive_on_server()); } @@ -368,7 +371,7 @@ mod tests { let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("histogram.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!("histogram.name:100|h|#t1:v1,t2:v2", env.receive_on_server()); } @@ -383,7 +386,7 @@ mod tests { ]; let key = Key::from(("distribution.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!( "distribution.name:100|d|#t1:v1,t2:v2", @@ -401,7 +404,7 @@ mod tests { ]; let key = Key::from(("distribution.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!( "blackbird.distribution.name:100|d|#t1:v1,t2:v2", @@ -415,7 +418,7 @@ mod tests { let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("histogram.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!( "blackbird.histogram.name:100|h|#t1:v1,t2:v2", @@ -433,7 +436,7 @@ mod tests { ]; let key = Key::from(("histogram.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); // metrics-rs reports the unit as seconds and we convert it to ms assert_eq!( @@ -448,7 +451,7 @@ mod tests { let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("histogram.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); assert_eq!("histogram.name:100|d|#t1:v1,t2:v2", env.receive_on_server()); } @@ -459,7 +462,7 @@ mod tests { let tags = vec![Label::new("t1", "v1"), Label::new("t2", "v2")]; let key = Key::from(("histogram.name", tags)); - let histogram = env.recorder.register_histogram(&key); + let histogram = env.recorder.register_histogram(&key, &METADATA); histogram.record(100.00); // metrics-rs reports the unit as seconds and we convert it to ms assert_eq!( @@ -472,7 +475,7 @@ mod tests { fn prefix() { let env = Environ::new(Some("koelbird")); let key = Key::from_name("counter.name"); - let counter = env.recorder.register_counter(&key); + let counter = env.recorder.register_counter(&key, &METADATA); counter.increment(1); assert_eq!("koelbird.counter.name:1|c", env.receive_on_server()); } @@ -491,7 +494,7 @@ mod tests { }; let key = Key::from_name("counter.name"); - let counter = env.recorder.register_counter(&key); + let counter = env.recorder.register_counter(&key, &METADATA); counter.increment(1); assert_eq!( diff --git a/src/lib.rs b/src/lib.rs index 96192e5..6501b80 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,19 +14,19 @@ //! .build(Some("prefix")) //! .expect("Could not create StatsdRecorder"); //! -//! metrics::set_boxed_recorder(Box::new(recorder)); +//! metrics::set_global_recorder(recorder); //! ``` //! //! You can then continue to use [`metrics`] as usual: //! //! ``` -//! metrics::increment_counter!("counter.name"); +//! metrics::counter!("counter.name").increment(1); //! ``` //! //! Labels are translated to datadog style tags: //! //!``` -//! metrics::gauge!("gauge.name", 100.0 , "tag" => "value"); +//! metrics::gauge!("gauge.name", "tag" => "value").set(100.0); //!``` //! will translate to `gauge.name:50.25|g|#tag:value` and should render appropriately in systems //! like Datadog. @@ -56,7 +56,7 @@ //! like to override it for a given metric you can still do so: //! //! ``` -//! metrics::histogram!("metric.name", 100.0, "histogram"=> "histogram","tag"=>"value") +//! metrics::histogram!("metric.name", "histogram"=> "histogram","tag"=>"value").record(100.0) //! ``` //! This will emit the usual histogram metric this `metric.name:100|h|#tag:value`. //! @@ -73,7 +73,7 @@ //! //! **Reporting distributions:** //! ``` -//! metrics::histogram!("metric.name", 100.0, "histogram"=>"distribution", "tag"=>"value") +//! metrics::histogram!("metric.name", "histogram"=>"distribution", "tag"=>"value").record(100.0) //! ``` //! This will emit a metric like this: `metric.name:100|d|#tag:value`, note the metric type has //! changed from `h` to `d`. @@ -84,7 +84,7 @@ //! //! **Reporting timers:** //! ``` -//! metrics::histogram!("metric.name", 100.0, "histogram"=>"timer", "tag"=>"value") +//! metrics::histogram!("metric.name", "histogram"=>"timer", "tag"=>"value").record(100.0) //! ``` //! This will emit a metric like this: `metric.name:100|ms|#tag:value`, note the metric type has //! changed from `h` to `ms`. @@ -104,14 +104,14 @@ //! .build(Some("prefix")) //! .expect("Could not create StatsdRecorder"); //! -//! metrics::set_boxed_recorder(Box::new(recorder)); +//! metrics::set_global_recorder(recorder); //!``` //! //! Once the exporter is marked this way then all the histograms will be reported as distributions //! by default unless labeled differently. For example following statement: //! //! ``` -//! metrics::histogram!("metric.name", 100.0, "tag"=>"value") +//! metrics::histogram!("metric.name", "tag"=>"value").record(100.0) //! ``` //! This will emit a metric like this: `metric.name:100|d|#tag:value`, note the metric type has //! emitted here is `d` and not `h`. diff --git a/src/recorder.rs b/src/recorder.rs index bc40bbb..9057fd8 100644 --- a/src/recorder.rs +++ b/src/recorder.rs @@ -5,7 +5,7 @@ use cadence::{Counted, Distributed, Gauged, Histogrammed, MetricBuilder, StatsdC use metrics::{Counter, CounterFn, SharedString}; use metrics::{Gauge, GaugeFn}; use metrics::{Histogram, HistogramFn}; -use metrics::{Key, KeyName, Label, Recorder, Unit}; +use metrics::{Key, KeyName, Label, Metadata, Recorder, Unit}; use crate::types::HistogramType; @@ -42,7 +42,7 @@ impl Recorder for StatsdRecorder { unimplemented!("statsd recording does not support descriptions.") } - fn register_counter(&self, key: &Key) -> Counter { + fn register_counter(&self, key: &Key, _metadata: &Metadata<'_>) -> Counter { Counter::from_arc(Arc::new(Handle::new( key.clone(), self.statsd.clone(), @@ -50,7 +50,7 @@ impl Recorder for StatsdRecorder { ))) } - fn register_gauge(&self, key: &Key) -> Gauge { + fn register_gauge(&self, key: &Key, _metadata: &Metadata<'_>) -> Gauge { Gauge::from_arc(Arc::new(Handle::new( key.clone(), self.statsd.clone(), @@ -58,7 +58,7 @@ impl Recorder for StatsdRecorder { ))) } - fn register_histogram(&self, key: &Key) -> Histogram { + fn register_histogram(&self, key: &Key, _metadata: &Metadata<'_>) -> Histogram { Histogram::from_arc(Arc::new(Handle::new( key.clone(), self.statsd.clone(),