Sha256: 867ccd552af626ca93121ebec72c9c9b339f190c9f87eb71af5b520c54cbfb34

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module Mnemosyne
  module Middleware
    module Restify
      class Writer
        def initialize(writer, trace, span)
          @writer = writer
          @trace = trace
          @span = span
        end

        def fulfill(*args)
          @span.finish!
          @trace << @span

          @writer.fulfill(*args)
        end

        def reject(*args)
          @span.finish!
          @trace << @span

          @writer.reject(*args)
        end
      end

      class << self
        # rubocop:disable Metrics/MethodLength
        def call(request, writer)
          if (trace = ::Mnemosyne::Instrumenter.current_trace)
            meta = {url: request.uri, 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

            hook = Writer.new(writer, trace, span)

            yield request, hook
          else
            yield request, writer
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mnemosyne-ruby-0.2.0 lib/mnemosyne/middleware/restify.rb
mnemosyne-ruby-0.1.0 lib/mnemosyne/middleware/restify.rb