Sha256: 6eca3451feb33cdd970f791bb1f72aa036a99bf86098335423b4482556765782

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require 'sequel/instrumentation/version'

require 'opentracing'

module Sequel
  module Instrumentation
    class Error < StandardError; end

    class << self
      COMMON_TAGS = {
        'component' => 'ruby-sequel',
        'span.kind' => 'client',
      }.freeze

      attr_accessor :tracer

      def instrument(tracer: OpenTracing.global_tracer)
        begin
          require 'sequel'
        rescue LoadError
          return
        end

        @tracer = tracer

        require 'sequel/extensions/database_instrumentation'
        require 'sequel/extensions/dataset_instrumentation'

        Sequel::Database.extension :database_instrumentation
        Sequel::Database.extension :dataset_instrumentation
      end

      # This method sets up a span and yields the block.
      # Any errors will be caught and tagged before being passed up.
      def trace_query(name, tags)
        tags.merge!(COMMON_TAGS)

        scope = @tracer.start_active_span(name, tags: tags)

        yield
      rescue StandardError => error
        if scope
          scope.span.record_exception(error)
        end

        raise error
      ensure
        scope.close if scope
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
signalfx-sequel-instrumentation-0.1.0 lib/sequel/instrumentation.rb