Class: Hallmonitor::Railtie
- Inherits:
-
Rails::Railtie
- Object
- Rails::Railtie
- Hallmonitor::Railtie
- Defined in:
- lib/hallmonitor/railtie.rb
Overview
Auto-instruments Rails ActionController actions to collect metrics about their behavior
Class Method Summary collapse
- .enable_action_controller_metrics ⇒ Object
-
.parse_process_action_payload(args) ⇒ Object
example args [“process_action.action_controller”, 2013-11-22 11:17:04 -0600, 2013-11-22 11:17:04 -0600, “6a1302819619cb089922”, :action=>“index”, :params=>{“action”=>“index”, “controller”=>“branches”, :format=>:html, :method=>“GET”, :path=>“/branches”, :status=>200, :view_runtime=>0.06999999999999999}].
Class Method Details
.enable_action_controller_metrics ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/hallmonitor/railtie.rb', line 11 def self.enable_action_controller_metrics # See https://guides.rubyonrails.org/active_support_instrumentation.html#process-action-action-controller # for information on this notification ActiveSupport::Notifications.subscribe(/process_action.action_controller/) do |*args| begin event_args = parse_process_action_payload(args) = { controller: event_args[:controller], action: event_args[:action], status_code: event_args[:status] } Hallmonitor::TimedEvent.new( 'controller.action.measure', duration: { total: event_args[:total_duration], database: event_args[:db_time], view: event_args[:view_time] }, tags: ).emit Hallmonitor::Event.new('controller.action.count', tags: ).emit rescue => ex Rails.logger.error("Caught error in Telemeter: #{ex.}", ex) end end end |
.parse_process_action_payload(args) ⇒ Object
example args [“process_action.action_controller”, 2013-11-22 11:17:04 -0600, 2013-11-22 11:17:04 -0600, “6a1302819619cb089922”,
:action=>"index",
:params=>{"action"=>"index", "controller"=>"branches",
:format=>:html,
:method=>"GET",
:path=>"/branches",
:status=>200,
:view_runtime=>0.06999999999999999}]
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/hallmonitor/railtie.rb', line 54 def self.parse_process_action_payload(args) parsed_arguments = {} rails_payload = args[4] parsed_arguments[:total_duration] = 1000.0 * (args[2] - args[1]) parsed_arguments[:view_time] = (rails_payload[:view_runtime] || 0).to_f parsed_arguments[:db_time] = (rails_payload[:db_runtime] || 0).to_f parsed_arguments[:status] = rails_payload[:status] parsed_arguments[:controller] = rails_payload[:controller] parsed_arguments[:action] = rails_payload[:action] parsed_arguments[:format] = rails_payload[:format] || 'all' parsed_arguments[:format] = 'all' if parsed_arguments[:format] == '*/*' parsed_arguments end |