Class: StackProf::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/stackprof/middleware.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Middleware

Returns a new instance of Middleware.



5
6
7
8
9
10
11
12
13
# File 'lib/stackprof/middleware.rb', line 5

def initialize(app, options = {})
  @app = app
  @options = options
  @num_reqs = options[:save_every] || nil
  Middleware.mode = options[:mode] || :cpu
  Middleware.interval = options[:interval] || 1000
  Middleware.enabled = options[:enabled]
  at_exit{ Middleware.save? } if options[:save_at_exit]
end

Class Attribute Details

.enabledObject Also known as: enabled?

Returns the value of attribute enabled.



29
30
31
# File 'lib/stackprof/middleware.rb', line 29

def enabled
  @enabled
end

.intervalObject

Returns the value of attribute interval.



29
30
31
# File 'lib/stackprof/middleware.rb', line 29

def interval
  @interval
end

.modeObject

Returns the value of attribute mode.



29
30
31
# File 'lib/stackprof/middleware.rb', line 29

def mode
  @mode
end

Class Method Details

.saveObject



32
33
34
35
36
37
38
39
# File 'lib/stackprof/middleware.rb', line 32

def save
  if results = StackProf.results
    FileUtils.mkdir_p('tmp')
    File.open("tmp/stackprof-#{results[:mode]}-#{Process.pid}-#{Time.now.to_i}.dump", 'wb') do |f|
      f.write Marshal.dump(results)
    end
  end
end

Instance Method Details

#call(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/stackprof/middleware.rb', line 15

def call(env)
  StackProf.start(mode: Middleware.mode, interval: Middleware.interval) if Middleware.enabled?
  @app.call(env)
ensure
  if Middleware.enabled?
    StackProf.stop
    if @num_reqs && (@num_reqs-=1) == 0
      @num_reqs = @options[:save_every]
      Middleware.save
    end
  end
end