Sha256: f1c2f7061a107c8448910c86e96108ba9c83ab0520990f8ff6f9b8f872f2f76d

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 KB

Contents

require 'pilfer/logger'
require 'pilfer/profiler'

module Pilfer
  class Middleware
    attr_accessor :app, :profiler, :file_matcher, :profile_guard

    def initialize(app, options = {}, &profile_guard)
      @app           = app
      @profiler      = options[:profiler] || default_profiler
      @file_matcher  = options[:file_matcher]
      @profile_guard = profile_guard || proc { true }
    end

    def call(env)
      if profile_guard.call(env)
        run_profiler(request_description(env)) { app.call(env) }
      else
        app.call(env)
      end
    end

    def run_profiler(description, &downstream)
      if file_matcher
        profiler.profile_files_matching(file_matcher, description,
                                        :submit => :async, &downstream)
      else
        profiler.profile(description, :submit => :async, &downstream)
      end
    end

    def default_profiler
      reporter = Pilfer::Logger.new($stdout)
      Pilfer::Profiler.new(reporter)
    end

    def request_description(env)
      "#{env["REQUEST_METHOD"]} #{env["PATH_INFO"]}"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pilfer-1.0.2 lib/pilfer/middleware.rb
pilfer-1.0.1 lib/pilfer/middleware.rb