pub struct PrometheusMetrics {
metrics: Registry,
namespace: Vec<String>,
children: Arc<RwLock<HashMap<String, PrometheusMetrics>>>,
counters: Arc<RwLock<HashMap<String, Counter>>>,
gauges: Arc<RwLock<HashMap<String, Gauge>>>,
histograms: Arc<RwLock<HashMap<String, Histogram>>>,
counter_families: Arc<RwLock<HashMap<String, CounterFamily>>>,
gauge_families: Arc<RwLock<HashMap<String, GaugeFamily>>>,
histogram_families: Arc<RwLock<HashMap<String, HistogramFamily>>>,
}
Expand description
A Prometheus-based implementation of a Metrics registry.
PrometheusMetrics provides a collection of metrics including Counter, Gauge, and Histogram. These metrics can be created and associated with a PrometheusMetrics collection and then used as handles for updating and populating. The PrometheusMetrics registry can then be used to collect all of the associated metrics and export them in the Prometheus text format.
This implementation provides a few features beyond the basic [prometheus] features. It supports hierarchical namespaces; any PrometheusMetrics can be used to derive a subgroup with a certain name. The subgroup is then related to the parent, and any PrometheusMetrics in the tree of related groups can be used to collect all registered metrics. The namespacing will be reflected in the fully qualified name of each metric in the Prometheus output. The subgroup relationship is pure and deterministic – calling get_subgroup with the same subgroup name will always return a handle to the same underlying PrometheusMetrics object.
PrometheusMetrics also supports querying for individual metrics by name, unlike [prometheus::Registry]. This provides a programming interface for inspecting the values of specific metrics at run-time, if that is preferable to exporting all metrics wholesale.
Fields§
§metrics: Registry
§namespace: Vec<String>
§children: Arc<RwLock<HashMap<String, PrometheusMetrics>>>
§counters: Arc<RwLock<HashMap<String, Counter>>>
§gauges: Arc<RwLock<HashMap<String, Gauge>>>
§histograms: Arc<RwLock<HashMap<String, Histogram>>>
§counter_families: Arc<RwLock<HashMap<String, CounterFamily>>>
§gauge_families: Arc<RwLock<HashMap<String, GaugeFamily>>>
§histogram_families: Arc<RwLock<HashMap<String, HistogramFamily>>>
Implementations§
Source§impl PrometheusMetrics
impl PrometheusMetrics
Sourcepub fn get_counter(&self, name: &str) -> Result<Counter, MetricsError>
pub fn get_counter(&self, name: &str) -> Result<Counter, MetricsError>
Get a counter in this sub-group by name.
Sourcepub fn get_gauge(&self, name: &str) -> Result<Gauge, MetricsError>
pub fn get_gauge(&self, name: &str) -> Result<Gauge, MetricsError>
Get a gauge in this sub-group by name.
Sourcepub fn get_histogram(&self, name: &str) -> Result<Histogram, MetricsError>
pub fn get_histogram(&self, name: &str) -> Result<Histogram, MetricsError>
Get a histogram in this sub-group by name.
Sourcepub fn get_counter_family(
&self,
name: &str,
) -> Result<CounterFamily, MetricsError>
pub fn get_counter_family( &self, name: &str, ) -> Result<CounterFamily, MetricsError>
Get a counter family in this sub-group by name.
Sourcepub fn gauge_family(&self, name: &str) -> Result<GaugeFamily, MetricsError>
pub fn gauge_family(&self, name: &str) -> Result<GaugeFamily, MetricsError>
Get a gauge family in this sub-group by name.
Sourcepub fn get_histogram_family(
&self,
name: &str,
) -> Result<HistogramFamily, MetricsError>
pub fn get_histogram_family( &self, name: &str, ) -> Result<HistogramFamily, MetricsError>
Get a histogram family in this sub-group by name.
Sourcepub fn get_subgroup<I>(
&self,
path: I,
) -> Result<PrometheusMetrics, MetricsError>
pub fn get_subgroup<I>( &self, path: I, ) -> Result<PrometheusMetrics, MetricsError>
Get a (possibly nested) subgroup of this group by its path.
fn get_metric<M: Clone>( &self, metrics: &Arc<RwLock<HashMap<String, M>>>, name: &str, ) -> Result<M, MetricsError>
fn metric_opts(&self, name: String, unit_label: Option<String>) -> Opts
Trait Implementations§
Source§impl Clone for PrometheusMetrics
impl Clone for PrometheusMetrics
Source§fn clone(&self) -> PrometheusMetrics
fn clone(&self) -> PrometheusMetrics
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for PrometheusMetrics
impl Debug for PrometheusMetrics
Source§impl Default for PrometheusMetrics
impl Default for PrometheusMetrics
Source§fn default() -> PrometheusMetrics
fn default() -> PrometheusMetrics
Source§impl Metrics for PrometheusMetrics
impl Metrics for PrometheusMetrics
Source§impl Metrics for PrometheusMetrics
impl Metrics for PrometheusMetrics
Source§fn create_histogram(
&self,
name: String,
unit_label: Option<String>,
) -> Box<dyn Histogram>
fn create_histogram( &self, name: String, unit_label: Option<String>, ) -> Box<dyn Histogram>
Source§fn create_text(&self, name: String)
fn create_text(&self, name: String)
Source§fn counter_family(
&self,
name: String,
labels: Vec<String>,
) -> Box<dyn CounterFamily>
fn counter_family( &self, name: String, labels: Vec<String>, ) -> Box<dyn CounterFamily>
Source§fn gauge_family(
&self,
name: String,
labels: Vec<String>,
) -> Box<dyn GaugeFamily>
fn gauge_family( &self, name: String, labels: Vec<String>, ) -> Box<dyn GaugeFamily>
Source§fn histogram_family(
&self,
name: String,
labels: Vec<String>,
) -> Box<dyn HistogramFamily>
fn histogram_family( &self, name: String, labels: Vec<String>, ) -> Box<dyn HistogramFamily>
Source§fn text_family(&self, name: String, labels: Vec<String>) -> Box<dyn TextFamily>
fn text_family(&self, name: String, labels: Vec<String>) -> Box<dyn TextFamily>
Auto Trait Implementations§
impl Freeze for PrometheusMetrics
impl !RefUnwindSafe for PrometheusMetrics
impl Send for PrometheusMetrics
impl Sync for PrometheusMetrics
impl Unpin for PrometheusMetrics
impl !UnwindSafe for PrometheusMetrics
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.