pub struct EnhancedMetricsProvider { /* private fields */ }
Expand description
A comprehensive metrics provider that integrates Prometheus and OpenTelemetry systems.
This provider acts as the central metrics collection and export hub for the QoS
system,
collecting system metrics, application-specific metrics, and custom metrics. It manages
metric collection, storage, and export to monitoring systems through Prometheus and
OpenTelemetry protocols. The provider supports historical metrics collection and
can manage an embedded Prometheus server for metrics exposure.
Implementations§
Source§impl EnhancedMetricsProvider
impl EnhancedMetricsProvider
Sourcepub fn new(
metrics_config: MetricsConfig,
otel_config: &OpenTelemetryConfig,
) -> Result<Self>
pub fn new( metrics_config: MetricsConfig, otel_config: &OpenTelemetryConfig, ) -> Result<Self>
Creates a new enhanced metrics provider with Prometheus and OpenTelemetry support.
Initializes the metrics collection infrastructure including Prometheus collectors, OpenTelemetry exporters, and shared registries. Sets up metric collection for both system-level and application-specific metrics, and prepares the provider for metrics export through multiple protocols.
§Parameters
metrics_config
- Configuration for metrics collection, retention, and reportingotel_config
- OpenTelemetry-specific configuration settings
§Errors
Returns an error if the PrometheusCollector
or OpenTelemetryExporter
initialization fails.
Sourcepub async fn start_collection(self: Arc<Self>) -> Result<()>
pub async fn start_collection(self: Arc<Self>) -> Result<()>
Starts the metrics collection and reporting process.
This method initializes the background metrics collection task that periodically gathers system and blueprint metrics. It also starts the Prometheus server if configured to expose metrics via HTTP endpoints. This method should be called once after creating the provider to begin the metrics pipeline.
§Errors
Returns an error if the PrometheusServer
fails to start or if the background
metrics collection task cannot be created.
Sourcepub fn record_job_execution(
&self,
job_id: u64,
execution_time: f64,
service_id: u64,
blueprint_id: u64,
)
pub fn record_job_execution( &self, job_id: u64, execution_time: f64, service_id: u64, blueprint_id: u64, )
Records metrics for a successful job execution.
Updates both Prometheus and OpenTelemetry metrics with information about a completed job. This includes recording the execution time, incrementing job counters, and updating histograms with execution duration data. Job metrics are tagged with service ID, blueprint ID, and job ID to enable detailed filtering and analysis.
§Parameters
job_id
- Unique identifier for the executed jobexecution_time
- Duration of the job execution in secondsservice_id
- Identifier for the service that executed the jobblueprint_id
- Identifier for the blueprint that executed the job
Sourcepub fn record_job_error(&self, job_id: u64, error_type: &str)
pub fn record_job_error(&self, job_id: u64, error_type: &str)
Records metrics for a failed job execution.
Updates error counters and metrics when a job fails, categorizing the error by type. This method enables tracking of error rates and common failure modes across jobs.
§Parameters
job_id
- Unique identifier for the failed joberror_type
- Classification of the error that occurred
Sourcepub fn opentelemetry_exporter(&self) -> Arc<OpenTelemetryExporter>
pub fn opentelemetry_exporter(&self) -> Arc<OpenTelemetryExporter>
Returns a reference to the OpenTelemetryExporter
.
Provides access to the underlying OpenTelemetryExporter
for advanced operations
such as creating custom meters, recorders, or manually pushing metrics to the
OpenTelemetry backend.
Sourcepub fn prometheus_collector(&self) -> Arc<PrometheusCollector>
pub fn prometheus_collector(&self) -> Arc<PrometheusCollector>
Returns a reference to the PrometheusCollector
.
Provides access to the underlying PrometheusCollector
for advanced operations
such as registering custom collectors or directly manipulating Prometheus
metrics.
Sourcepub fn get_otel_job_executions_counter(&self) -> Counter<u64>
pub fn get_otel_job_executions_counter(&self) -> Counter<u64>
Returns a clone of the OpenTelemetry
job executions counter.
This counter tracks the total number of job executions recorded through OpenTelemetry
.
It can be used to increment execution counts from external components.
Returns the shared Prometheus
registry used for all metrics.
This registry consolidates all Prometheus
metrics from both direct Prometheus
collectors
and OpenTelemetry
exporters. It’s useful for registering additional custom collectors
or exporting all metrics to external systems.
Sourcepub fn force_flush_otel_metrics(&self) -> Result<()>
pub fn force_flush_otel_metrics(&self) -> Result<()>
Forces flush of accumulated OpenTelemetry metrics to their destination.
This method triggers an immediate export of all buffered OpenTelemetry metrics rather than waiting for the normal export interval. This is useful during graceful shutdown or when immediate metric visibility is required.
§Errors
Returns an error if the OpenTelemetryExporter
fails to force flush metrics.
Trait Implementations§
Source§impl Clone for EnhancedMetricsProvider
impl Clone for EnhancedMetricsProvider
Source§fn clone(&self) -> EnhancedMetricsProvider
fn clone(&self) -> EnhancedMetricsProvider
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl MetricsProvider for EnhancedMetricsProvider
impl MetricsProvider for EnhancedMetricsProvider
Source§async fn get_system_metrics(&self) -> SystemMetrics
async fn get_system_metrics(&self) -> SystemMetrics
Returns the latest collected SystemMetrics
.
Source§async fn get_blueprint_metrics(&self) -> BlueprintMetrics
async fn get_blueprint_metrics(&self) -> BlueprintMetrics
Returns the latest collected BlueprintMetrics
.
Source§async fn get_blueprint_status(&self) -> BlueprintStatus
async fn get_blueprint_status(&self) -> BlueprintStatus
Returns the current BlueprintStatus
.
Source§async fn get_system_metrics_history(&self) -> Vec<SystemMetrics>
async fn get_system_metrics_history(&self) -> Vec<SystemMetrics>
Returns the historical SystemMetrics
(up to max_history
).
Source§async fn get_blueprint_metrics_history(&self) -> Vec<BlueprintMetrics>
async fn get_blueprint_metrics_history(&self) -> Vec<BlueprintMetrics>
Returns the historical BlueprintMetrics
(up to max_history
).
Source§async fn add_custom_metric(&self, key: String, value: String)
async fn add_custom_metric(&self, key: String, value: String)
Adds a custom metric to the collection.
§Parameters
key
- The key for the custom metric.value
- The value of the custom metric.
Source§async fn set_blueprint_status(
&self,
status_code: u32,
status_message: Option<String>,
)
async fn set_blueprint_status( &self, status_code: u32, status_message: Option<String>, )
Sets the BlueprintStatus
.
§Parameters
status_code
- The status code to set.status_message
- An optional status message.
Source§async fn update_last_heartbeat(&self, timestamp: u64)
async fn update_last_heartbeat(&self, timestamp: u64)
Updates the last heartbeat timestamp in the BlueprintStatus
.
§Parameters
timestamp
- The Unix timestamp of the last heartbeat.
Source§async fn start_collection(&self) -> Result<()>
async fn start_collection(&self) -> Result<()>
Starts the metrics collection process for this provider.
This typically involves spawning background tasks for periodic metric gathering and potentially starting servers for metric exposure (e.g., a Prometheus server).
§Errors
Returns an error if the collection process or any associated services fail to start.
Auto Trait Implementations§
impl Freeze for EnhancedMetricsProvider
impl !RefUnwindSafe for EnhancedMetricsProvider
impl Send for EnhancedMetricsProvider
impl Sync for EnhancedMetricsProvider
impl Unpin for EnhancedMetricsProvider
impl !UnwindSafe for EnhancedMetricsProvider
Blanket Implementations§
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> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§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 moreSource§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 moreSource§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
Source§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
Source§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.Source§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.Source§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.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
Source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
Source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moreSource§impl<T> Tap for T
impl<T> Tap for T
Source§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
Source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.Source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.