module Datadog::Tracing::Component
def build_tracer(settings, logger:)
def build_tracer(settings, logger:) # If a custom tracer has been provided, use it instead. # Ignore all other options (they should already be configured.) tracer = settings.tracing.instance return tracer unless tracer.nil? agent_settings = Configuration::AgentSettingsResolver.call(settings, logger: logger) # Apply test mode settings if test mode is activated if settings.tracing.test_mode.enabled trace_flush = build_test_mode_trace_flush(settings) sampler = build_test_mode_sampler writer = build_test_mode_writer(settings, agent_settings) else trace_flush = build_trace_flush(settings) sampler = build_sampler(settings) writer = build_writer(settings, agent_settings) end # The sampler instance is wrapped in a delegator, # so dynamic instrumentation can hot-swap it. # This prevents full tracer reinitialization on sampling changes. sampler_delegator = SamplerDelegatorComponent.new(sampler) subscribe_to_writer_events!(writer, sampler_delegator, settings.tracing.test_mode.enabled) Tracing::Tracer.new( default_service: settings.service, enabled: settings.tracing.enabled, trace_flush: trace_flush, sampler: sampler_delegator, span_sampler: build_span_sampler(settings), writer: writer, tags: build_tracer_tags(settings), ) end