@@ -121,32 +121,48 @@ async fn main() -> anyhow::Result<()> {
121121 trace_config. sampler = Box :: new ( Sampler :: AlwaysOn ) ;
122122 trace_config. id_generator = Box :: new ( RandomIdGenerator :: default ( ) ) ;
123123
124- let provider = opentelemetry_datadog:: new_pipeline ( )
125- . with_service_name ( env ! ( "CARGO_PKG_NAME" ) )
126- . with_api_version ( opentelemetry_datadog:: ApiVersion :: Version05 )
127- . with_agent_endpoint ( & otlp_endpoint)
128- . with_trace_config ( trace_config)
129- . install_batch ( )
130- . unwrap ( ) ;
131- global:: set_tracer_provider ( provider. clone ( ) ) ;
132-
133- let scope = InstrumentationScope :: builder ( "opentelemetry-datadog" )
134- . with_version ( env ! ( "CARGO_PKG_VERSION" ) )
135- . with_schema_url ( semcov:: SCHEMA_URL )
136- . with_attributes ( None )
137- . build ( ) ;
138-
139- let tracer = provider. tracer_with_scope ( scope) ;
140- tracer. in_span ( "span_main" , |_span| {
141- info ! (
142- message = "Tracing enabled" ,
143- endpoint = %otlp_endpoint
144- ) ;
145- } ) ;
146- tracing_subscriber:: registry ( )
147- . with ( tracing_opentelemetry:: OpenTelemetryLayer :: new ( tracer) )
148- . with ( tracing_subscriber:: fmt:: layer ( ) . with_filter ( log_filter) )
149- . init ( ) ;
124+ let provider = if config. tracing_enabled {
125+ Some (
126+ opentelemetry_datadog:: new_pipeline ( )
127+ . with_service_name ( env ! ( "CARGO_PKG_NAME" ) )
128+ . with_api_version ( opentelemetry_datadog:: ApiVersion :: Version05 )
129+ . with_agent_endpoint ( & otlp_endpoint)
130+ . with_trace_config ( trace_config)
131+ . install_batch ( )
132+ . unwrap ( ) ,
133+ )
134+ } else {
135+ None
136+ } ;
137+
138+ if let Some ( ref provider) = provider {
139+ global:: set_tracer_provider ( provider. clone ( ) ) ;
140+ }
141+
142+ if let Some ( ref provider) = provider {
143+ let scope = InstrumentationScope :: builder ( "opentelemetry-datadog" )
144+ . with_version ( env ! ( "CARGO_PKG_VERSION" ) )
145+ . with_schema_url ( semcov:: SCHEMA_URL )
146+ . with_attributes ( None )
147+ . build ( ) ;
148+
149+ let tracer = provider. tracer_with_scope ( scope) ;
150+ tracer. in_span ( "span_main" , |_span| {
151+ info ! (
152+ message = "Tracing enabled" ,
153+ endpoint = %otlp_endpoint
154+ ) ;
155+ } ) ;
156+
157+ tracing_subscriber:: registry ( )
158+ . with ( tracing_opentelemetry:: OpenTelemetryLayer :: new ( tracer) )
159+ . with ( tracing_subscriber:: fmt:: layer ( ) . with_filter ( log_filter) )
160+ . init ( ) ;
161+ } else {
162+ tracing_subscriber:: registry ( )
163+ . with ( tracing_subscriber:: fmt:: layer ( ) . with_filter ( log_filter) )
164+ . init ( ) ;
165+ }
150166
151167 info ! (
152168 message = "Starting ingress service" ,
@@ -184,8 +200,28 @@ async fn main() -> anyhow::Result<()> {
184200 address = %addr
185201 ) ;
186202
187- handle. stopped ( ) . await ;
188- let _ = provider. shutdown ( ) ;
203+ // Set up graceful shutdown
204+ tokio:: select! {
205+ _ = handle. stopped( ) => {
206+ info!( "Server stopped" ) ;
207+ }
208+ _ = tokio:: signal:: ctrl_c( ) => {
209+ info!( "Received shutdown signal" ) ;
210+ }
211+ }
212+
213+ // Give time for any remaining spans to be processed
214+ tokio:: time:: sleep ( tokio:: time:: Duration :: from_millis ( 500 ) ) . await ;
215+
216+ // Shutdown tracer provider if it exists
217+ if let Some ( provider) = provider {
218+ info ! ( "Shutting down tracer provider" ) ;
219+ if let Err ( e) = provider. shutdown ( ) {
220+ warn ! ( "Error shutting down tracer provider: {}" , e) ;
221+ }
222+ }
223+
224+ info ! ( "Ingress service shutdown complete" ) ;
189225 Ok ( ( ) )
190226}
191227
0 commit comments