lib/ddtrace/contrib/sidekiq/tracer.rb in ddtrace-0.7.0 vs lib/ddtrace/contrib/sidekiq/tracer.rb in ddtrace-0.7.1

- old
+ new

@@ -41,33 +41,62 @@ # configure the Tracer instance @tracer.configure( hostname: user_config[:trace_agent_hostname], port: user_config[:trace_agent_port] ) - - # configure Sidekiq service - @tracer.set_service_info( - @sidekiq_service, - 'sidekiq', - Datadog::Ext::AppTypes::WORKER - ) end def call(worker, job, queue) - @tracer.trace('sidekiq.job', service: @sidekiq_service, span_type: 'job') do |span| - if job['wrapped'] - # If class is wrapping something else, the interesting resource info - # is the underlying, wrapped class, and not the wrapper. - span.resource = job['wrapped'] - span.set_tag('sidekiq.job.wrapper', job['class']) - else - span.resource = job['class'] - end + # If class is wrapping something else, the interesting resource info + # is the underlying, wrapped class, and not the wrapper. + resource = if job['wrapped'] + job['wrapped'] + else + job['class'] + end + + # configure Sidekiq service + service = sidekiq_service(resource_worker(resource)) + set_service_info(service) + + @tracer.trace('sidekiq.job', service: service, span_type: 'job') do |span| + span.resource = resource span.set_tag('sidekiq.job.id', job['jid']) span.set_tag('sidekiq.job.retry', job['retry']) span.set_tag('sidekiq.job.queue', job['queue']) + span.set_tag('sidekiq.job.wrapper', job['class']) if job['wrapped'] + yield end + end + + private + + # rubocop:disable Lint/HandleExceptions + def resource_worker(resource) + Object.const_get(resource) + rescue NameError + end + + def worker_config(worker) + if worker.respond_to?(:datadog_tracer_config) + worker.datadog_tracer_config + else + {} + end + end + + def sidekiq_service(resource) + worker_config(resource).fetch(:service, @sidekiq_service) + end + + def set_service_info(service) + return if @tracer.services[service] + @tracer.set_service_info( + service, + 'sidekiq', + Datadog::Ext::AppTypes::WORKER + ) end end end end end