Skip to content

Commit

Permalink
Add metadata to metrics (#380)
Browse files Browse the repository at this point in the history
  • Loading branch information
hlbarber committed Jul 15, 2023
1 parent 0ffcc48 commit 0193688
Show file tree
Hide file tree
Showing 24 changed files with 647 additions and 240 deletions.
8 changes: 4 additions & 4 deletions metrics-benchmark/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use hdrhistogram::Histogram as HdrHistogram;
use log::{error, info};
use metrics::{
gauge, histogram, increment_counter, register_counter, register_gauge, register_histogram,
Counter, Gauge, Histogram, Key, KeyName, Recorder, SharedString, Unit,
Counter, Gauge, Histogram, Key, KeyName, Metadata, Recorder, SharedString, Unit,
};
use metrics_util::registry::{AtomicStorage, Registry};
use portable_atomic::AtomicU64;
Expand Down Expand Up @@ -68,15 +68,15 @@ impl Recorder for BenchmarkingRecorder {

fn describe_histogram(&self, _: KeyName, _: Option<Unit>, _: SharedString) {}

fn register_counter(&self, key: &Key) -> Counter {
fn register_counter(&self, key: &Key, _metadata: &Metadata<'_>) -> Counter {
self.registry.get_or_create_counter(key, |c| Counter::from_arc(c.clone()))
}

fn register_gauge(&self, key: &Key) -> Gauge {
fn register_gauge(&self, key: &Key, _metadata: &Metadata<'_>) -> Gauge {
self.registry.get_or_create_gauge(key, |g| Gauge::from_arc(g.clone()))
}

fn register_histogram(&self, key: &Key) -> Histogram {
fn register_histogram(&self, key: &Key, _metadata: &Metadata<'_>) -> Histogram {
self.registry.get_or_create_histogram(key, |h| Histogram::from_arc(h.clone()))
}
}
Expand Down
49 changes: 26 additions & 23 deletions metrics-exporter-prometheus/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -577,13 +577,16 @@ mod tests {

use super::{Matcher, PrometheusBuilder};

static METADATA: metrics::Metadata =
metrics::Metadata::new(module_path!(), metrics::Level::INFO, Some(module_path!()));

#[test]
fn test_render() {
let recorder =
PrometheusBuilder::new().set_quantiles(&[0.0, 1.0]).unwrap().build_recorder();

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let handle = recorder.handle();
Expand All @@ -594,7 +597,7 @@ mod tests {

let labels = vec![Label::new("wutang", "forever")];
let key = Key::from_parts("basic_gauge", labels);
let gauge1 = recorder.register_gauge(&key);
let gauge1 = recorder.register_gauge(&key, &METADATA);
gauge1.set(-3.14);
let rendered = handle.render();
let expected_gauge = format!(
Expand All @@ -605,7 +608,7 @@ mod tests {
assert_eq!(rendered, expected_gauge);

let key = Key::from_name("basic_histogram");
let histogram1 = recorder.register_histogram(&key);
let histogram1 = recorder.register_histogram(&key, &METADATA);
histogram1.record(12.0);
let rendered = handle.render();

Expand Down Expand Up @@ -647,19 +650,19 @@ mod tests {
.build_recorder();

let full_key = Key::from_name("metrics.testing_foo");
let full_key_histo = recorder.register_histogram(&full_key);
let full_key_histo = recorder.register_histogram(&full_key, &METADATA);
full_key_histo.record(FULL_VALUES[0]);

let prefix_key = Key::from_name("metrics.testing_bar");
let prefix_key_histo = recorder.register_histogram(&prefix_key);
let prefix_key_histo = recorder.register_histogram(&prefix_key, &METADATA);
prefix_key_histo.record(PREFIX_VALUES[1]);

let suffix_key = Key::from_name("metrics_testin_foo");
let suffix_key_histo = recorder.register_histogram(&suffix_key);
let suffix_key_histo = recorder.register_histogram(&suffix_key, &METADATA);
suffix_key_histo.record(SUFFIX_VALUES[2]);

let default_key = Key::from_name("metrics.wee");
let default_key_histo = recorder.register_histogram(&default_key);
let default_key_histo = recorder.register_histogram(&default_key, &METADATA);
default_key_histo.record(DEFAULT_VALUES[2] + 1.0);

let full_data = concat!(
Expand Down Expand Up @@ -722,15 +725,15 @@ mod tests {
.build_with_clock(clock);

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let key = Key::from_name("basic_gauge");
let gauge1 = recorder.register_gauge(&key);
let gauge1 = recorder.register_gauge(&key, &METADATA);
gauge1.set(-3.14);

let key = Key::from_name("basic_histogram");
let histo1 = recorder.register_histogram(&key);
let histo1 = recorder.register_histogram(&key, &METADATA);
histo1.record(1.0);

let handle = recorder.handle();
Expand Down Expand Up @@ -772,15 +775,15 @@ mod tests {
.build_with_clock(clock);

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let key = Key::from_name("basic_gauge");
let gauge1 = recorder.register_gauge(&key);
let gauge1 = recorder.register_gauge(&key, &METADATA);
gauge1.set(-3.14);

let key = Key::from_name("basic_histogram");
let histo1 = recorder.register_histogram(&key);
let histo1 = recorder.register_histogram(&key, &METADATA);
histo1.record(1.0);

let handle = recorder.handle();
Expand Down Expand Up @@ -821,15 +824,15 @@ mod tests {
.build_with_clock(clock);

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let key = Key::from_name("basic_gauge");
let gauge1 = recorder.register_gauge(&key);
let gauge1 = recorder.register_gauge(&key, &METADATA);
gauge1.set(-3.14);

let key = Key::from_name("basic_histogram");
let histo1 = recorder.register_histogram(&key);
let histo1 = recorder.register_histogram(&key, &METADATA);
histo1.record(1.0);

let handle = recorder.handle();
Expand All @@ -853,7 +856,7 @@ mod tests {
assert_eq!(rendered, expected);

let key = Key::from_parts("basic_histogram", vec![Label::new("type", "special")]);
let histo2 = recorder.register_histogram(&key);
let histo2 = recorder.register_histogram(&key, &METADATA);
histo2.record(2.0);

let expected_second = concat!(
Expand Down Expand Up @@ -896,11 +899,11 @@ mod tests {
.build_with_clock(clock);

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let key = Key::from_name("basic_gauge");
let gauge1 = recorder.register_gauge(&key);
let gauge1 = recorder.register_gauge(&key, &METADATA);
gauge1.set(-3.14);

let handle = recorder.handle();
Expand Down Expand Up @@ -945,7 +948,7 @@ mod tests {
.build_with_clock(clock);

let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

// First render, which starts tracking the counter in the recency state.
Expand Down Expand Up @@ -984,7 +987,7 @@ mod tests {
.add_global_label("foo", "bar")
.build_recorder();
let key = Key::from_name("basic_counter");
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(42);

let handle = recorder.handle();
Expand All @@ -1000,7 +1003,7 @@ mod tests {

let key =
Key::from_name("overridden").with_extra_labels(vec![Label::new("foo", "overridden")]);
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(1);

let handle = recorder.handle();
Expand All @@ -1018,7 +1021,7 @@ mod tests {
let key = Key::from_name(key_name.clone())
.with_extra_labels(vec![Label::new("øhno", "\"yeet\nies\\\"")]);
recorder.describe_counter(key_name, None, "\"Simplë stuff.\nRëally.\"".into());
let counter1 = recorder.register_counter(&key);
let counter1 = recorder.register_counter(&key, &METADATA);
counter1.increment(1);

let handle = recorder.handle();
Expand Down
8 changes: 4 additions & 4 deletions metrics-exporter-prometheus/src/recorder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::sync::Arc;
use std::sync::{PoisonError, RwLock};

use indexmap::IndexMap;
use metrics::{Counter, Gauge, Histogram, Key, KeyName, Recorder, SharedString, Unit};
use metrics::{Counter, Gauge, Histogram, Key, KeyName, Metadata, Recorder, SharedString, Unit};
use metrics_util::registry::{Recency, Registry};
use quanta::Instant;

Expand Down Expand Up @@ -246,15 +246,15 @@ impl Recorder for PrometheusRecorder {
self.add_description_if_missing(&key_name, description);
}

fn register_counter(&self, key: &Key) -> Counter {
fn register_counter(&self, key: &Key, _metadata: &Metadata<'_>) -> Counter {
self.inner.registry.get_or_create_counter(key, |c| c.clone().into())
}

fn register_gauge(&self, key: &Key) -> Gauge {
fn register_gauge(&self, key: &Key, _metadata: &Metadata<'_>) -> Gauge {
self.inner.registry.get_or_create_gauge(key, |c| c.clone().into())
}

fn register_histogram(&self, key: &Key) -> Histogram {
fn register_histogram(&self, key: &Key, _metadata: &Metadata<'_>) -> Histogram {
self.inner.registry.get_or_create_histogram(key, |c| c.clone().into())
}
}
Expand Down
8 changes: 4 additions & 4 deletions metrics-exporter-tcp/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ use std::{
use bytes::Bytes;
use crossbeam_channel::{bounded, unbounded, Receiver, Sender};
use metrics::{
Counter, CounterFn, Gauge, GaugeFn, Histogram, HistogramFn, Key, KeyName, Recorder,
Counter, CounterFn, Gauge, GaugeFn, Histogram, HistogramFn, Key, KeyName, Metadata, Recorder,
SetRecorderError, SharedString, Unit,
};
use mio::{
Expand Down Expand Up @@ -333,15 +333,15 @@ impl Recorder for TcpRecorder {
self.state.register_metric(key_name, MetricType::Histogram, unit, description);
}

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.state.clone())))
}

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.state.clone())))
}

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.state.clone())))
}
}
Expand Down
Loading

0 comments on commit 0193688

Please sign in to comment.