class Hallmonitor::Railtie
Auto-instruments Rails ActionController actions to collect metrics about their behavior
Public Class Methods
enable_action_controller_metrics()
click to toggle source
# 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) tags = { 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: tags ).emit Hallmonitor::Event.new('controller.action.count', tags: tags).emit rescue => ex Rails.logger.error("Caught error in Telemeter: #{ex.message}", ex) end end end
parse_process_action_payload(args)
click to toggle source
example args [“process_action.action_controller”, 2013-11-22 11:17:04 -0600, 2013-11-22 11:17:04 -0600, “6a1302819619cb089922”, {:controller=>“BranchesController”,
:action=>"index", :params=>{"action"=>"index", "controller"=>"branches"}, :format=>:html, :method=>"GET", :path=>"/branches", :status=>200, :view_runtime=>0.06999999999999999}]
# 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