opentracing-instrumentation 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/GEM_VERSION +1 -1
- data/Gemfile.lock +1 -1
- data/lib/opentracing/instrumentation/common.rb +2 -0
- data/lib/opentracing/instrumentation/common/operation_name_builder.rb +23 -0
- data/lib/opentracing/instrumentation/sidekiq/client_middleware.rb +35 -10
- data/lib/opentracing/instrumentation/sidekiq/job_tagger.rb +5 -5
- data/lib/opentracing/instrumentation/sidekiq/server_middleware.rb +33 -7
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9ca5229070a9ceefdba01deafe855a8c506018111a073bc627f52b77e67ec07b
         | 
| 4 | 
            +
              data.tar.gz: 7afb446993601e8fa9df04c0fca0537495b7125724449c6eab721a45c5e7e5cc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2ff9411175de0c6b489c05da90e068cc85c4ba177f17bea72658b51ec6258935fdc0b264e4577d64a0ecfc04cb670085ea438c0ff04485f4e97bd3de9008d902
         | 
| 7 | 
            +
              data.tar.gz: 1058ed6b1b347a9a596a8e76e14a3822b51cf6b0911fe05f03933dee533db10cd3fd138f3d659523ee907c5cf8b394ef1251bb1332a6705ad306c3e50e3fb297
         | 
    
        data/GEM_VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.1. | 
| 1 | 
            +
            0.1.17
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module OpenTracing
         | 
| 4 | 
            +
              module Instrumentation
         | 
| 5 | 
            +
                module Common
         | 
| 6 | 
            +
                  # Build operation name by template and tags
         | 
| 7 | 
            +
                  class OperationNameBuilder
         | 
| 8 | 
            +
                    def initialize(operation_name_template:)
         | 
| 9 | 
            +
                      @operation_name_template = operation_name_template
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    # build operation name with tags
         | 
| 13 | 
            +
                    def build(tags)
         | 
| 14 | 
            +
                      format(operation_name_template, **tags)
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    attr_reader :operation_name_template
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -7,41 +7,68 @@ module OpenTracing | |
| 7 7 | 
             
                  class ClientMiddleware
         | 
| 8 8 | 
             
                    extend Forwardable
         | 
| 9 9 |  | 
| 10 | 
            -
                    DEFAULT_SPAN_NAME = 'sidekiq_enqueue'
         | 
| 11 10 | 
             
                    DEFAULT_SPAN_KIND = 'producer'
         | 
| 12 11 |  | 
| 12 | 
            +
                    DEFAULT_OPERATION_NAME_TEMPLATE = \
         | 
| 13 | 
            +
                      'sidekiq_enqueue(%<sidekiq.class>s)'
         | 
| 14 | 
            +
                    DEFAULT_OPERATION_NAME_BUILDER = \
         | 
| 15 | 
            +
                      Common::OperationNameBuilder.new(
         | 
| 16 | 
            +
                        operation_name_template: DEFAULT_OPERATION_NAME_TEMPLATE,
         | 
| 17 | 
            +
                      )
         | 
| 18 | 
            +
             | 
| 13 19 | 
             
                    attr_reader :tracer
         | 
| 14 20 | 
             
                    attr_reader :tagger
         | 
| 15 21 | 
             
                    attr_reader :error_writter
         | 
| 22 | 
            +
                    attr_reader :logger
         | 
| 16 23 | 
             
                    attr_reader :span_kind
         | 
| 17 | 
            -
                    attr_reader : | 
| 24 | 
            +
                    attr_reader :operation_name_builder
         | 
| 18 25 |  | 
| 26 | 
            +
                    # rubocop:disable Metrics/ParameterLists
         | 
| 19 27 | 
             
                    def initialize(
         | 
| 20 28 | 
             
                      tracer: OpenTracing.global_tracer,
         | 
| 21 29 | 
             
                      tagger: JobTagger.new,
         | 
| 22 30 | 
             
                      error_writter: Common::ErrorWriter.new,
         | 
| 31 | 
            +
                      logger: nil,
         | 
| 23 32 | 
             
                      span_kind: DEFAULT_SPAN_KIND,
         | 
| 24 | 
            -
                       | 
| 33 | 
            +
                      operation_name_builder: DEFAULT_OPERATION_NAME_BUILDER
         | 
| 25 34 | 
             
                    )
         | 
| 26 35 | 
             
                      @tracer = tracer
         | 
| 27 36 | 
             
                      @tagger = tagger
         | 
| 28 37 | 
             
                      @error_writter = error_writter
         | 
| 38 | 
            +
                      @logger = logger
         | 
| 29 39 | 
             
                      @span_kind = span_kind
         | 
| 30 | 
            -
                      @ | 
| 40 | 
            +
                      @operation_name_builder = operation_name_builder
         | 
| 31 41 | 
             
                    end
         | 
