Sha256: d5389ce099a3522d5d3602fd8740eddb13bf9e8dea69fade0520973de3a970db

Contents?: true

Size: 920 Bytes

Versions: 1

Compression:

Stored size: 920 Bytes

Contents

module Skylight
  class Middleware
    def self.new(app, config, *)
      return app unless config
      super
    end

    def initialize(app, config, instrumenter_class=Instrumenter)
      @app = app
      @config = config
      @instrumenter_class = instrumenter_class
    end

    def call(env)
      instrumenter.trace("Rack") do
        ActiveSupport::Notifications.instrument("app.rack.request") do
          @app.call(env)
        end
      end
    end

  private
    LOCK = Mutex.new

    def instrumenter
      return @instrumenter if defined?(@instrumenter)

      LOCK.synchronize do
        return @instrumeter if defined?(@instrumenter)
        @instrumenter = @instrumenter_class.start!(@config)
        return @instrumenter
      end
    rescue Exception
      @instrumenter = stub
    end

    def stub
      Class.new do
        def trace(*)
          yield
        end
      end.new
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
skylight-0.0.7 lib/skylight/middleware.rb