Class: MemoryMonitoring::Rack

Inherits:
Object
  • Object
show all
Defined in:
lib/memory_monitoring/rack.rb

Overview

中间件 Middleware

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Rack

Returns a new instance of Rack.



6
7
8
9
10
# File 'lib/memory_monitoring/rack.rb', line 6

def initialize(app)
  @app = app
  logger.formatter = SimpleFormatter.new
  reset # 重置计数器
end

Instance Method Details

#call(env) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/memory_monitoring/rack.rb', line 12

def call(env)
  request_uri = env['HTTP_HOST'] + env['PATH_INFO']
  @messages = []
  # 除静态文件外,读取当前内存
  unless request_uri =~ /\/(assets|uploads|images|fonts|js|css)|.(js|css|png|gif|jpg|jpeg|woff|txt|ico|eot|map|svg|ttf)/
    @start_rss = current_memory
     @start_at = Time.now 
  end
  # 获取输出内容
  status, headers, response = @app.call(env)
# rescue => e # 出错了  
ensure
  unless messages.empty?
    @level = :error if status.nil? || status.between?(400, 600)
    logger.send @level, (@messages + [ request_uri ]).join("\t")
    unless response.nil?
      body = (response.respond_to?(:body) ? response.body : response).first
      injector = Injector.new(@messages)
      return [status, headers, [injector.injection(env['HTTP_ACCEPT'], body)]]
    end
  end
end