| 42 | 
            +
                    # rubocop:enable Metrics/ParameterLists
         | 
| 32 43 |  | 
| 33 44 | 
             
                    def call(_worker_class, job, _queue, _redis_pool)
         | 
| 34 | 
            -
                      scope =  | 
| 45 | 
            +
                      scope = safe_start_scope(job)
         | 
| 35 46 | 
             
                      inject(scope.span.context, job)
         | 
| 36 47 | 
             
                      log(scope.span, job) do
         | 
| 37 48 | 
             
                        yield
         | 
| 38 49 | 
             
                      end
         | 
| 39 50 | 
             
                    ensure
         | 
| 40 | 
            -
                      scope | 
| 51 | 
            +
                      safe_close_scope(scope)
         | 
| 41 52 | 
             
                    end
         | 
| 42 53 |  | 
| 43 54 | 
             
                    private
         | 
| 44 55 |  | 
| 56 | 
            +
                    def safe_start_scope(job)
         | 
| 57 | 
            +
                      tags = build_tags(job)
         | 
| 58 | 
            +
                      operation_name = operation_name_builder.build(tags)
         | 
| 59 | 
            +
                      tracer.start_active_span(operation_name, tags: tags)
         | 
| 60 | 
            +
                    rescue StandardError => e
         | 
| 61 | 
            +
                      logger&.error(e)
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    def safe_close_scope(scope)
         | 
| 65 | 
            +
                      return unless scope
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                      scope.close
         | 
| 68 | 
            +
                    rescue StandardError => e
         | 
| 69 | 
            +
                      logger&.error(e)
         | 
| 70 | 
            +
                    end
         | 
| 71 | 
            +
             | 
| 45 72 | 
             
                    def log(span, job)
         | 
| 46 73 | 
             
                      tagger.write_args_log(span, job['jid'], job['args'])
         | 
| 47 74 |  | 
| @@ -51,10 +78,8 @@ module OpenTracing | |
| 51 78 | 
             
                      raise
         | 
| 52 79 | 
             
                    end
         | 
| 53 80 |  | 
| 54 | 
            -
                    def  | 
| 55 | 
            -
                       | 
| 56 | 
            -
                        tags: tagger.build_tags(job, span_kind),
         | 
| 57 | 
            -
                      }
         | 
| 81 | 
            +
                    def build_tags(job)
         | 
| 82 | 
            +
                      tagger.build_tags(job, span_kind)
         | 
| 58 83 | 
             
                    end
         | 
| 59 84 |  | 
| 60 85 | 
             
                    def inject(span_context, carrier)
         | 
| @@ -30,11 +30,11 @@ module OpenTracing | |
| 30 30 | 
             
                    # build tags from job data and static attributes
         | 
| 31 31 | 
             
                    def build_tags(job, span_kind)
         | 
| 32 32 | 
             
                      {
         | 
| 33 | 
            -
                         | 
| 34 | 
            -
                        'span.kind'  | 
| 35 | 
            -
                        'sidekiq.queue'  | 
| 36 | 
            -
                        'sidekiq.class'  | 
| 37 | 
            -
                        'sidekiq.retry'  | 
| 33 | 
            +
                        component: component,
         | 
| 34 | 
            +
                        'span.kind': span_kind,
         | 
| 35 | 
            +
                        'sidekiq.queue': job['queue'],
         | 
| 36 | 
            +
                        'sidekiq.class': job['class'],
         | 
| 37 | 
            +
                        'sidekiq.retry': job['retry'],
         | 
| 38 38 | 
             
                      }
         | 
| 39 39 | 
             
                    end
         | 
| 40 40 |  | 
| @@ -9,41 +9,68 @@ module OpenTracing | |
| 9 9 | 
             
                  class ServerMiddleware
         | 
| 10 10 | 
             
                    extend Forwardable
         | 
| 11 11 |  | 
| 12 | 
            -
                    DEFAULT_SPAN_NAME = 'sidekiq_perform'
         | 
| 13 12 | 
             
                    DEFAULT_SPAN_KIND = 'consumer'
         | 
| 14 13 |  | 
| 14 | 
            +
                    DEFAULT_OPERATION_NAME_TEMPLATE = \
         | 
| 15 | 
            +
                      'sidekiq_perform(%<sidekiq.class>s)'
         | 
| 16 | 
            +
                    DEFAULT_OPERATION_NAME_BUILDER = \
         | 
| 17 | 
            +
                      Common::OperationNameBuilder.new(
         | 
| 18 | 
            +
                        operation_name_template: DEFAULT_OPERATION_NAME_TEMPLATE,
         | 
| 19 | 
            +
                      )
         | 
| 20 | 
            +
             | 
| 15 21 | 
             
                    attr_reader :tracer
         | 
| 16 22 | 
             
                    attr_reader :tagger
         | 
