Module: Upkeep::Capture::Request
- Defined in:
- lib/upkeep/capture/request.rb
Defined Under Namespace
Classes: ActionProfiler
Class Method Summary collapse
- .call(controller, profile: false) ⇒ Object
- .measure(timings, key) ⇒ Object
- .profile_action(timings, counters) ⇒ Object
- .response_body_html(body) ⇒ Object
- .signature_for(controller) ⇒ Object
Class Method Details
.call(controller, profile: false) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/upkeep/capture/request.rb', line 32 def call(controller, profile: false) timings = {} counters = {} action_result, recorder = measure(timings, :action_ms) do if profile profile_action(timings, counters) do Runtime::Observation.capture_request(profile: true) { yield } end else Runtime::Observation.capture_request { yield } end end timings.merge!(recorder.profile_timings) counters.merge!(recorder.profile_counts) html = measure(timings, :response_body_ms) { response_body_html(controller.response.body) } signature = measure(timings, :signature_ms) { signature_for(controller) } RequestResult.new( action_result, html, recorder, controller.response.status, controller.response.content_type, controller.response.media_type, controller.response.successful?, signature, timings, counters ) end |
.measure(timings, key) ⇒ Object
94 95 96 97 98 99 |
# File 'lib/upkeep/capture/request.rb', line 94 def measure(timings, key) started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) yield ensure timings[key] = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) end |
.profile_action(timings, counters) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/upkeep/capture/request.rb', line 62 def profile_action(timings, counters) collector = ActionProfiler.new collector.capture { yield }.tap do timings.merge!(collector.timings) counters.merge!(collector.counters) end end |
.response_body_html(body) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/upkeep/capture/request.rb', line 80 def response_body_html(body) case body when String body when Array body.join else return body.body.join if body.respond_to?(:body) && body.body.respond_to?(:join) return body.to_a.join if body.respond_to?(:to_a) body.to_s end end |
.signature_for(controller) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/upkeep/capture/request.rb', line 70 def signature_for(controller) request = controller.request RequestSignature.new( controller.class.name, controller.action_name, request.request_method, request.fullpath ) end |