Loading lib/labkit/tracing/open_telemetry_factory.rb +17 −49 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ module Labkit # @yield [config] Optional configuration block for OpenTelemetry SDK customization # @yieldparam config [OpenTelemetry::SDK::Configurator] The SDK configurator # @return [Tracer, nil] The configured tracer or nil if initialization fails def create_tracer(service_name, connection_string, &config_block) def create_tracer(service_name, connection_string, &) return unless connection_string.present? options = parse_otlp_connection_string(connection_string) Loading @@ -42,13 +42,7 @@ module Labkit OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => service_name ) # If user provided a config block, use SDK.configure for full configurability # Otherwise, use the manual configuration for backward compatibility if config_block configure_with_sdk(service_name, base_resource, sampler, exporter, &config_block) else configure_manually(service_name, base_resource, sampler, exporter) end configure(service_name, base_resource, sampler, exporter, &) extra_params = options.except( :sampler, Loading @@ -73,26 +67,16 @@ module Labkit private def configure_with_sdk(service_name, base_resource, sampler, exporter) # Use OpenTelemetry::SDK.configure for user customization # We'll create the provider manually first with sampler, then allow customization def configure(service_name, base_resource, sampler, exporter) if block_given? OpenTelemetry::SDK.configure do |c| c.service_name = service_name c.resource = base_resource # Add span processor with our exporter from GITLAB_TRACING if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) end c.add_span_processor(processor) end processor = create_span_processor(exporter) c.add_span_processor(processor) if processor # Yield to user configuration block (runs last, can override/extend) yield(c) if block_given? yield(c) end # SDK.configure doesn't expose sampler configuration directly Loading @@ -101,48 +85,32 @@ module Labkit current_provider = OpenTelemetry.tracer_provider return unless current_provider.is_a?(OpenTelemetry::SDK::Trace::TracerProvider) # Create new provider with sampler, preserving resource new_provider = OpenTelemetry::SDK::Trace::TracerProvider.new( resource: current_provider.resource, sampler: sampler ) # Re-add span processor with our exporter if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) # Create new provider with sampler, preserving resource from SDK.configure create_and_configure_provider(current_provider.resource, sampler, exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) create_and_configure_provider(base_resource, sampler, exporter) end new_provider.add_span_processor(processor) end # Set globally OpenTelemetry.tracer_provider = new_provider end def create_span_processor(exporter) return nil unless exporter def configure_manually(_service_name, base_resource, sampler, exporter) # Manual configuration (backward compatible) span_processors = [] if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) end span_processors << processor end def create_and_configure_provider(resource, sampler, exporter) tracer_provider = OpenTelemetry::SDK::Trace::TracerProvider.new( resource: base_resource, resource: resource, sampler: sampler ) span_processors.each { |processor| tracer_provider.add_span_processor(processor) } processor = create_span_processor(exporter) tracer_provider.add_span_processor(processor) if processor # Register the tracer provider globally OpenTelemetry.tracer_provider = tracer_provider end Loading Loading
lib/labkit/tracing/open_telemetry_factory.rb +17 −49 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ module Labkit # @yield [config] Optional configuration block for OpenTelemetry SDK customization # @yieldparam config [OpenTelemetry::SDK::Configurator] The SDK configurator # @return [Tracer, nil] The configured tracer or nil if initialization fails def create_tracer(service_name, connection_string, &config_block) def create_tracer(service_name, connection_string, &) return unless connection_string.present? options = parse_otlp_connection_string(connection_string) Loading @@ -42,13 +42,7 @@ module Labkit OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => service_name ) # If user provided a config block, use SDK.configure for full configurability # Otherwise, use the manual configuration for backward compatibility if config_block configure_with_sdk(service_name, base_resource, sampler, exporter, &config_block) else configure_manually(service_name, base_resource, sampler, exporter) end configure(service_name, base_resource, sampler, exporter, &) extra_params = options.except( :sampler, Loading @@ -73,26 +67,16 @@ module Labkit private def configure_with_sdk(service_name, base_resource, sampler, exporter) # Use OpenTelemetry::SDK.configure for user customization # We'll create the provider manually first with sampler, then allow customization def configure(service_name, base_resource, sampler, exporter) if block_given? OpenTelemetry::SDK.configure do |c| c.service_name = service_name c.resource = base_resource # Add span processor with our exporter from GITLAB_TRACING if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) end c.add_span_processor(processor) end processor = create_span_processor(exporter) c.add_span_processor(processor) if processor # Yield to user configuration block (runs last, can override/extend) yield(c) if block_given? yield(c) end # SDK.configure doesn't expose sampler configuration directly Loading @@ -101,48 +85,32 @@ module Labkit current_provider = OpenTelemetry.tracer_provider return unless current_provider.is_a?(OpenTelemetry::SDK::Trace::TracerProvider) # Create new provider with sampler, preserving resource new_provider = OpenTelemetry::SDK::Trace::TracerProvider.new( resource: current_provider.resource, sampler: sampler ) # Re-add span processor with our exporter if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) # Create new provider with sampler, preserving resource from SDK.configure create_and_configure_provider(current_provider.resource, sampler, exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) create_and_configure_provider(base_resource, sampler, exporter) end new_provider.add_span_processor(processor) end # Set globally OpenTelemetry.tracer_provider = new_provider end def create_span_processor(exporter) return nil unless exporter def configure_manually(_service_name, base_resource, sampler, exporter) # Manual configuration (backward compatible) span_processors = [] if exporter processor = if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) if exporter.is_a?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter) OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter) else OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter) end span_processors << processor end def create_and_configure_provider(resource, sampler, exporter) tracer_provider = OpenTelemetry::SDK::Trace::TracerProvider.new( resource: base_resource, resource: resource, sampler: sampler ) span_processors.each { |processor| tracer_provider.add_span_processor(processor) } processor = create_span_processor(exporter) tracer_provider.add_span_processor(processor) if processor # Register the tracer provider globally OpenTelemetry.tracer_provider = tracer_provider end Loading