class HireFire::Middleware
Public Class Methods
new(app)
click to toggle source
# File lib/hirefire/middleware.rb, line 7 def initialize(app) @app = app @path_prefix = determine_path_prefix end
Public Instance Methods
call(env)
click to toggle source
# File lib/hirefire/middleware.rb, line 12 def call(env) process_request_queue_time(env) if matches_hirefire_path?(env) || matches_info_path?(env) return construct_info_response end @app.call(env) end
Private Instance Methods
calculate_request_queue_time(timestamp)
click to toggle source
# File lib/hirefire/middleware.rb, line 78 def calculate_request_queue_time(timestamp) [(Time.now.to_f * 1000).to_i - timestamp.to_i, 0].max end
collect_request_queue_time(request_queue_time)
click to toggle source
# File lib/hirefire/middleware.rb, line 66 def collect_request_queue_time(request_queue_time) HireFire .configuration .web .tap(&:start_dispatcher) .add_to_buffer(request_queue_time) end
construct_info_response()
click to toggle source
# File lib/hirefire/middleware.rb, line 36 def construct_info_response [ 200, { "Content-Type" => "application/json", "Cache-Control" => "must-revalidate, private, max-age=0", "HireFire-Resource" => "Ruby-#{HireFire::VERSION}" }, [ HireFire.configuration.workers.map do |worker| {name: worker.name, value: worker.value} end.to_json ] ] end
determine_path_prefix()
click to toggle source
# File lib/hirefire/middleware.rb, line 82 def determine_path_prefix if defined?(Rails) && Rails.application.config.relative_url_root Regexp.new("^" + Regexp.escape(Rails.application.config.relative_url_root)) end end
extract_path(env)
click to toggle source
# File lib/hirefire/middleware.rb, line 32 def extract_path(env) @path_prefix ? env["PATH_INFO"].gsub(@path_prefix, "") : env["PATH_INFO"] end
log_request_queue_time(request_queue_time)
click to toggle source
# File lib/hirefire/middleware.rb, line 74 def log_request_queue_time(request_queue_time) puts "[hirefire:router] queue=#{request_queue_time}ms" end
matches_hirefire_path?(env)
click to toggle source
# File lib/hirefire/middleware.rb, line 24 def matches_hirefire_path?(env) ENV["HIREFIRE_TOKEN"] && extract_path(env) == "/hirefire" && ENV["HIREFIRE_TOKEN"] == env["HTTP_HIREFIRE_TOKEN"] end
matches_info_path?(env)
click to toggle source
# File lib/hirefire/middleware.rb, line 28 def matches_info_path?(env) ENV["HIREFIRE_TOKEN"] && extract_path(env) == "/hirefire/#{ENV["HIREFIRE_TOKEN"]}/info" end
process_request_queue_time(env)
click to toggle source
# File lib/hirefire/middleware.rb, line 52 def process_request_queue_time(env) request_start = env["HTTP_X_REQUEST_START"] if HireFire.configuration.web && ENV["HIREFIRE_TOKEN"] && request_start request_queue_time = calculate_request_queue_time(request_start) collect_request_queue_time(request_queue_time) end if HireFire.configuration.log_queue_metrics && request_start request_queue_time = calculate_request_queue_time(request_start) log_request_queue_time(request_queue_time) end end