class Kraftwerk::Middleware::RequestTelemetry
Constants
- METHOD
- PATH
- QUERY_STRING
- RACK_INPUT
- ROUTER_PARAMS
Attributes
app[R]
kraftwerk_app[R]
telemetry[R]
Public Class Methods
new(app, kraftwerk_app, telemetry: nil)
click to toggle source
# File lib/kraftwerk/middleware/request_telemetry.rb, line 14 def initialize(app, kraftwerk_app, telemetry: nil) @app = app @kraftwerk_app = kraftwerk_app @telemetry ||= kraftwerk_app::Components['telemetry'] end
Public Instance Methods
call(env)
click to toggle source
# File lib/kraftwerk/middleware/request_telemetry.rb, line 20 def call(env) metadata = { app: kraftwerk_app, time: Time.now } start_data = request_start_data(env) telemetry.execute([:kraftwerk, :request, :start], start_data, metadata) start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) app.call(env).tap do |response| telemetry.execute( [:kraftwerk, :request, :finish], request_finish_data(start_data, response, start_time), metadata ) end end
Private Instance Methods
request_finish_data(start_data, response, start_time)
click to toggle source
# File lib/kraftwerk/middleware/request_telemetry.rb, line 45 def request_finish_data(start_data, response, start_time) duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time code, _headers, body = response start_data.merge( { duration: duration, code: code, body: body[0] } ) end
request_params(env)
click to toggle source
Combines params from query string and body into a single hash
# File lib/kraftwerk/middleware/request_telemetry.rb, line 59 def request_params(env) params_from_query_string = env[QUERY_STRING] ? CGI.parse(env[QUERY_STRING]) : {} rack_input = env[RACK_INPUT].dup.read params_from_input = rack_input.length > 0 ? CGI.parse(rack_input) : {} params_from_router = env[ROUTER_PARAMS] || {} params_from_query_string.merge(params_from_input).merge(params_from_router) end
request_start_data(env)
click to toggle source
# File lib/kraftwerk/middleware/request_telemetry.rb, line 37 def request_start_data(env) { method: env[METHOD], path: env[PATH], params: request_params(env) } end