lib/opentracing/instrumentation/sidekiq/server_middleware.rb in opentracing-instrumentation-0.1.16 vs lib/opentracing/instrumentation/sidekiq/server_middleware.rb in opentracing-instrumentation-0.1.17

- old
+ new

@@ -7,45 +7,72 @@ module Sidekiq # Sidekiq server middleware class ServerMiddleware extend Forwardable - DEFAULT_SPAN_NAME = 'sidekiq_perform' DEFAULT_SPAN_KIND = 'consumer' + DEFAULT_OPERATION_NAME_TEMPLATE = \ + 'sidekiq_perform(%<sidekiq.class>s)' + DEFAULT_OPERATION_NAME_BUILDER = \ + Common::OperationNameBuilder.new( + operation_name_template: DEFAULT_OPERATION_NAME_TEMPLATE, + ) + attr_reader :tracer attr_reader :tagger attr_reader :error_writter + attr_reader :logger attr_reader :span_kind - attr_reader :span_name + attr_reader :operation_name_builder + # rubocop:disable Metrics/ParameterLists def initialize( tracer: OpenTracing.global_tracer, tagger: JobTagger.new, error_writter: Common::ErrorWriter.new, + logger: nil, span_kind: DEFAULT_SPAN_KIND, - span_name: DEFAULT_SPAN_NAME + operation_name_builder: DEFAULT_OPERATION_NAME_BUILDER ) @tracer = tracer @tagger = tagger @error_writter = error_writter + @logger = logger @span_kind = span_kind - @span_name = span_name + @operation_name_builder = operation_name_builder end + # rubocop:enable Metrics/ParameterLists def call(_worker, job, _queue) - scope = tracer.start_active_span(span_name, **build_span_args(job)) + scope = safe_start_scope(job) log(scope.span, job) do yield end ensure - scope.close + scope&.close end private + def safe_start_scope(job) + tags = tagger.build_tags(job, span_kind) + operation_name = operation_name_builder.build(tags) + tracer.start_active_span(operation_name, tags: tags, **build_span_args(job)) + rescue StandardError => e + logger&.error(e) + end + + def safe_close_scope(scope) + return unless socpe + + scope.close + rescue StandardError => e + logger&.error(e) + end + def log(span, job) tagger.write_args_log(span, job['jid'], job['args']) yield rescue StandardError => e @@ -54,10 +81,9 @@ end def build_span_args(job) { references: extract_references(job), - tags: tagger.build_tags(job, span_kind), } end def extract_references(job) span_context = tracer.extract(OpenTracing::FORMAT_TEXT_MAP, job)