@@ -6,12 +6,18 @@ use tracing_subscriber::EnvFilter;
66
77#[ tokio:: main]
88async fn main ( ) -> anyhow:: Result < ( ) > {
9- let meter_provider = init_tracing ( ) ;
10-
119 let args = cli:: Args :: parse ( ) ;
1210 let config_path = args. config . unwrap_or_else ( || "config.toml" . into ( ) ) ;
1311 let config = config:: Config :: from_file ( & config_path) ?;
1412
13+ #[ cfg( feature = "telemetry" ) ]
14+ let meter_provider = match & config. telemetry {
15+ Some ( telemetry) => Some ( init_tracing_with_telemetry ( telemetry) ) ,
16+ None => init_tracing ( ) ,
17+ } ;
18+ #[ cfg( not( feature = "telemetry" ) ) ]
19+ let meter_provider = init_tracing ( ) ;
20+
1521 #[ cfg( feature = "acme" ) ]
1622 if config. acme . is_some ( ) {
1723 return payjoin_service:: serve_acme ( config, meter_provider) . await ;
@@ -20,7 +26,6 @@ async fn main() -> anyhow::Result<()> {
2026 payjoin_service:: serve ( config, meter_provider) . await
2127}
2228
23- #[ cfg( not( feature = "telemetry" ) ) ]
2429fn init_tracing ( ) -> Option < SdkMeterProvider > {
2530 let env_filter =
2631 EnvFilter :: builder ( ) . with_default_directive ( LevelFilter :: INFO . into ( ) ) . from_env_lossy ( ) ;
@@ -30,29 +35,23 @@ fn init_tracing() -> Option<SdkMeterProvider> {
3035}
3136
3237#[ cfg( feature = "telemetry" ) ]
33- fn init_tracing ( ) -> Option < SdkMeterProvider > {
34- use opentelemetry:: trace:: TracerProvider ;
38+ fn init_tracing_with_telemetry ( telemetry : & config:: TelemetryConfig ) -> SdkMeterProvider {
3539 use opentelemetry:: KeyValue ;
36- use opentelemetry_appender_tracing:: layer:: OpenTelemetryTracingBridge ;
37- use opentelemetry_otlp:: WithHttpConfig ;
40+ use opentelemetry_otlp:: { WithExportConfig , WithHttpConfig } ;
3841 use opentelemetry_sdk:: Resource ;
3942
40- let mut resource_builder = Resource :: builder ( ) . with_service_name ( "payjoin-service" ) ;
41- if let Ok ( domain) = std:: env:: var ( "OPERATOR_DOMAIN" ) {
42- resource_builder =
43- resource_builder. with_attribute ( KeyValue :: new ( "operator.domain" , domain) ) ;
44- }
45- let resource = resource_builder. build ( ) ;
43+ let resource = Resource :: builder ( )
44+ . with_service_name ( "payjoin-service" )
45+ . with_attribute ( KeyValue :: new ( "operator.domain" , telemetry. operator_domain . clone ( ) ) )
46+ . build ( ) ;
4647
4748 let headers: std:: collections:: HashMap < String , String > =
48- std:: env:: var ( "OTEL_EXPORTER_OTLP_TOKEN" )
49- . ok ( )
50- . map ( |token| [ ( "Authorization" . to_string ( ) , format ! ( "Basic {}" , token) ) ] . into ( ) )
51- . unwrap_or_default ( ) ;
49+ [ ( "Authorization" . to_string ( ) , format ! ( "Basic {}" , telemetry. auth_token) ) ] . into ( ) ;
5250
5351 // Initialize metric exporter and provider
5452 let metric_exporter = opentelemetry_otlp:: MetricExporter :: builder ( )
5553 . with_http ( )
54+ . with_endpoint ( format ! ( "{}/v1/metrics" , & telemetry. endpoint) )
5655 . with_headers ( headers)
5756 . build ( )
5857 . expect ( "Failed to build OTLP metric exporter" ) ;
@@ -68,5 +67,5 @@ fn init_tracing() -> Option<SdkMeterProvider> {
6867
6968 opentelemetry:: global:: set_meter_provider ( meter_provider. clone ( ) ) ;
7069
71- Some ( meter_provider)
70+ meter_provider
7271}
0 commit comments