22//!
33//! This crate provides a declarative way to configure OpenTelemetry SDKs using YAML files.
44
5- pub mod telemetry_config;
6- pub mod metrics;
75pub mod logs;
6+ pub mod metrics;
7+ pub mod telemetry_config;
88
99use opentelemetry:: global;
10- use opentelemetry_sdk:: { error:: OTelSdkResult , logs:: SdkLoggerProvider , metrics:: SdkMeterProvider , trace:: SdkTracerProvider } ;
10+ use opentelemetry_sdk:: {
11+ error:: OTelSdkResult , logs:: SdkLoggerProvider , metrics:: SdkMeterProvider ,
12+ trace:: SdkTracerProvider ,
13+ } ;
1114
1215use crate :: {
13- logs:: {
14- BatchExporterFactory ,
15- LogsConfig ,
16- LogsBatchExporterFactory ,
17- } ,
16+ logs:: { BatchExporterFactory , LogsBatchExporterFactory , LogsConfig } ,
1817 metrics:: {
19- MetricsConfig ,
20- MetricsPeriodicExporterFactory ,
21- MetricsPullExporterFactory ,
22- PeriodicExporterFactory ,
23- PullExporterFactory ,
18+ MetricsConfig , MetricsPeriodicExporterFactory , MetricsPullExporterFactory ,
19+ PeriodicExporterFactory , PullExporterFactory ,
2420 } ,
2521 telemetry_config:: TelemetryConfig ,
2622} ;
2723
28- pub struct Configurator {
29- }
24+ pub struct Configurator { }
3025
3126impl Configurator {
3227 pub fn new ( ) -> Self {
33- Self {
34- }
28+ Self { }
3529 }
3630
37- pub fn configure_telemetry_from_yaml ( & self , telemetry_config_str : String ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
31+ pub fn configure_telemetry_from_yaml (
32+ & self ,
33+ telemetry_config_str : String ,
34+ ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
3835 let config = TelemetryConfig :: from_yaml ( & telemetry_config_str) ?;
3936 self . configure_telemetry ( config)
4037 }
4138
42- pub fn configure_telemetry_from_yaml_file ( & self , file_path : & str ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
39+ pub fn configure_telemetry_from_yaml_file (
40+ & self ,
41+ file_path : & str ,
42+ ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
4343 let config = TelemetryConfig :: from_yaml_file ( file_path) ?;
4444 self . configure_telemetry ( config)
4545 }
4646
47- pub fn configure_telemetry ( & self , telemetry_config : TelemetryConfig ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
48-
47+ pub fn configure_telemetry (
48+ & self ,
49+ telemetry_config : TelemetryConfig ,
50+ ) -> Result < TelemetryProviders , Box < dyn std:: error:: Error > > {
4951 let mut configured_telemetry_providers = TelemetryProviders :: new ( ) ;
5052
5153 let resource = Self :: as_resource ( telemetry_config. resource ) ;
5254 if let Some ( metrics_config) = telemetry_config. metrics {
53- let sdk_meter_provider_option = self . build_metrics_sdk_provider ( metrics_config, resource. clone ( ) ) ?;
54- configured_telemetry_providers = configured_telemetry_providers
55- . with_meter_provider ( sdk_meter_provider_option) ;
55+ let sdk_meter_provider_option =
56+ self . build_metrics_sdk_provider ( metrics_config, resource. clone ( ) ) ?;
57+ configured_telemetry_providers =
58+ configured_telemetry_providers. with_meter_provider ( sdk_meter_provider_option) ;
5659 }
5760
5861 if let Some ( logs_config) = telemetry_config. logs {
59- let sdk_logger_provider_option = self . build_logs_sdk_provider ( logs_config, resource. clone ( ) ) ?;
60- configured_telemetry_providers = configured_telemetry_providers
61- . with_logs_provider ( sdk_logger_provider_option) ;
62+ let sdk_logger_provider_option =
63+ self . build_logs_sdk_provider ( logs_config, resource. clone ( ) ) ?;
64+ configured_telemetry_providers =
65+ configured_telemetry_providers. with_logs_provider ( sdk_logger_provider_option) ;
6266 }
6367
6468 //TODO: Add similar configuration for traces when implemented
6569 Ok ( configured_telemetry_providers)
6670 }
6771
68- fn build_metrics_sdk_provider ( & self , metrics_config : MetricsConfig , resource : opentelemetry_sdk:: Resource ) -> Result < SdkMeterProvider , Box < dyn std:: error:: Error > > {
69-
70- let mut provider_builder = SdkMeterProvider :: builder ( )
71- . with_resource ( resource) ;
72+ fn build_metrics_sdk_provider (
73+ & self ,
74+ metrics_config : MetricsConfig ,
75+ resource : opentelemetry_sdk:: Resource ,
76+ ) -> Result < SdkMeterProvider , Box < dyn std:: error:: Error > > {
77+ let mut provider_builder = SdkMeterProvider :: builder ( ) . with_resource ( resource) ;
7278
7379 for reader_config in metrics_config. readers {
7480 if let Some ( periodic_reader) = reader_config. periodic {
7581 let periodic_exporter_config = periodic_reader. exporter ;
7682 if let Some ( periodic_exporter_mapping) = periodic_exporter_config. as_mapping ( ) {
7783 for ( key, value) in periodic_exporter_mapping {
7884 if let Some ( periodic_exporter_factory_name) = key. as_str ( ) {
79- let exporter_factory = PeriodicExporterFactory :: from_name ( periodic_exporter_factory_name) ?;
85+ let exporter_factory =
86+ PeriodicExporterFactory :: from_name ( periodic_exporter_factory_name) ?;
8087 let config = value;
8188 match exporter_factory {
8289 PeriodicExporterFactory :: Stdout ( factory) => {
83- let periodic_exporter = factory. create_metrics_periodic_exporter ( config) ?;
84- provider_builder = provider_builder. with_periodic_exporter ( periodic_exporter) ;
85- } ,
90+ let periodic_exporter =
91+ factory. create_metrics_periodic_exporter ( config) ?;
92+ provider_builder =
93+ provider_builder. with_periodic_exporter ( periodic_exporter) ;
94+ }
8695 PeriodicExporterFactory :: Otlp ( factory) => {
87- let periodic_exporter = factory. create_metrics_periodic_exporter ( config) ?;
88- provider_builder = provider_builder. with_periodic_exporter ( periodic_exporter) ;
89- } ,
96+ let periodic_exporter =
97+ factory. create_metrics_periodic_exporter ( config) ?;
98+ provider_builder =
99+ provider_builder. with_periodic_exporter ( periodic_exporter) ;
100+ }
90101 }
91102 } else {
92103 return Err ( "Invalid periodic exporter factory configuration" . into ( ) ) ;
@@ -101,13 +112,15 @@ impl Configurator {
101112 if let Some ( pull_exporter_mapping) = pull_exporter_config. as_mapping ( ) {
102113 for ( key, value) in pull_exporter_mapping {
103114 if let Some ( pull_exporter_factory_name) = key. as_str ( ) {
104- let exporter_factory = PullExporterFactory :: from_name ( pull_exporter_factory_name) ?;
115+ let exporter_factory =
116+ PullExporterFactory :: from_name ( pull_exporter_factory_name) ?;
105117 let config = value;
106118 match exporter_factory {
107119 PullExporterFactory :: Prometheus ( factory) => {
108- let pull_exporter = factory. create_metrics_pull_exporter ( config) ?;
120+ let pull_exporter =
121+ factory. create_metrics_pull_exporter ( config) ?;
109122 provider_builder = provider_builder. with_reader ( pull_exporter) ;
110- } ,
123+ }
111124 }
112125 } else {
113126 return Err ( "Invalid pull exporter factory configuration" . into ( ) ) ;
@@ -124,28 +137,35 @@ impl Configurator {
124137 Ok ( provider)
125138 }
126139
127- fn build_logs_sdk_provider ( & self , logs_config : LogsConfig , resource : opentelemetry_sdk:: Resource ) -> Result < SdkLoggerProvider , Box < dyn std:: error:: Error > > {
128-
129- let mut provider_builder = SdkLoggerProvider :: builder ( )
130- . with_resource ( resource) ;
140+ fn build_logs_sdk_provider (
141+ & self ,
142+ logs_config : LogsConfig ,
143+ resource : opentelemetry_sdk:: Resource ,
144+ ) -> Result < SdkLoggerProvider , Box < dyn std:: error:: Error > > {
145+ let mut provider_builder = SdkLoggerProvider :: builder ( ) . with_resource ( resource) ;
131146
132147 for processor_config in logs_config. processors {
133148 if let Some ( batch_processor) = processor_config. batch {
134149 let batch_exporter_config = batch_processor. exporter ;
135150 if let Some ( batch_exporter_mapping) = batch_exporter_config. as_mapping ( ) {
136151 for ( key, value) in batch_exporter_mapping {
137152 if let Some ( batch_exporter_factory_name) = key. as_str ( ) {
138- let exporter_factory = BatchExporterFactory :: from_name ( batch_exporter_factory_name) ?;
153+ let exporter_factory =
154+ BatchExporterFactory :: from_name ( batch_exporter_factory_name) ?;
139155 let config = value;
140156 match exporter_factory {
141157 BatchExporterFactory :: Stdout ( factory) => {
142- let batch_exporter = factory. create_logs_batch_exporter ( config) ?;
143- provider_builder = provider_builder. with_batch_exporter ( batch_exporter) ;
144- } ,
158+ let batch_exporter =
159+ factory. create_logs_batch_exporter ( config) ?;
160+ provider_builder =
161+ provider_builder. with_batch_exporter ( batch_exporter) ;
162+ }
145163 BatchExporterFactory :: Otlp ( factory) => {
146- let batch_exporter = factory. create_logs_batch_exporter ( config) ?;
147- provider_builder = provider_builder. with_batch_exporter ( batch_exporter) ;
148- } ,
164+ let batch_exporter =
165+ factory. create_logs_batch_exporter ( config) ?;
166+ provider_builder =
167+ provider_builder. with_batch_exporter ( batch_exporter) ;
168+ }
149169 }
150170 } else {
151171 return Err ( "Invalid batch exporter factory configuration" . into ( ) ) ;
@@ -161,10 +181,13 @@ impl Configurator {
161181 Ok ( provider)
162182 }
163183
164- fn as_resource ( resource_attributes : std:: collections:: HashMap < String , String > ) -> opentelemetry_sdk:: Resource {
184+ fn as_resource (
185+ resource_attributes : std:: collections:: HashMap < String , String > ,
186+ ) -> opentelemetry_sdk:: Resource {
165187 let mut resource_builder = opentelemetry_sdk:: Resource :: builder ( ) ;
166188 for ( key, value) in resource_attributes {
167- resource_builder = resource_builder. with_attribute ( opentelemetry:: KeyValue :: new ( key, value) ) ;
189+ resource_builder =
190+ resource_builder. with_attribute ( opentelemetry:: KeyValue :: new ( key, value) ) ;
168191 }
169192 resource_builder. build ( )
170193 }
0 commit comments