Skip to content

Commit

Permalink
simpler static keys are back on the menu, boys
Browse files Browse the repository at this point in the history
  • Loading branch information
tobz committed May 14, 2021
1 parent d50512a commit 2875e9e
Show file tree
Hide file tree
Showing 20 changed files with 168 additions and 275 deletions.
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
3 changes: 2 additions & 1 deletion metrics-util/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ atomic-shim = { version = "0.1", optional = true }
aho-corasick = { version = "0.7", optional = true }
dashmap = { version = "4", optional = true }
indexmap = { version = "1.6", optional = true }
nibble_vec = { version = "0.1", optional = true }
parking_lot = { version = "0.11", optional = true }
quanta = { version = "0.7", optional = true }
sketches-ddsketch = { version = "0.1", optional = true }
Expand Down Expand Up @@ -86,4 +87,4 @@ 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"]
layer-router = ["radix_trie", "nibble_vec"]
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

0 comments on commit 2875e9e

Please sign in to comment.