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