class Proceso::Middleware
Constants
- SUBSCRIPTION
Attributes
app[R]
config[R]
notifier[R]
pid[R]
Public Class Methods
logger()
click to toggle source
# File lib/proceso/middleware.rb, line 25 def logger @logger ||= begin Rails.configuration.logger || ActiveSupport::Logger.new(STDOUT) end end
new(app, options = {})
click to toggle source
# File lib/proceso/middleware.rb, line 35 def initialize(app, options = {}) @app = app @notifier = ActiveSupport::Notifications @pid = Process.pid @config = ActiveSupport::InheritableOptions.new(options[:config]) end
start_instrument!()
click to toggle source
# File lib/proceso/middleware.rb, line 11 def start_instrument! logger.info "[Proceso #{Proceso::VERSION}] Proceso Middleware is activated. (#{Rails.env.to_s} mode)" subscribe do |name, start, finish, id, payload| mem_used = (payload[:mem_used].to_f / 1024.0).round(1) cpu_used = payload[:cpu_used].to_f.round(1) path = payload[:request].path_info logger.debug "[PROCESO] MEM: #{mem_used}KB\tCPU: #{cpu_used}\tPATH: #{path}" end end
subscribe(&blk)
click to toggle source
# File lib/proceso/middleware.rb, line 21 def subscribe(&blk) ActiveSupport::Notifications.subscribe(SUBSCRIPTION, &blk) end
Public Instance Methods
build_process_payload()
click to toggle source
# File lib/proceso/middleware.rb, line 59 def build_process_payload mem = process.mem_size cpu = process.user_cpu_times [mem, cpu] end
calculate_process_usage(req, m1, m2, c1, c2)
click to toggle source
# File lib/proceso/middleware.rb, line 65 def calculate_process_usage(req, m1, m2, c1, c2) mem_used = m2 - m1 cpu_used = c2 - c2 { pid: process.pid, mem_used: mem_used, cpu_used: cpu_used, request: req } end
call(env)
click to toggle source
# File lib/proceso/middleware.rb, line 42 def call(env) return @app.call(env) if path_excluded?(env["PATH_INFO"]) capture_process_usage(env) do @app.call(env) end end
capture_process_usage(env) { || ... }
click to toggle source
# File lib/proceso/middleware.rb, line 49 def capture_process_usage(env) request = Rack::Request.new(env) mem_1, cpu_1 = build_process_payload response = yield mem_2, cpu_2 = build_process_payload process_payload = calculate_process_usage(request, mem_1, mem_2, cpu_1, cpu_2) notifier.instrument(SUBSCRIPTION, process_payload) response end
exclusions()
click to toggle source
# File lib/proceso/middleware.rb, line 80 def exclusions config.exclusions || [] end
path_excluded?(path)
click to toggle source
# File lib/proceso/middleware.rb, line 84 def path_excluded?(path) exclusions.any? {|e| path =~ e } end
process()
click to toggle source
# File lib/proceso/middleware.rb, line 76 def process @process ||= Proceso::PID.new(pid) end