Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions metrics-macros/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ fn generate_statics(name: &Expr, labels: &Option<Labels>) -> TokenStream2 {
let use_name_static = name_is_fast_path(name);
let name_static = if use_name_static {
quote! {
static METRIC_NAME: [metrics::SharedString; 1] = [metrics::SharedString::const_str(#name)];
static METRIC_NAME: &'static str = #name;
}
} else {
quote! {}
Expand Down Expand Up @@ -374,11 +374,11 @@ fn generate_statics(name: &Expr, labels: &Option<Labels>) -> TokenStream2 {
let key_static = if use_name_static && use_labels_static {
if has_labels {
quote! {
static METRIC_KEY: metrics::Key = metrics::Key::from_static_parts(&METRIC_NAME, &METRIC_LABELS);
static METRIC_KEY: metrics::Key = metrics::Key::from_static_parts(METRIC_NAME, &METRIC_LABELS);
}
} else {
quote! {
static METRIC_KEY: metrics::Key = metrics::Key::from_static_name(&METRIC_NAME);
static METRIC_KEY: metrics::Key = metrics::Key::from_static_name(METRIC_NAME);
}
}
} else {
Expand Down Expand Up @@ -413,7 +413,7 @@ fn generate_metric_key(name: &Expr, labels: &Option<Labels>) -> (TokenStream2, T
let labels = labels.as_ref().unwrap();
let quoted_labels = labels_to_quoted(labels);
quote! {
let key = metrics::Key::from_parts(&METRIC_NAME[..], #quoted_labels);
let key = metrics::Key::from_parts(METRIC_NAME, #quoted_labels);
}
} else if !use_name_static && !use_labels_static {
// The name is not static, and neither are the labels. Since `use_labels_static`
Expand Down
32 changes: 16 additions & 16 deletions metrics-macros/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ fn test_get_expanded_registration() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (& METRIC_NAME) ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (METRIC_NAME) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . register_mytype (& METRIC_KEY , None , None) ; ",
"} ",
Expand All @@ -36,8 +36,8 @@ fn test_get_expanded_registration_with_unit() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (& METRIC_NAME) ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (METRIC_NAME) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . register_mytype (& METRIC_KEY , Some (metrics :: Unit :: Nanoseconds) , None) ; ",
"} ",
Expand All @@ -60,8 +60,8 @@ fn test_get_expanded_registration_with_description() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (& METRIC_NAME) ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (METRIC_NAME) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . register_mytype (& METRIC_KEY , None , Some (\"flerkin\")) ; ",
"} ",
Expand All @@ -85,8 +85,8 @@ fn test_get_expanded_registration_with_unit_and_description() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (& METRIC_NAME) ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (METRIC_NAME) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . register_mytype (& METRIC_KEY , Some (metrics :: Unit :: Nanoseconds) , Some (\"flerkin\")) ; ",
"} ",
Expand All @@ -108,8 +108,8 @@ fn test_get_expanded_callsite_static_name_no_labels() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (& METRIC_NAME) ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_name (METRIC_NAME) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . myop_mytype (& METRIC_KEY , 1) ; ",
"} }",
Expand All @@ -131,9 +131,9 @@ fn test_get_expanded_callsite_static_name_static_inline_labels() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"static METRIC_LABELS : [metrics :: Label ; 1usize] = [metrics :: Label :: from_static_parts (\"key1\" , \"value1\")] ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_parts (& METRIC_NAME , & METRIC_LABELS) ; ",
"static METRIC_KEY : metrics :: Key = metrics :: Key :: from_static_parts (METRIC_NAME , & METRIC_LABELS) ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"recorder . myop_mytype (& METRIC_KEY , 1) ; ",
"} ",
Expand All @@ -156,9 +156,9 @@ fn test_get_expanded_callsite_static_name_dynamic_inline_labels() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"let key = metrics :: Key :: from_parts (& METRIC_NAME [..] , vec ! [metrics :: Label :: new (\"key1\" , & value1)]) ; ",
"let key = metrics :: Key :: from_parts (METRIC_NAME , vec ! [metrics :: Label :: new (\"key1\" , & value1)]) ; ",
"recorder . myop_mytype (& key , 1) ; ",
"} ",
"}",
Expand All @@ -180,9 +180,9 @@ fn test_get_expanded_callsite_static_name_existing_labels() {

let expected = concat!(
"{ ",
"static METRIC_NAME : [metrics :: SharedString ; 1] = [metrics :: SharedString :: const_str (\"mykeyname\")] ; ",
"static METRIC_NAME : & 'static str = \"mykeyname\" ; ",
"if let Some (recorder) = metrics :: try_recorder () { ",
"let key = metrics :: Key :: from_parts (& METRIC_NAME [..] , mylabels) ; ",
"let key = metrics :: Key :: from_parts (METRIC_NAME , mylabels) ; ",
"recorder . myop_mytype (& key , 1) ; ",
"} ",
"}",
Expand Down
12 changes: 6 additions & 6 deletions metrics-tracing-context/benches/layer.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use criterion::{criterion_group, criterion_main, Criterion};
use metrics::{Key, Label, NoopRecorder, Recorder, SharedString};
use metrics::{Key, Label, NoopRecorder, Recorder};
use metrics_tracing_context::{MetricsLayer, TracingContextLayer};
use metrics_util::layers::Layer;
use tracing::{
Expand All @@ -12,7 +12,7 @@ fn layer_benchmark(c: &mut Criterion) {
let mut group = c.benchmark_group("layer");
group.bench_function("base case", |b| {
let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("key")];
static KEY_NAME: &'static str = "key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -30,7 +30,7 @@ fn layer_benchmark(c: &mut Criterion) {
let _guard = span.enter();

let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("key")];
static KEY_NAME: &'static str = "key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -49,7 +49,7 @@ fn layer_benchmark(c: &mut Criterion) {
let _guard = span.enter();

let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("key")];
static KEY_NAME: &'static str = "key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -69,7 +69,7 @@ fn layer_benchmark(c: &mut Criterion) {

let tracing_layer = TracingContextLayer::all();
let recorder = tracing_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("key")];
static KEY_NAME: &'static str = "key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -89,7 +89,7 @@ fn layer_benchmark(c: &mut Criterion) {

let tracing_layer = TracingContextLayer::all();
let recorder = tracing_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("key")];
static KEY_NAME: &'static str = "key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand Down
19 changes: 7 additions & 12 deletions metrics-tracing-context/tests/integration.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use metrics::{counter, Key, Label, SharedString};
use metrics::{counter, Key, Label};
use metrics_tracing_context::{LabelFilter, MetricsLayer, TracingContextLayer};
use metrics_util::{
layers::Layer, CompositeKey, DebugValue, DebuggingRecorder, MetricKind, Snapshotter,
Expand All @@ -9,17 +9,12 @@ use tracing::{span, Level};
use tracing_subscriber::{layer::SubscriberExt, Registry};

static TEST_MUTEX: Mutex<()> = const_mutex(());
static LOGIN_ATTEMPTS: &'static [SharedString] = &[SharedString::const_str("login_attempts")];
static LOGIN_ATTEMPTS_NONE: &'static [SharedString] =
&[SharedString::const_str("login_attempts_no_labels")];
static LOGIN_ATTEMPTS_STATIC: &'static [SharedString] =
&[SharedString::const_str("login_attempts_static_labels")];
static LOGIN_ATTEMPTS_DYNAMIC: &'static [SharedString] =
&[SharedString::const_str("login_attempts_dynamic_labels")];
static LOGIN_ATTEMPTS_BOTH: &'static [SharedString] = &[SharedString::const_str(
"login_attempts_static_and_dynamic_labels",
)];
static MY_COUNTER: &'static [SharedString] = &[SharedString::const_str("my_counter")];
static LOGIN_ATTEMPTS: &'static str = "login_attempts";
static LOGIN_ATTEMPTS_NONE: &'static str = "login_attempts_no_labels";
static LOGIN_ATTEMPTS_STATIC: &'static str = "login_attempts_static_labels";
static LOGIN_ATTEMPTS_DYNAMIC: &'static str = "login_attempts_dynamic_labels";
static LOGIN_ATTEMPTS_BOTH: &'static str = "login_attempts_static_and_dynamic_labels";
static MY_COUNTER: &'static str = "my_counter";
static USER_EMAIL: &'static [Label] = &[
Label::from_static_parts("user", "ferris"),
Label::from_static_parts("user.email", "ferris@rust-lang.org"),
Expand Down
6 changes: 6 additions & 0 deletions metrics-util/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased] - ReleaseDate

### Added
- New layer -- `Router` -- for routing specific metrics to target downstream recorders.

### Changed
- Updated all deprecated usages of `crossbeam_epoch::Atomic<T>::compare_and_set` to `compare_exchange`.

## [0.7.0] - 2021-05-03

### Changed
Expand Down
9 changes: 8 additions & 1 deletion metrics-util/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ harness = false
name = "filter"
harness = false

[[bench]]
name = "router"
harness = false

[[bench]]
name = "absolute"
harness = false
Expand All @@ -49,6 +53,7 @@ indexmap = { version = "1.6", optional = true }
parking_lot = { version = "0.11", optional = true }
quanta = { version = "0.7", optional = true }
sketches-ddsketch = { version = "0.1", optional = true }
radix_trie = { version = "0.2", optional = true }
ordered-float = "2.0"
num_cpus = "1"
t1ha = "0.1"
Expand All @@ -74,9 +79,11 @@ crossbeam-queue = "0.3"
quickcheck = "1"
quickcheck_macros = "1"
textplots = "0.6"
mockall = "0.9"

[features]
default = ["std", "layer-filter", "layer-absolute"]
default = ["std", "layer-filter", "layer-absolute", "layer-router"]
std = ["atomic-shim", "crossbeam-epoch", "crossbeam-utils", "dashmap", "indexmap", "parking_lot", "quanta", "sketches-ddsketch"]
layer-filter = ["aho-corasick"]
layer-absolute = ["aho-corasick", "parking_lot"]
layer-router = ["radix_trie"]
10 changes: 5 additions & 5 deletions metrics-util/benches/absolute.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use criterion::{criterion_group, criterion_main, Criterion};

#[cfg(feature = "layer-absolute")]
use metrics::{Key, Label, NoopRecorder, Recorder, SharedString};
use metrics::{Key, Label, NoopRecorder, Recorder};

#[cfg(feature = "layer-absolute")]
use metrics_util::layers::{AbsoluteLayer, Layer};
Expand All @@ -15,7 +15,7 @@ fn layer_benchmark(c: &mut Criterion) {
let patterns = vec!["rdkafka"];
let absolute_layer = AbsoluteLayer::from_patterns(patterns);
let recorder = absolute_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("counter")];
static KEY_NAME: &'static str = "counter";
static KEY_DATA: Key = Key::from_static_name(&KEY_NAME);

b.iter(|| {
Expand All @@ -26,7 +26,7 @@ fn layer_benchmark(c: &mut Criterion) {
let patterns = vec!["rdkafka"];
let absolute_layer = AbsoluteLayer::from_patterns(patterns);
let recorder = absolute_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("rdkafka.bytes")];
static KEY_NAME: &'static str = "rdkafka.bytes";
static KEY_DATA: Key = Key::from_static_name(&KEY_NAME);

b.iter(|| {
Expand All @@ -37,7 +37,7 @@ fn layer_benchmark(c: &mut Criterion) {
let patterns = vec!["tokio"];
let absolute_layer = AbsoluteLayer::from_patterns(patterns);
let recorder = absolute_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("rdkafka.bytes")];
static KEY_NAME: &'static str = "rdkafka.bytes";
static KEY_DATA: Key = Key::from_static_name(&KEY_NAME);

let mut counter = 1;
Expand All @@ -49,7 +49,7 @@ fn layer_benchmark(c: &mut Criterion) {
});
group.bench_function("noop recorder overhead (increment_counter)", |b| {
let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("counter")];
static KEY_NAME: &'static str = "counter";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand Down
23 changes: 4 additions & 19 deletions metrics-util/benches/filter.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use criterion::{criterion_group, criterion_main, Criterion};

#[cfg(feature = "layer-filter")]
use metrics::{Key, Label, NoopRecorder, Recorder, SharedString};
use metrics::{Key, Label, NoopRecorder, Recorder};

#[cfg(feature = "layer-filter")]
use metrics_util::layers::{FilterLayer, Layer};
Expand All @@ -15,7 +15,7 @@ fn layer_benchmark(c: &mut Criterion) {
let patterns = vec!["tokio"];
let filter_layer = FilterLayer::from_patterns(patterns);
let recorder = filter_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("tokio.foo")];
static KEY_NAME: &'static str = "tokio.foo";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -27,22 +27,7 @@ fn layer_benchmark(c: &mut Criterion) {
let patterns = vec!["tokio"];
let filter_layer = FilterLayer::from_patterns(patterns);
let recorder = filter_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("hyper.foo")];
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

b.iter(|| {
recorder.increment_counter(&KEY_DATA, 1);
})
});
group.bench_function("deep match", |b| {
let patterns = vec!["tokio"];
let filter_layer = FilterLayer::from_patterns(patterns);
let recorder = filter_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 2] = [
SharedString::const_str("prefix"),
SharedString::const_str("tokio.foo"),
];
static KEY_NAME: &'static str = "hyper.foo";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -52,7 +37,7 @@ fn layer_benchmark(c: &mut Criterion) {
});
group.bench_function("noop recorder overhead (increment_counter)", |b| {
let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("tokio.foo")];
static KEY_NAME: &'static str = "tokio.foo";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand Down
6 changes: 3 additions & 3 deletions metrics-util/benches/prefix.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
use criterion::{criterion_group, criterion_main, Criterion};
use metrics::{Key, Label, NoopRecorder, Recorder, SharedString};
use metrics::{Key, Label, NoopRecorder, Recorder};
use metrics_util::layers::{Layer, PrefixLayer};

fn layer_benchmark(c: &mut Criterion) {
let mut group = c.benchmark_group("prefix");
group.bench_function("basic", |b| {
let prefix_layer = PrefixLayer::new("prefix");
let recorder = prefix_layer.layer(NoopRecorder);
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("simple_key")];
static KEY_NAME: &'static str = "simple_key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand All @@ -17,7 +17,7 @@ fn layer_benchmark(c: &mut Criterion) {
});
group.bench_function("noop recorder overhead (increment_counter)", |b| {
let recorder = NoopRecorder;
static KEY_NAME: [SharedString; 1] = [SharedString::const_str("simple_key")];
static KEY_NAME: &'static str = "simple_key";
static KEY_LABELS: [Label; 1] = [Label::from_static_parts("foo", "bar")];
static KEY_DATA: Key = Key::from_static_parts(&KEY_NAME, &KEY_LABELS);

Expand Down
Loading