Sha256: bc49b0dc134bf391b77447fcc815f340fe075d4c5dc5b1fda6acd3576166fcfc

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

module Mnemosyne
  module Probes
    module Restify
      module Base
        class Probe < ::Mnemosyne::Probe
          def setup
            ::Restify::Adapter::Base.prepend Instrumentation
          end

          module Instrumentation
            def call(request)
              if (trace = ::Mnemosyne::Instrumenter.current_trace)
                meta = {url: request.uri.to_s, method: request.method}
                span = ::Mnemosyne::Span.new 'external.http.restify', meta: meta

                span.start!

                request.headers['X-Mnemosyne-Transaction'] = trace.transaction
                request.headers['X-Mnemosyne-Origin'] = span.uuid

                super.tap do |x|
                  x.add_observer do |_, response, _err|
                    span.meta[:status] = response.code

                    trace << span.finish!
                  end
                end
              else
                super
              end
            end
          end
        end
      end
    end

    register 'Restify::Adapter::Base',
      'restify/adapter/base',
      Restify::Base::Probe.new
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mnemosyne-ruby-1.17.0 lib/mnemosyne/probes/restify/base.rb
mnemosyne-ruby-1.16.0 lib/mnemosyne/probes/restify/base.rb
mnemosyne-ruby-1.15.0 lib/mnemosyne/probes/restify/base.rb
mnemosyne-ruby-1.14.0 lib/mnemosyne/probes/restify/base.rb