mirror of https://github.com/fralalonde/dipstick
243 lines
7.3 KiB
Rust
243 lines
7.3 KiB
Rust
use core::*;
|
|
|
|
//use async_queue::WithAsyncQueue;
|
|
//use sample::WithSamplingRate;
|
|
use bucket::Bucket;
|
|
|
|
/// Backward compatibility alias.
|
|
pub type Aggregate = Bucket;
|
|
|
|
///// Aggregate metrics in memory.
|
|
///// Depending on the type of metric, count, sum, minimum and maximum of values will be tracked.
|
|
///// Needs to be connected to a publish to be useful.
|
|
//#[deprecated(since = "0.7.0", note = "Use `Bucket::new()` instead.")]
|
|
//pub fn aggregate<M, E, P>(stats_fn: E, pub_scope: P) -> Bucket
|
|
// where
|
|
// E: Fn(Kind, Name, ScoreType) -> Option<(Kind, Name, Value)> + Send + Sync + 'static,
|
|
// P: Into<MetricOutput<M>>,
|
|
// M: Send + Sync + 'static + Clone,
|
|
//{
|
|
// let agg = Bucket::new();
|
|
// agg.set_stats(stats_fn);
|
|
// agg.set_output(pub_scope);
|
|
// agg
|
|
//}
|
|
//
|
|
///// Enqueue collected metrics for dispatch on background thread.
|
|
//#[deprecated(since = "0.5.0", note = "Use `with_async_queue` instead.")]
|
|
//pub fn async<M, IC>(queue_size: usize, chain: IC) -> MetricOutput<M>
|
|
// where
|
|
// M: Clone + Send + Sync + 'static,
|
|
// IC: Into<MetricOutput<M>>,
|
|
//{
|
|
// let chain = chain.into();
|
|
// chain.with_async_queue(queue_size)
|
|
//}
|
|
//
|
|
///// Perform random sampling of values according to the specified rate.
|
|
//#[deprecated(since = "0.5.0", note = "Use `with_sampling_rate` instead.")]
|
|
//pub fn sample<M, IC>(sampling_rate: Sampling, chain: IC) -> MetricOutput<M>
|
|
// where
|
|
// M: Clone + Send + Sync + 'static,
|
|
// IC: Into<MetricOutput<M>>,
|
|
//{
|
|
// let chain = chain.into();
|
|
// chain.with_sampling_rate(sampling_rate)
|
|
//}
|
|
//
|
|
///// Wrap the metrics backend to provide an application-friendly interface.
|
|
///// Open a metric scope to share across the application.
|
|
//#[deprecated(since = "0.7.0", note = "Use into() instead")]
|
|
//pub fn app_metrics<M, AM>(scope: AM) -> MetricScope<M>
|
|
// where
|
|
// M: Clone + Send + Sync + 'static,
|
|
// AM: Into<MetricScope<M>>,
|
|
//{
|
|
// scope.into()
|
|
//}
|
|
|
|
/// Help transition to new syntax
|
|
#[deprecated(since = "0.7.0", note = "Use Metrics instead")]
|
|
pub type AppMetrics = Input;
|
|
|
|
/// Help transition to new syntax
|
|
#[deprecated(since = "0.7.0", note = "Use Marker instead")]
|
|
pub type AppMarker = Marker;
|
|
|
|
/// Help transition to new syntax
|
|
#[deprecated(since = "0.7.0", note = "Use Counter instead")]
|
|
pub type AppCounter = Counter;
|
|
|
|
/// Help transition to new syntax
|
|
#[deprecated(since = "0.7.0", note = "Use Gauge instead")]
|
|
pub type AppGauge = Gauge;
|
|
|
|
/// Help transition to new syntax
|
|
#[deprecated(since = "0.7.0", note = "Use Timer instead")]
|
|
pub type AppTimer = Timer;
|
|
|
|
/// Define application-scoped metrics.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! app_metrics {
|
|
($type_param:ty, $metric_id:ident = $SCOPE:expr) => {
|
|
lazy_static! {
|
|
pub static ref $metric_id: $type_param = $SCOPE.into();
|
|
}
|
|
};
|
|
}
|
|
|
|
/// Define application-scoped markers.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! app_marker {
|
|
(<$type_param: ty> $SCOPE: expr => { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! {
|
|
$(pub static ref $metric_id: Marker = $SCOPE.marker( $m_exp );)*
|
|
}
|
|
};
|
|
}
|
|
|
|
/// Define application-scoped counters.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! app_counter {
|
|
(<$type_param: ty> $SCOPE: expr => { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! {
|
|
$(pub static ref $metric_id: Counter = $SCOPE.counter( $m_exp );)*
|
|
}
|
|
};
|
|
}
|
|
|
|
/// Define application-scoped gauges.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! app_gauge {
|
|
(<$type_param: ty> $SCOPE: expr => { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! {
|
|
$(pub static ref $metric_id: Gauge = $SCOPE.gauge( $m_exp );)*
|
|
}
|
|
};
|
|
}
|
|
|
|
/// Define application-scoped timers.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! app_timer {
|
|
(<$type_param: ty> $SCOPE: expr => { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! {
|
|
$(pub static ref $metric_id: Timer = $SCOPE.timer( $m_exp );)*
|
|
}
|
|
};
|
|
}
|
|
|
|
/////////////
|
|
// MOD SCOPE
|
|
|
|
/// Define module-scoped metrics.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! mod_metrics {
|
|
($type_param: ty, $metric_id: ident = ($($SCOPE: expr),+ $(,)*)) => {
|
|
lazy_static! {
|
|
static ref $metric_id: MetricScope<$type_param> = metric_scope(($($SCOPE),*));
|
|
}
|
|
};
|
|
($type_param: ty, $metric_id: ident = [$($SCOPE: expr),+ $(,)*]) => {
|
|
lazy_static! { static ref $metric_id: MetricScope<$type_param> =
|
|
metric_scope(&[$($SCOPE),*][..],); }
|
|
};
|
|
($type_param: ty, $metric_id: ident = $mod_metrics: expr) => {
|
|
lazy_static! { static ref $metric_id: MetricScope<$type_param> =
|
|
$mod_metrics.into(); }
|
|
};
|
|
}
|
|
|
|
/// Define module-scoped markers.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! mod_marker {
|
|
($type_param: ty, $mod_metrics: expr, { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! { $(static ref $metric_id: Marker =
|
|
$mod_metrics.marker( $m_exp );)* }
|
|
};
|
|
}
|
|
|
|
/// Define module-scoped counters.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! mod_counter {
|
|
($type_param: ty, $mod_metrics: expr, { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! { $(static ref $metric_id: Counter =
|
|
$mod_metrics.counter( $m_exp );)* }
|
|
};
|
|
}
|
|
|
|
/// Define module-scoped gauges.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! mod_gauge {
|
|
($type_param: ty, $mod_metrics: expr, { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! { $(static ref $metric_id: Gauge =
|
|
$mod_metrics.gauge( $m_exp );)* }
|
|
};
|
|
($type_param: ty, $mod_metrics: expr, $metric_id: ident: $m_exp: expr) => {
|
|
lazy_static! { static ref $metric_id: Gauge =
|
|
$mod_metrics.gauge( $m_exp ); }
|
|
}
|
|
}
|
|
|
|
/// Define module-scoped timers.
|
|
#[macro_export]
|
|
#[deprecated(since = "0.7.0", note = "Use metrics!() instead")]
|
|
macro_rules! mod_timer {
|
|
($type_param: ty, $mod_metrics: expr, { $($metric_id: ident: $m_exp: expr),* $(,)* } ) => {
|
|
lazy_static! { $(static ref $metric_id: Timer =
|
|
$mod_metrics.timer( $m_exp );)* }
|
|
};
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod legacy_test {
|
|
use core::*;
|
|
use self_metrics::*;
|
|
use deprecated::*;
|
|
|
|
metrics!(<Aggregate> TEST_METRICS = DIPSTICK_METRICS.add_prefix("test_prefix"));
|
|
|
|
app_marker!(<Aggregate> TEST_METRICS => {
|
|
M1: "failed",
|
|
M2: "success",
|
|
});
|
|
|
|
app_counter!(<Aggregate> TEST_METRICS => {
|
|
C1: "failed",
|
|
C2: "success",
|
|
});
|
|
|
|
app_gauge!(<Aggregate> TEST_METRICS => {
|
|
G1: "failed",
|
|
G2: "success",
|
|
});
|
|
|
|
app_timer!(<Aggregate> TEST_METRICS => {
|
|
T1: "failed",
|
|
T2: "success",
|
|
});
|
|
|
|
#[test]
|
|
fn call_old_macro_defined_metrics() {
|
|
M1.mark();
|
|
M2.mark();
|
|
|
|
C1.count(1);
|
|
C2.count(2);
|
|
|
|
G1.value(1);
|
|
G2.value(2);
|
|
|
|
T1.interval_us(1);
|
|
T2.interval_us(2);
|
|
}
|
|
}
|