From 4fa39f421d15ee0703a1cf2ca3bc8b9f001d7b23 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Sat, 10 Dec 2022 09:54:20 +0100 Subject: [PATCH 1/2] src/encoding: Take reference for value Signed-off-by: Max Inden --- src/encoding.rs | 7 +++++-- src/encoding/protobuf.rs | 17 ++++++++++++----- src/encoding/text.rs | 15 +++++++++++---- src/metrics/counter.rs | 2 +- src/metrics/exemplar.rs | 2 +- src/metrics/gauge.rs | 2 +- 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/encoding.rs b/src/encoding.rs index 7859b79..1edbdb3 100644 --- a/src/encoding.rs +++ b/src/encoding.rs @@ -96,14 +96,17 @@ impl<'a, 'b> MetricEncoder<'a, 'b> { ExemplarValue: EncodeExemplarValue, >( &mut self, - v: CounterValue, + v: &CounterValue, exemplar: Option<&Exemplar>, ) -> Result<(), std::fmt::Error> { for_both_mut!(self, MetricEncoderInner, e, e.encode_counter(v, exemplar)) } /// Encode a gauge. - pub fn encode_gauge(&mut self, v: impl EncodeGaugeValue) -> Result<(), std::fmt::Error> { + pub fn encode_gauge( + &mut self, + v: &GaugeValue, + ) -> Result<(), std::fmt::Error> { for_both_mut!(self, MetricEncoderInner, e, e.encode_gauge(v)) } diff --git a/src/encoding/protobuf.rs b/src/encoding/protobuf.rs index 554d6f1..7fb737d 100644 --- a/src/encoding/protobuf.rs +++ b/src/encoding/protobuf.rs @@ -36,7 +36,7 @@ use crate::metrics::exemplar::Exemplar; use crate::metrics::MetricType; use crate::registry::Registry; -use super::{EncodeExemplarValue, EncodeLabelSet}; +use super::{EncodeCounterValue, EncodeExemplarValue, EncodeGaugeValue, EncodeLabelSet}; /// Encode the metrics registered with the provided [`Registry`] into MetricSet /// using the OpenMetrics protobuf format. @@ -102,10 +102,14 @@ pub(crate) struct MetricEncoder<'a> { } impl<'a> MetricEncoder<'a> { - pub fn encode_counter( + pub fn encode_counter< + S: EncodeLabelSet, + CounterValue: EncodeCounterValue, + ExemplarValue: EncodeExemplarValue, + >( &mut self, - v: impl super::EncodeCounterValue, - exemplar: Option<&Exemplar>, + v: &CounterValue, + exemplar: Option<&Exemplar>, ) -> Result<(), std::fmt::Error> { let mut value = openmetrics_data_model::counter_value::Total::IntValue(0); let mut e = CounterValueEncoder { value: &mut value }.into(); @@ -128,7 +132,10 @@ impl<'a> MetricEncoder<'a> { Ok(()) } - pub fn encode_gauge(&mut self, v: impl super::EncodeGaugeValue) -> Result<(), std::fmt::Error> { + pub fn encode_gauge( + &mut self, + v: &GaugeValue, + ) -> Result<(), std::fmt::Error> { let mut value = openmetrics_data_model::gauge_value::Value::IntValue(0); let mut e = GaugeValueEncoder { value: &mut value }.into(); v.encode(&mut e)?; diff --git a/src/encoding/text.rs b/src/encoding/text.rs index 5d5e337..de47bbb 100644 --- a/src/encoding/text.rs +++ b/src/encoding/text.rs @@ -112,10 +112,14 @@ impl<'a, 'b> std::fmt::Debug for MetricEncoder<'a, 'b> { } impl<'a, 'b> MetricEncoder<'a, 'b> { - pub fn encode_counter( + pub fn encode_counter< + S: EncodeLabelSet, + CounterValue: super::EncodeCounterValue, + ExemplarValue: EncodeExemplarValue, + >( &mut self, - v: impl super::EncodeCounterValue, - exemplar: Option<&Exemplar>, + v: &CounterValue, + exemplar: Option<&Exemplar>, ) -> Result<(), std::fmt::Error> { self.write_name_and_unit()?; @@ -139,7 +143,10 @@ impl<'a, 'b> MetricEncoder<'a, 'b> { Ok(()) } - pub fn encode_gauge(&mut self, v: impl super::EncodeGaugeValue) -> Result<(), std::fmt::Error> { + pub fn encode_gauge( + &mut self, + v: &GaugeValue, + ) -> Result<(), std::fmt::Error> { self.write_name_and_unit()?; self.encode_labels::<()>(None)?; diff --git a/src/metrics/counter.rs b/src/metrics/counter.rs index e5929a1..4b39a1d 100644 --- a/src/metrics/counter.rs +++ b/src/metrics/counter.rs @@ -179,7 +179,7 @@ where A: Atomic, { fn encode(&self, mut encoder: MetricEncoder) -> Result<(), std::fmt::Error> { - encoder.encode_counter::<(), _, u64>(self.get(), None) + encoder.encode_counter::<(), _, u64>(&self.get(), None) } fn metric_type(&self) -> MetricType { diff --git a/src/metrics/exemplar.rs b/src/metrics/exemplar.rs index 9950d95..c8478c6 100644 --- a/src/metrics/exemplar.rs +++ b/src/metrics/exemplar.rs @@ -157,7 +157,7 @@ where { fn encode(&self, mut encoder: MetricEncoder) -> Result<(), std::fmt::Error> { let (value, exemplar) = self.get(); - encoder.encode_counter(value, exemplar.as_ref()) + encoder.encode_counter(&value, exemplar.as_ref()) } fn metric_type(&self) -> MetricType { diff --git a/src/metrics/gauge.rs b/src/metrics/gauge.rs index 86b4503..151cad9 100644 --- a/src/metrics/gauge.rs +++ b/src/metrics/gauge.rs @@ -246,7 +246,7 @@ where A: Atomic, { fn encode(&self, mut encoder: MetricEncoder) -> Result<(), std::fmt::Error> { - encoder.encode_gauge(self.get()) + encoder.encode_gauge(&self.get()) } fn metric_type(&self) -> MetricType { Self::TYPE From fd9445a4e03f8f8113cf8e03b70d215f2ed9734c Mon Sep 17 00:00:00 2001 From: Max Inden Date: Sat, 10 Dec 2022 14:10:26 +0100 Subject: [PATCH 2/2] examples: Fix call without ref Signed-off-by: Max Inden --- examples/custom-metric.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/custom-metric.rs b/examples/custom-metric.rs index 4e2084d..9ad17a5 100644 --- a/examples/custom-metric.rs +++ b/examples/custom-metric.rs @@ -20,7 +20,7 @@ impl EncodeMetric for MyCustomMetric { // E.g. every CPU cycle spend in this method delays the response send to // the Prometheus server. - encoder.encode_counter::<(), _, u64>(rand::random::(), None) + encoder.encode_counter::<(), _, u64>(&rand::random::(), None) } fn metric_type(&self) -> prometheus_client::metrics::MetricType {