class StackProf::Middleware

def call(env)

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

def initialize(app, options = {})

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]
  Middleware.path     = options[:path] || 'tmp'
  at_exit{ Middleware.save? } if options[:save_at_exit]
end

def save(filename = nil)

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