| 17 23 | 
             
                    attr_reader :error_writter
         | 
| 24 | 
            +
                    attr_reader :logger
         | 
| 18 25 | 
             
                    attr_reader :span_kind
         | 
| 19 | 
            -
                    attr_reader : | 
| 26 | 
            +
                    attr_reader :operation_name_builder
         | 
| 20 27 |  | 
| 28 | 
            +
                    # rubocop:disable Metrics/ParameterLists
         | 
| 21 29 | 
             
                    def initialize(
         | 
| 22 30 | 
             
                      tracer: OpenTracing.global_tracer,
         | 
| 23 31 | 
             
                      tagger: JobTagger.new,
         | 
| 24 32 | 
             
                      error_writter: Common::ErrorWriter.new,
         | 
| 33 | 
            +
                      logger: nil,
         | 
| 25 34 | 
             
                      span_kind: DEFAULT_SPAN_KIND,
         | 
| 26 | 
            -
                       | 
| 35 | 
            +
                      operation_name_builder: DEFAULT_OPERATION_NAME_BUILDER
         | 
| 27 36 | 
             
                    )
         | 
| 28 37 | 
             
                      @tracer = tracer
         | 
| 29 38 | 
             
                      @tagger = tagger
         | 
| 30 39 | 
             
                      @error_writter = error_writter
         | 
| 40 | 
            +
                      @logger = logger
         | 
| 31 41 | 
             
                      @span_kind = span_kind
         | 
| 32 | 
            -
                      @ | 
| 42 | 
            +
                      @operation_name_builder = operation_name_builder
         | 
| 33 43 | 
             
                    end
         | 
| 44 | 
            +
                    # rubocop:enable Metrics/ParameterLists
         | 
| 34 45 |  | 
| 35 46 | 
             
                    def call(_worker, job, _queue)
         | 
| 36 | 
            -
                      scope =  | 
| 47 | 
            +
                      scope = safe_start_scope(job)
         | 
| 37 48 |  | 
| 38 49 | 
             
                      log(scope.span, job) do
         | 
| 39 50 | 
             
                        yield
         | 
| 40 51 | 
             
                      end
         | 
| 41 52 | 
             
                    ensure
         | 
| 42 | 
            -
                      scope | 
| 53 | 
            +
                      scope&.close
         | 
| 43 54 | 
             
                    end
         | 
| 44 55 |  | 
| 45 56 | 
             
                    private
         | 
| 46 57 |  | 
| 58 | 
            +
                    def safe_start_scope(job)
         | 
| 59 | 
            +
                      tags =  tagger.build_tags(job, span_kind)
         | 
| 60 | 
            +
                      operation_name = operation_name_builder.build(tags)
         | 
| 61 | 
            +
                      tracer.start_active_span(operation_name, tags: tags, **build_span_args(job))
         | 
| 62 | 
            +
                    rescue StandardError => e
         | 
| 63 | 
            +
                      logger&.error(e)
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def safe_close_scope(scope)
         | 
| 67 | 
            +
                      return unless socpe
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                      scope.close
         | 
| 70 | 
            +
                    rescue StandardError => e
         | 
| 71 | 
            +
                      logger&.error(e)
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 47 74 | 
             
                    def log(span, job)
         | 
| 48 75 | 
             
                      tagger.write_args_log(span, job['jid'], job['args'])
         | 
| 49 76 |  | 
| @@ -56,7 +83,6 @@ module OpenTracing | |
| 56 83 | 
             
                    def build_span_args(job)
         | 
| 57 84 | 
             
                      {
         | 
| 58 85 | 
             
                        references: extract_references(job),
         | 
| 59 | 
            -
                        tags: tagger.build_tags(job, span_kind),
         | 
| 60 86 | 
             
                      }
         | 
| 61 87 | 
             
                    end
         | 
| 62 88 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: opentracing-instrumentation
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.17
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Fedorenko Dmitrij
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-04- | 
| 11 | 
            +
            date: 2020-04-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: json
         | 
| @@ -284,6 +284,7 @@ files: | |
| 284 284 | 
             
            - lib/opentracing/instrumentation/bunny/regexp_routing_key_sanitazer.rb
         | 
| 285 285 | 
             
            - lib/opentracing/instrumentation/common.rb
         | 
| 286 286 | 
             
            - lib/opentracing/instrumentation/common/error_writer.rb
         | 
| 287 | 
            +
            - lib/opentracing/instrumentation/common/operation_name_builder.rb
         | 
| 287 288 | 
             
            - lib/opentracing/instrumentation/faraday.rb
         | 
| 288 289 | 
             
            - lib/opentracing/instrumentation/faraday/response_logger.rb
         | 
| 289 290 | 
             
            - lib/opentracing/instrumentation/faraday/trace_middleware.rb
         |