Class: Railswatch::Gems::GrapeExt
- Inherits:
-
Object
- Object
- Railswatch::Gems::GrapeExt
- Defined in:
- lib/railswatch/gems/grape_ext.rb
Class Method Summary collapse
- .handle_grape_notification(name, start, finish, payload) ⇒ Object
- .init ⇒ Object
- .name_grape_expect_no_content?(req, name, payload) ⇒ Boolean
- .save_and_cleanup_if_needed(req, name, payload) ⇒ Object
- .set_payload_fields(record, env) ⇒ Object
- .set_record_fields(req, now) ⇒ Object
- .set_timing_field(record, name, start, finish) ⇒ Object
- .setup_grape_request ⇒ Object
Class Method Details
.handle_grape_notification(name, start, finish, payload) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/railswatch/gems/grape_ext.rb', line 13 def handle_grape_notification(name, start, finish, payload) req = setup_grape_request now = Railswatch::Utils.time set_record_fields(req, now) set_timing_field(req.record, name, start, finish) set_payload_fields(req.record, payload[:env]) if payload[:env] save_and_cleanup_if_needed(req, name, payload) end |
.init ⇒ Object
7 8 9 10 11 |
# File 'lib/railswatch/gems/grape_ext.rb', line 7 def init ActiveSupport::Notifications.subscribe(/grape/) do |name, start, finish, _id, payload| handle_grape_notification(name, start, finish, payload) end end |
.name_grape_expect_no_content?(req, name, payload) ⇒ Boolean
42 43 44 45 |
# File 'lib/railswatch/gems/grape_ext.rb', line 42 def name_grape_expect_no_content?(req, name, payload) expects_no_content = Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include?(req.record.status.to_i) name == 'endpoint_run.grape' && (payload[:endpoint]&.body.nil? || expects_no_content) end |
.save_and_cleanup_if_needed(req, name, payload) ⇒ Object
35 36 37 38 39 40 |
# File 'lib/railswatch/gems/grape_ext.rb', line 35 def save_and_cleanup_if_needed(req, name, payload) return unless name == 'format_response.grape' || name_grape_expect_no_content?(req, name, payload) req.record.save CurrentRequest.cleanup end |
.set_payload_fields(record, env) ⇒ Object
53 54 55 56 57 58 59 60 |
# File 'lib/railswatch/gems/grape_ext.rb', line 53 def set_payload_fields(record, env) endpoint = env['api.endpoint'] record.status = endpoint&.status || env['api.response.status'] record.format = env['api.format'] record.method = env['REQUEST_METHOD'] record.path = env['PATH_INFO'] end |
.set_record_fields(req, now) ⇒ Object
30 31 32 33 |
# File 'lib/railswatch/gems/grape_ext.rb', line 30 def set_record_fields(req, now) req.record.datetimei ||= now.to_i req.record.datetime ||= now.strftime(Railswatch::FORMAT) end |
.set_timing_field(record, name, start, finish) ⇒ Object
47 48 49 50 51 |
# File 'lib/railswatch/gems/grape_ext.rb', line 47 def set_timing_field(record, name, start, finish) return unless ['endpoint_render.grape', 'endpoint_run.grape', 'format_response.grape'].include?(name) record.send("#{name.tr('.', '_')}=", (finish - start) * 1000) end |
.setup_grape_request ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/railswatch/gems/grape_ext.rb', line 22 def setup_grape_request req = CurrentRequest.current req.ignore.add(:monitoring) req.data ||= {} req.record ||= Railswatch::Models::GrapeRecord.new(request_id: req.request_id) req end |