Sha256: 1c39d520d1d65be30411566ad7f6ad1aa9b6365f3bc9855c845f904d911ecf75

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module Rack::PerftoolsProfiler

  class ProfileOnce < ProfileDataAction
    include Rack::Utils
    include Rack::PerftoolsProfiler::Utils

    def self.has_special_param?(request)
      request.GET['profile'] != nil
    end

    def initialize(*args)
      super
      request = Rack::Request.new(@env)
      @times = (request.GET.fetch('times') {1}).to_i
      @mode = let(request.GET['mode']) do |m|
        if m.nil? || m.empty?
          nil
        else
          m.to_sym
        end
      end
      check_printer_arg
      @new_env = delete_custom_params(@env)
    end
    
    def act
      @profiler.profile(@mode) do
        @times.times { @middleware.call_app(@new_env) }
      end
    end

    def response
      @middleware.profiler_data_response(@profiler.data(@get_params))
    end

    def delete_custom_params(env)
      new_env = env.clone
      
      get_params = Rack::Request.new(new_env).GET
      get_params.delete('profile')
      get_params.delete('times')
      get_params.delete('printer')
      get_params.delete('ignore')
      get_params.delete('focus')

      new_env.delete('rack.request.query_string')
      new_env.delete('rack.request.query_hash')

      new_env['QUERY_STRING'] = build_query(get_params)
      new_env
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rack-perftools_profiler-0.4.1 lib/rack/perftools_profiler/profile_once.rb