-
Notifications
You must be signed in to change notification settings - Fork 283
/
Copy pathotlp.rs
49 lines (45 loc) · 1.8 KB
/
otlp.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use opentelemetry_otlp::MetricsExporterBuilder;
use opentelemetry_sdk::metrics::PeriodicReader;
use opentelemetry_sdk::metrics::View;
use opentelemetry_sdk::runtime;
use tower::BoxError;
use crate::plugins::telemetry::config::MetricsCommon;
use crate::plugins::telemetry::metrics::CustomAggregationSelector;
use crate::plugins::telemetry::metrics::MetricsBuilder;
use crate::plugins::telemetry::metrics::MetricsConfigurator;
use crate::plugins::telemetry::otlp::TelemetryDataKind;
impl MetricsConfigurator for super::super::otlp::Config {
fn enabled(&self) -> bool {
self.enabled
}
fn apply(
&self,
mut builder: MetricsBuilder,
metrics_config: &MetricsCommon,
) -> Result<MetricsBuilder, BoxError> {
if !self.enabled {
return Ok(builder);
}
let exporter_builder: MetricsExporterBuilder = self.exporter(TelemetryDataKind::Metrics)?;
let exporter = exporter_builder.build_metrics_exporter(
(&self.temporality).into(),
Box::new(
CustomAggregationSelector::builder()
.boundaries(metrics_config.buckets.clone())
.build(),
),
)?;
builder.public_meter_provider_builder = builder.public_meter_provider_builder.with_reader(
PeriodicReader::builder(exporter, runtime::Tokio)
.with_interval(self.batch_processor.scheduled_delay)
.with_timeout(self.batch_processor.max_export_timeout)
.build(),
);
for metric_view in metrics_config.views.clone() {
let view: Box<dyn View> = metric_view.try_into()?;
builder.public_meter_provider_builder =
builder.public_meter_provider_builder.with_view(view);
}
Ok(builder)
}
}