Class: Rack::PerftoolsProfiler::ProfileOnce

Inherits:
ProfileDataAction show all
Includes:
Utils, Utils
Defined in:
lib/rack/perftools_profiler/profile_once.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utils

#let

Methods inherited from ProfileDataAction

check_printer, #check_printer_arg

Methods inherited from Action

for_env

Constructor Details

#initialize(*args) ⇒ ProfileOnce

Returns a new instance of ProfileOnce.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/rack/perftools_profiler/profile_once.rb', line 11

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

Class Method Details

.has_special_param?(request) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
# File 'lib/rack/perftools_profiler/profile_once.rb', line 7

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

Instance Method Details

#actObject



26
27
28
29
30
# File 'lib/rack/perftools_profiler/profile_once.rb', line 26

def act
  @profiler.profile(@mode) do
    @times.times { @middleware.call_app(@new_env) }
  end
end

#delete_custom_params(env) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rack/perftools_profiler/profile_once.rb', line 36

def delete_custom_params(env)
  # I used to clone the env, but it broke any apps that used Warden
  # ex) new_env = env.clone
  new_env = env
  
  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

#responseObject



32
33
34
# File 'lib/rack/perftools_profiler/profile_once.rb', line 32

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