| // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. |
| |
| /// Create labels with specified name-value pairs. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use std::collections::HashMap; |
| /// # use prometheus::labels; |
| /// # fn main() { |
| /// let labels = labels!{ |
| /// "test" => "hello", |
| /// "foo" => "bar", |
| /// }; |
| /// assert_eq!(labels.len(), 2); |
| /// assert!(labels.get("test").is_some()); |
| /// assert_eq!(*(labels.get("test").unwrap()), "hello"); |
| /// |
| /// let labels: HashMap<&str, &str> = labels!{}; |
| /// assert!(labels.is_empty()); |
| /// # } |
| /// ``` |
| #[macro_export] |
| macro_rules! labels { |
| ( $( $ KEY : expr => $ VALUE : expr ),* $(,)? ) => { |
| { |
| use std::collections::HashMap; |
| |
| let mut lbs = HashMap::new(); |
| $( |
| lbs.insert($KEY, $VALUE); |
| )* |
| |
| lbs |
| } |
| }; |
| } |
| |
| #[test] |
| fn test_labels_without_trailing_comma() { |
| let labels = labels! { |
| "test" => "hello", |
| "foo" => "bar" |
| }; |
| assert_eq!(labels.len(), 2); |
| assert!(labels.get("test").is_some()); |
| assert_eq!(*(labels.get("test").unwrap()), "hello"); |
| } |
| |
| /// Create an [`Opts`][crate::Opts]. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{labels, opts}; |
| /// # fn main() { |
| /// let name = "test_opts"; |
| /// let help = "test opts help"; |
| /// |
| /// let opts = opts!(name, help); |
| /// assert_eq!(opts.name, name); |
| /// assert_eq!(opts.help, help); |
| /// |
| /// let opts = opts!(name, help, labels!{"test" => "hello", "foo" => "bar",}); |
| /// assert_eq!(opts.const_labels.len(), 2); |
| /// assert!(opts.const_labels.get("foo").is_some()); |
| /// assert_eq!(opts.const_labels.get("foo").unwrap(), "bar"); |
| /// |
| /// let opts = opts!(name, |
| /// help, |
| /// labels!{"test" => "hello", "foo" => "bar",}, |
| /// labels!{"ans" => "42",}); |
| /// assert_eq!(opts.const_labels.len(), 3); |
| /// assert!(opts.const_labels.get("ans").is_some()); |
| /// assert_eq!(opts.const_labels.get("ans").unwrap(), "42"); |
| /// # } |
| /// ``` |
| #[macro_export] |
| macro_rules! opts { |
| ( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * $ ( , ) ? ) => { |
| { |
| use std::collections::HashMap; |
| |
| let opts = $crate::Opts::new($NAME, $HELP); |
| let lbs = HashMap::<String, String>::new(); |
| $( |
| let mut lbs = lbs; |
| lbs.extend($CONST_LABELS.iter().map(|(k, v)| ((*k).into(), (*v).into()))); |
| )* |
| |
| opts.const_labels(lbs) |
| } |
| } |
| } |
| |
| #[test] |
| fn test_opts_trailing_comma() { |
| let name = "test_opts"; |
| let help = "test opts help"; |
| |
| let opts = opts!(name, help,); |
| assert_eq!(opts.name, name); |
| assert_eq!(opts.help, help); |
| |
| let opts = opts!(name, help, labels! {"test" => "hello", "foo" => "bar",},); |
| assert_eq!(opts.const_labels.len(), 2); |
| assert!(opts.const_labels.get("foo").is_some()); |
| assert_eq!(opts.const_labels.get("foo").unwrap(), "bar"); |
| |
| let opts = opts!( |
| name, |
| help, |
| labels! {"test" => "hello", "foo" => "bar",}, |
| labels! {"ans" => "42",}, |
| ); |
| assert_eq!(opts.const_labels.len(), 3); |
| assert!(opts.const_labels.get("ans").is_some()); |
| assert_eq!(opts.const_labels.get("ans").unwrap(), "42"); |
| } |
| |
| /// Create a [`HistogramOpts`][crate::HistogramOpts]. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::linear_buckets; |
| /// # use prometheus::{histogram_opts, labels}; |
| /// # fn main() { |
| /// let name = "test_histogram_opts"; |
| /// let help = "test opts help"; |
| /// |
| /// let opts = histogram_opts!(name, help); |
| /// assert_eq!(opts.common_opts.name, name); |
| /// assert_eq!(opts.common_opts.help, help); |
| /// |
| /// let opts = histogram_opts!(name, help, linear_buckets(1.0, 0.5, 4).unwrap()); |
| /// assert_eq!(opts.common_opts.name, name); |
| /// assert_eq!(opts.common_opts.help, help); |
| /// assert_eq!(opts.buckets.len(), 4); |
| /// |
| /// let opts = histogram_opts!(name, |
| /// help, |
| /// vec![1.0, 2.0], |
| /// labels!{"key".to_string() => "value".to_string(),}); |
| /// assert_eq!(opts.common_opts.name, name); |
| /// assert_eq!(opts.common_opts.help, help); |
| /// assert_eq!(opts.buckets.len(), 2); |
| /// assert!(opts.common_opts.const_labels.get("key").is_some()); |
| /// assert_eq!(opts.common_opts.const_labels.get("key").unwrap(), "value"); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! histogram_opts { |
| ($NAME:expr, $HELP:expr $(,)?) => {{ |
| $crate::HistogramOpts::new($NAME, $HELP) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $BUCKETS:expr $(,)?) => {{ |
| let hopts = histogram_opts!($NAME, $HELP); |
| hopts.buckets($BUCKETS) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $BUCKETS:expr, $CONST_LABELS:expr $(,)?) => {{ |
| let hopts = histogram_opts!($NAME, $HELP, $BUCKETS); |
| hopts.const_labels($CONST_LABELS) |
| }}; |
| } |
| |
| #[test] |
| fn test_histogram_opts_trailing_comma() { |
| use crate::linear_buckets; |
| |
| let name = "test_histogram_opts"; |
| let help = "test opts help"; |
| |
| let opts = histogram_opts!(name, help,); |
| assert_eq!(opts.common_opts.name, name); |
| assert_eq!(opts.common_opts.help, help); |
| |
| let opts = histogram_opts!(name, help, linear_buckets(1.0, 0.5, 4).unwrap(),); |
| assert_eq!(opts.common_opts.name, name); |
| assert_eq!(opts.common_opts.help, help); |
| assert_eq!(opts.buckets.len(), 4); |
| |
| let opts = histogram_opts!( |
| name, |
| help, |
| vec![1.0, 2.0], |
| labels! {"key".to_string() => "value".to_string(),}, |
| ); |
| assert_eq!(opts.common_opts.name, name); |
| assert_eq!(opts.common_opts.help, help); |
| assert_eq!(opts.buckets.len(), 2); |
| assert!(opts.common_opts.const_labels.get("key").is_some()); |
| assert_eq!(opts.common_opts.const_labels.get("key").unwrap(), "value"); |
| } |
| |
| /// Create a [`Counter`][crate::Counter] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{opts, register_counter}; |
| /// # fn main() { |
| /// let opts = opts!("test_macro_counter_1", "help"); |
| /// let res1 = register_counter!(opts); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_counter!("test_macro_counter_2", "help"); |
| /// assert!(res2.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_counter { |
| (@of_type $TYPE:ident, $OPTS:expr) => {{ |
| let counter = $crate::$TYPE::with_opts($OPTS).unwrap(); |
| $crate::register(Box::new(counter.clone())).map(|_| counter) |
| }}; |
| |
| ($OPTS:expr $(,)?) => {{ |
| register_counter!(@of_type Counter, $OPTS) |
| }}; |
| |
| ($NAME:expr, $HELP:expr $(,)?) => {{ |
| register_counter!(opts!($NAME, $HELP)) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_counter_trailing_comma() { |
| let opts = opts!("test_macro_counter_1", "help",); |
| let res1 = register_counter!(opts,); |
| assert!(res1.is_ok()); |
| |
| let res2 = register_counter!("test_macro_counter_2", "help",); |
| assert!(res2.is_ok()); |
| } |
| |
| /// Create a [`Counter`][crate::Counter] and registers to a custom registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_counter_with_registry, opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// let opts = opts!("test_macro_counter_1", "help"); |
| /// let res1 = register_counter_with_registry!(opts, custom_registry); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_counter_with_registry!("test_macro_counter_2", "help", custom_registry); |
| /// assert!(res2.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_counter_with_registry { |
| (@of_type $TYPE: ident, $OPTS:expr, $REGISTRY:expr) => {{ |
| let counter = $crate::$TYPE::with_opts($OPTS).unwrap(); |
| $REGISTRY.register(Box::new(counter.clone())).map(|_| counter) |
| }}; |
| |
| ($OPTS:expr, $REGISTRY:expr $(,)?) => {{ |
| register_counter_with_registry!(@of_type Counter, $OPTS, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $REGISTRY:expr $(,)?) => {{ |
| register_counter_with_registry!(opts!($NAME, $HELP), $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_counter_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| let opts = opts!("test_macro_counter_1", "help",); |
| let res1 = register_counter_with_registry!(opts, custom_registry,); |
| assert!(res1.is_ok()); |
| |
| let res2 = register_counter_with_registry!("test_macro_counter_2", "help", custom_registry,); |
| assert!(res2.is_ok()); |
| } |
| |
| /// Create an [`IntCounter`][crate::IntCounter] and registers to default registry. |
| /// |
| /// View docs of `register_counter` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_counter { |
| ($OPTS:expr $(,)?) => {{ |
| register_counter!(@of_type IntCounter, $OPTS) |
| }}; |
| |
| ($NAME:expr, $HELP:expr $(,)?) => {{ |
| register_int_counter!(opts!($NAME, $HELP)) |
| }}; |
| } |
| |
| /// Create an [`IntCounter`][crate::IntCounter] and registers to a custom registry. |
| /// |
| /// View docs of `register_counter_with_registry` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_counter_with_registry { |
| ($OPTS:expr, $REGISTRY:expr $(,)?) => {{ |
| register_counter_with_registry!(@of_type IntCounter, $OPTS, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $REGISTRY:expr $(,)?) => {{ |
| register_int_counter_with_registry!(opts!($NAME, $HELP), $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_int_counter() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let opts = opts!("test_opts_int_counter_1", "help"); |
| let res = register_int_counter!(opts); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter!("test_opts_int_counter_2", "help"); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_counter_3", "help",); |
| let res = register_int_counter!(opts,); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter!("test_opts_int_counter_4", "help",); |
| assert!(res.is_ok()); |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_opts_int_counter_1", "help"); |
| let res = register_int_counter_with_registry!(opts, custom_registry); |
| assert!(res.is_ok()); |
| |
| let res = |
| register_int_counter_with_registry!("test_opts_int_counter_2", "help", custom_registry); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_counter_3", "help"); |
| let res = register_int_counter_with_registry!(opts, custom_registry,); |
| assert!(res.is_ok()); |
| |
| let res = |
| register_int_counter_with_registry!("test_opts_int_counter_4", "help", custom_registry,); |
| assert!(res.is_ok()); |
| } |
| |
| #[macro_export] |
| #[doc(hidden)] |
| macro_rules! __register_counter_vec { |
| ($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr) => {{ |
| let counter_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap(); |
| $crate::register(Box::new(counter_vec.clone())).map(|_| counter_vec) |
| }}; |
| |
| ($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr) => {{ |
| let counter_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap(); |
| $REGISTRY |
| .register(Box::new(counter_vec.clone())) |
| .map(|_| counter_vec) |
| }}; |
| } |
| |
| /// Create a [`CounterVec`][crate::CounterVec] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{opts, register_counter_vec}; |
| /// # fn main() { |
| /// let opts = opts!("test_macro_counter_vec_1", "help"); |
| /// let counter_vec = register_counter_vec!(opts, &["a", "b"]); |
| /// assert!(counter_vec.is_ok()); |
| /// |
| /// let counter_vec = register_counter_vec!("test_macro_counter_vec_2", "help", &["a", "b"]); |
| /// assert!(counter_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_counter_vec { |
| ($OPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| __register_counter_vec!(CounterVec, $OPTS, $LABELS_NAMES) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| register_counter_vec!(opts!($NAME, $HELP), $LABELS_NAMES) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_counter_vec_trailing_comma() { |
| let opts = opts!("test_macro_counter_vec_1", "help",); |
| let counter_vec = register_counter_vec!(opts, &["a", "b"],); |
| assert!(counter_vec.is_ok()); |
| |
| let counter_vec = register_counter_vec!("test_macro_counter_vec_2", "help", &["a", "b"],); |
| assert!(counter_vec.is_ok()); |
| } |
| |
| /// Create a [`CounterVec`][crate::CounterVec] and registers to a custom registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_counter_vec_with_registry, opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// |
| /// let opts = opts!("test_macro_counter_vec_1", "help"); |
| /// let counter_vec = register_counter_vec_with_registry!(opts, &["a", "b"], custom_registry); |
| /// assert!(counter_vec.is_ok()); |
| /// |
| /// let counter_vec = register_counter_vec_with_registry!("test_macro_counter_vec_2", "help", &["a", "b"], custom_registry); |
| /// assert!(counter_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_counter_vec_with_registry { |
| ($OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_counter_vec!(CounterVec, $OPTS, $LABELS_NAMES, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| register_counter_vec_with_registry!(opts!($NAME, $HELP), $LABELS_NAMES, $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_counter_vec_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_macro_counter_vec_1", "help",); |
| let counter_vec = register_counter_vec_with_registry!(opts, &["a", "b"], custom_registry,); |
| assert!(counter_vec.is_ok()); |
| |
| let counter_vec = register_counter_vec_with_registry!( |
| "test_macro_counter_vec_2", |
| "help", |
| &["a", "b"], |
| custom_registry, |
| ); |
| assert!(counter_vec.is_ok()); |
| } |
| |
| /// Create an [`IntCounterVec`][crate::IntCounterVec] and registers to default registry. |
| /// |
| /// View docs of `register_counter_vec` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_counter_vec { |
| ($OPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| __register_counter_vec!(IntCounterVec, $OPTS, $LABELS_NAMES) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| register_int_counter_vec!(opts!($NAME, $HELP), $LABELS_NAMES) |
| }}; |
| } |
| |
| /// Create an [`IntCounterVec`][crate::IntCounterVec] and registers to a custom registry. |
| /// |
| /// View docs of `register_counter_vec_with_registry` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_counter_vec_with_registry { |
| ($OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_counter_vec!(IntCounterVec, $OPTS, $LABELS_NAMES, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| register_int_counter_vec_with_registry!(opts!($NAME, $HELP), $LABELS_NAMES, $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_int_counter_vec() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let opts = opts!("test_opts_int_counter_vec_1", "help"); |
| let res = register_int_counter_vec!(opts, &["a", "b"]); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter_vec!("test_opts_int_counter_vec_2", "help", &["a", "b"]); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_counter_vec_3", "help",); |
| let res = register_int_counter_vec!(opts, &["a", "b"],); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter_vec!("test_opts_int_counter_vec_4", "help", &["a", "b"],); |
| assert!(res.is_ok()); |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_opts_int_counter_vec_1", "help"); |
| let res = register_int_counter_vec_with_registry!(opts, &["a", "b"], custom_registry); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter_vec_with_registry!( |
| "test_opts_int_counter_vec_2", |
| "help", |
| &["a", "b"], |
| custom_registry |
| ); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_counter_vec_3", "help"); |
| let res = register_int_counter_vec_with_registry!(opts, &["a", "b"], custom_registry,); |
| assert!(res.is_ok()); |
| |
| let res = register_int_counter_vec_with_registry!( |
| "test_opts_int_counter_vec_4", |
| "help", |
| &["a", "b"], |
| custom_registry, |
| ); |
| assert!(res.is_ok()); |
| } |
| |
| #[macro_export] |
| #[doc(hidden)] |
| macro_rules! __register_gauge { |
| ($TYPE:ident, $OPTS:expr) => {{ |
| let gauge = $crate::$TYPE::with_opts($OPTS).unwrap(); |
| $crate::register(Box::new(gauge.clone())).map(|_| gauge) |
| }}; |
| |
| ($TYPE:ident, $OPTS:expr, $REGISTRY:expr) => {{ |
| let gauge = $crate::$TYPE::with_opts($OPTS).unwrap(); |
| $REGISTRY.register(Box::new(gauge.clone())).map(|_| gauge) |
| }}; |
| } |
| |
| /// Create a [`Gauge`][crate::Gauge] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{opts, register_gauge}; |
| /// # fn main() { |
| /// let opts = opts!("test_macro_gauge", "help"); |
| /// let res1 = register_gauge!(opts); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_gauge!("test_macro_gauge_2", "help"); |
| /// assert!(res2.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_gauge { |
| ($OPTS:expr $(,)?) => {{ |
| __register_gauge!(Gauge, $OPTS) |
| }}; |
| |
| ($NAME:expr, $HELP:expr $(,)?) => {{ |
| register_gauge!(opts!($NAME, $HELP)) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_gauge_trailing_comma() { |
| let opts = opts!("test_macro_gauge", "help",); |
| let res1 = register_gauge!(opts,); |
| assert!(res1.is_ok()); |
| |
| let res2 = register_gauge!("test_macro_gauge_2", "help",); |
| assert!(res2.is_ok()); |
| } |
| |
| /// Create a [`Gauge`][crate::Gauge] and registers to a custom registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_gauge_with_registry, opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// |
| /// let opts = opts!("test_macro_gauge", "help"); |
| /// let res1 = register_gauge_with_registry!(opts, custom_registry); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_gauge_with_registry!("test_macro_gauge_2", "help", custom_registry); |
| /// assert!(res2.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_gauge_with_registry { |
| ($OPTS:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_gauge!(Gauge, $OPTS, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $REGISTRY:expr $(,)?) => {{ |
| register_gauge_with_registry!(opts!($NAME, $HELP), $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_gauge_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_macro_gauge", "help",); |
| let res1 = register_gauge_with_registry!(opts, custom_registry,); |
| assert!(res1.is_ok()); |
| |
| let res2 = register_gauge_with_registry!("test_macro_gauge_2", "help", custom_registry,); |
| assert!(res2.is_ok()); |
| } |
| |
| /// Create an [`IntGauge`][crate::IntGauge] and registers to default registry. |
| /// |
| /// View docs of `register_gauge` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_gauge { |
| ($OPTS:expr $(,)?) => {{ |
| __register_gauge!(IntGauge, $OPTS) |
| }}; |
| |
| ($NAME:expr, $HELP:expr $(,)?) => {{ |
| register_int_gauge!(opts!($NAME, $HELP)) |
| }}; |
| } |
| |
| /// Create an [`IntGauge`][crate::IntGauge] and registers to a custom registry. |
| /// |
| /// View docs of `register_gauge_with_registry` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_gauge_with_registry { |
| ($OPTS:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_gauge!(IntGauge, $OPTS, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $REGISTRY:expr $(,)?) => {{ |
| register_int_gauge_with_registry!(opts!($NAME, $HELP), $REGISTRY) |
| }}; |
| } |
| |
| #[macro_export] |
| #[doc(hidden)] |
| macro_rules! __register_gauge_vec { |
| ($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| let gauge_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap(); |
| $crate::register(Box::new(gauge_vec.clone())).map(|_| gauge_vec) |
| }}; |
| |
| ($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| let gauge_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap(); |
| $REGISTRY |
| .register(Box::new(gauge_vec.clone())) |
| .map(|_| gauge_vec) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_int_gauge() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let opts = opts!("test_opts_int_gauge_1", "help"); |
| let res = register_int_gauge!(opts); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge!("test_opts_int_gauge_2", "help"); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_gauge_3", "help",); |
| let res = register_int_gauge!(opts,); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge!("test_opts_int_gauge_4", "help",); |
| assert!(res.is_ok()); |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_opts_int_gauge_1", "help"); |
| let res = register_int_gauge_with_registry!(opts, custom_registry); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_with_registry!("test_opts_int_gauge_2", "help", custom_registry); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_gauge_3", "help"); |
| let res = register_int_gauge_with_registry!(opts, custom_registry,); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_with_registry!("test_opts_int_gauge_4", "help", custom_registry,); |
| assert!(res.is_ok()); |
| } |
| |
| /// Create a [`GaugeVec`][crate::GaugeVec] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{opts, register_gauge_vec}; |
| /// # fn main() { |
| /// let opts = opts!("test_macro_gauge_vec_1", "help"); |
| /// let gauge_vec = register_gauge_vec!(opts, &["a", "b"]); |
| /// assert!(gauge_vec.is_ok()); |
| /// |
| /// let gauge_vec = register_gauge_vec!("test_macro_gauge_vec_2", "help", &["a", "b"]); |
| /// assert!(gauge_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_gauge_vec { |
| ($OPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| __register_gauge_vec!(GaugeVec, $OPTS, $LABELS_NAMES) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| register_gauge_vec!(opts!($NAME, $HELP), $LABELS_NAMES) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_gauge_vec_trailing_comma() { |
| let opts = opts!("test_macro_gauge_vec_1", "help",); |
| let gauge_vec = register_gauge_vec!(opts, &["a", "b"],); |
| assert!(gauge_vec.is_ok()); |
| |
| let gauge_vec = register_gauge_vec!("test_macro_gauge_vec_2", "help", &["a", "b"],); |
| assert!(gauge_vec.is_ok()); |
| } |
| |
| /// Create a [`GaugeVec`][crate::GaugeVec] and registers to a custom registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_gauge_vec_with_registry, opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// |
| /// let opts = opts!("test_macro_gauge_vec_1", "help"); |
| /// let gauge_vec = register_gauge_vec_with_registry!(opts, &["a", "b"], custom_registry); |
| /// assert!(gauge_vec.is_ok()); |
| /// |
| /// let gauge_vec = register_gauge_vec_with_registry!("test_macro_gauge_vec_2", "help", &["a", "b"], custom_registry); |
| /// assert!(gauge_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_gauge_vec_with_registry { |
| ($OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_gauge_vec!(GaugeVec, $OPTS, $LABELS_NAMES, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| register_gauge_vec_with_registry!(opts!($NAME, $HELP), $LABELS_NAMES, $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_gauge_vec_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_macro_gauge_vec_1", "help",); |
| let gauge_vec = register_gauge_vec_with_registry!(opts, &["a", "b"], custom_registry,); |
| assert!(gauge_vec.is_ok()); |
| |
| let gauge_vec = register_gauge_vec_with_registry!( |
| "test_macro_gauge_vec_2", |
| "help", |
| &["a", "b"], |
| custom_registry, |
| ); |
| assert!(gauge_vec.is_ok()); |
| } |
| |
| /// Create an [`IntGaugeVec`][crate::IntGaugeVec] and registers to default registry. |
| /// |
| /// View docs of `register_gauge_vec` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_gauge_vec { |
| ($OPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| __register_gauge_vec!(IntGaugeVec, $OPTS, $LABELS_NAMES) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| register_int_gauge_vec!(opts!($NAME, $HELP), $LABELS_NAMES) |
| }}; |
| } |
| |
| /// Create an [`IntGaugeVec`][crate::IntGaugeVec] and registers to a custom registry. |
| /// |
| /// View docs of `register_gauge_vec_with_registry` for examples. |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_int_gauge_vec_with_registry { |
| ($OPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| __register_gauge_vec!(IntGaugeVec, $OPTS, $LABELS_NAMES, $REGISTRY) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| register_int_gauge_vec_with_registry!(opts!($NAME, $HELP), $LABELS_NAMES, $REGISTRY) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_int_gauge_vec() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let opts = opts!("test_opts_int_gauge_vec_1", "help"); |
| let res = register_int_gauge_vec!(opts, &["a", "b"]); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_vec!("test_opts_int_gauge_vec_2", "help", &["a", "b"]); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_gauge_vec_3", "help",); |
| let res = register_int_gauge_vec!(opts, &["a", "b"],); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_vec!("test_opts_int_gauge_vec_4", "help", &["a", "b"],); |
| assert!(res.is_ok()); |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = opts!("test_opts_int_gauge_vec_1", "help"); |
| let res = register_int_gauge_vec_with_registry!(opts, &["a", "b"], custom_registry); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_vec_with_registry!( |
| "test_opts_int_gauge_vec_2", |
| "help", |
| &["a", "b"], |
| custom_registry |
| ); |
| assert!(res.is_ok()); |
| |
| let opts = opts!("test_opts_int_gauge_vec_3", "help"); |
| let res = register_int_gauge_vec_with_registry!(opts, &["a", "b"], custom_registry,); |
| assert!(res.is_ok()); |
| |
| let res = register_int_gauge_vec_with_registry!( |
| "test_opts_int_gauge_vec_4", |
| "help", |
| &["a", "b"], |
| custom_registry, |
| ); |
| assert!(res.is_ok()); |
| } |
| |
| /// Create a [`Histogram`][crate::Histogram] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{histogram_opts, register_histogram}; |
| /// # fn main() { |
| /// let opts = histogram_opts!("test_macro_histogram", "help"); |
| /// let res1 = register_histogram!(opts); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_histogram!("test_macro_histogram_2", "help"); |
| /// assert!(res2.is_ok()); |
| /// |
| /// let res3 = register_histogram!("test_macro_histogram_4", |
| /// "help", |
| /// vec![1.0, 2.0]); |
| /// assert!(res3.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_histogram { |
| ($NAME:expr, $HELP:expr $(,)?) => { |
| register_histogram!(histogram_opts!($NAME, $HELP)) |
| }; |
| |
| ($NAME:expr, $HELP:expr, $BUCKETS:expr $(,)?) => { |
| register_histogram!(histogram_opts!($NAME, $HELP, $BUCKETS)) |
| }; |
| |
| ($HOPTS:expr $(,)?) => {{ |
| let histogram = $crate::Histogram::with_opts($HOPTS).unwrap(); |
| $crate::register(Box::new(histogram.clone())).map(|_| histogram) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_histogram_trailing_comma() { |
| let opts = histogram_opts!("test_macro_histogram", "help",); |
| let res1 = register_histogram!(opts,); |
| assert!(res1.is_ok()); |
| |
| let res2 = register_histogram!("test_macro_histogram_2", "help",); |
| assert!(res2.is_ok()); |
| |
| let res3 = register_histogram!("test_macro_histogram_4", "help", vec![1.0, 2.0],); |
| assert!(res3.is_ok()); |
| } |
| |
| /// Create a [`Histogram`][crate::Histogram] and registers to a custom registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_histogram_with_registry, histogram_opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// |
| /// let opts = histogram_opts!("test_macro_histogram", "help"); |
| /// let res1 = register_histogram_with_registry!(opts, custom_registry); |
| /// assert!(res1.is_ok()); |
| /// |
| /// let res2 = register_histogram_with_registry!("test_macro_histogram_2", "help", custom_registry); |
| /// assert!(res2.is_ok()); |
| /// |
| /// let res3 = register_histogram_with_registry!("test_macro_histogram_4", |
| /// "help", |
| /// vec![1.0, 2.0], custom_registry); |
| /// assert!(res3.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_histogram_with_registry { |
| ($NAME:expr, $HELP:expr, $REGISTRY:expr $(,)?) => { |
| register_histogram_with_registry!(histogram_opts!($NAME, $HELP), $REGISTRY) |
| }; |
| |
| ($NAME:expr, $HELP:expr, $BUCKETS:expr, $REGISTRY:expr $(,)?) => { |
| register_histogram_with_registry!(histogram_opts!($NAME, $HELP, $BUCKETS), $REGISTRY) |
| }; |
| |
| ($HOPTS:expr, $REGISTRY:expr $(,)?) => {{ |
| let histogram = $crate::Histogram::with_opts($HOPTS).unwrap(); |
| $REGISTRY |
| .register(Box::new(histogram.clone())) |
| .map(|_| histogram) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_histogram_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = histogram_opts!("test_macro_histogram", "help",); |
| let res1 = register_histogram_with_registry!(opts, custom_registry,); |
| assert!(res1.is_ok()); |
| |
| let res2 = |
| register_histogram_with_registry!("test_macro_histogram_2", "help", custom_registry,); |
| assert!(res2.is_ok()); |
| |
| let res3 = register_histogram_with_registry!( |
| "test_macro_histogram_4", |
| "help", |
| vec![1.0, 2.0], |
| custom_registry, |
| ); |
| assert!(res3.is_ok()); |
| } |
| |
| /// Create a [`HistogramVec`][crate::HistogramVec] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{histogram_opts, register_histogram_vec}; |
| /// # fn main() { |
| /// let opts = histogram_opts!("test_macro_histogram_vec_1", "help"); |
| /// let histogram_vec = register_histogram_vec!(opts, &["a", "b"]); |
| /// assert!(histogram_vec.is_ok()); |
| /// |
| /// let histogram_vec = |
| /// register_histogram_vec!("test_macro_histogram_vec_2", "help", &["a", "b"]); |
| /// assert!(histogram_vec.is_ok()); |
| /// |
| /// let histogram_vec = register_histogram_vec!("test_macro_histogram_vec_3", |
| /// "help", |
| /// &["test_label"], |
| /// vec![0.0, 1.0, 2.0]); |
| /// assert!(histogram_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_histogram_vec { |
| ($HOPTS:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| let histogram_vec = $crate::HistogramVec::new($HOPTS, $LABELS_NAMES).unwrap(); |
| $crate::register(Box::new(histogram_vec.clone())).map(|_| histogram_vec) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr $(,)?) => {{ |
| register_histogram_vec!(histogram_opts!($NAME, $HELP), $LABELS_NAMES) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $BUCKETS:expr $(,)?) => {{ |
| register_histogram_vec!(histogram_opts!($NAME, $HELP, $BUCKETS), $LABELS_NAMES) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_histogram_vec_trailing_comma() { |
| let opts = histogram_opts!("test_macro_histogram_vec_1", "help",); |
| let histogram_vec = register_histogram_vec!(opts, &["a", "b"],); |
| assert!(histogram_vec.is_ok()); |
| |
| let histogram_vec = register_histogram_vec!("test_macro_histogram_vec_2", "help", &["a", "b"],); |
| assert!(histogram_vec.is_ok()); |
| |
| let histogram_vec = register_histogram_vec!( |
| "test_macro_histogram_vec_3", |
| "help", |
| &["test_label"], |
| vec![0.0, 1.0, 2.0], |
| ); |
| assert!(histogram_vec.is_ok()); |
| } |
| |
| /// Create a [`HistogramVec`][crate::HistogramVec] and registers to default registry. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// # use prometheus::{register_histogram_vec_with_registry, histogram_opts}; |
| /// # use prometheus::Registry; |
| /// # use std::collections::HashMap; |
| /// # fn main() { |
| /// let mut labels = HashMap::new(); |
| /// labels.insert("mykey".to_string(), "myvalue".to_string()); |
| /// let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| /// |
| /// let opts = histogram_opts!("test_macro_histogram_vec_1", "help"); |
| /// let histogram_vec = register_histogram_vec_with_registry!(opts, &["a", "b"], custom_registry); |
| /// assert!(histogram_vec.is_ok()); |
| /// |
| /// let histogram_vec = |
| /// register_histogram_vec_with_registry!("test_macro_histogram_vec_2", "help", &["a", "b"], custom_registry); |
| /// assert!(histogram_vec.is_ok()); |
| /// |
| /// let histogram_vec = register_histogram_vec_with_registry!("test_macro_histogram_vec_3", |
| /// "help", |
| /// &["test_label"], |
| /// vec![0.0, 1.0, 2.0], custom_registry); |
| /// assert!(histogram_vec.is_ok()); |
| /// # } |
| /// ``` |
| #[macro_export(local_inner_macros)] |
| macro_rules! register_histogram_vec_with_registry { |
| ($HOPTS:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| let histogram_vec = $crate::HistogramVec::new($HOPTS, $LABELS_NAMES).unwrap(); |
| $REGISTRY |
| .register(Box::new(histogram_vec.clone())) |
| .map(|_| histogram_vec) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $REGISTRY:expr $(,)?) => {{ |
| register_histogram_vec_with_registry!( |
| histogram_opts!($NAME, $HELP), |
| $LABELS_NAMES, |
| $REGISTRY |
| ) |
| }}; |
| |
| ($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $BUCKETS:expr, $REGISTRY:expr $(,)?) => {{ |
| register_histogram_vec_with_registry!( |
| histogram_opts!($NAME, $HELP, $BUCKETS), |
| $LABELS_NAMES, |
| $REGISTRY |
| ) |
| }}; |
| } |
| |
| #[test] |
| fn test_register_histogram_vec_with_registry_trailing_comma() { |
| use crate::Registry; |
| use std::collections::HashMap; |
| |
| let mut labels = HashMap::new(); |
| labels.insert("mykey".to_string(), "myvalue".to_string()); |
| let custom_registry = Registry::new_custom(Some("myprefix".to_string()), Some(labels)).unwrap(); |
| |
| let opts = histogram_opts!("test_macro_histogram_vec_1", "help",); |
| let histogram_vec = register_histogram_vec_with_registry!(opts, &["a", "b"], custom_registry,); |
| assert!(histogram_vec.is_ok()); |
| |
| let histogram_vec = register_histogram_vec_with_registry!( |
| "test_macro_histogram_vec_2", |
| "help", |
| &["a", "b"], |
| custom_registry, |
| ); |
| assert!(histogram_vec.is_ok()); |
| |
| let histogram_vec = register_histogram_vec_with_registry!( |
| "test_macro_histogram_vec_3", |
| "help", |
| &["test_label"], |
| vec![0.0, 1.0, 2.0], |
| custom_registry, |
| ); |
| assert!(histogram_vec.is_ok()); |
| } |