class Sapience::Extensions::ActionController::Notifications

Public Class Methods

new(options = {}) click to toggle source

Options:

*:metric_name - the metric name, defaults to “rails.request” *:tags - additional tags

# File lib/sapience/extensions/action_controller/notifications.rb, line 10
def initialize(options = {})
  @metric_name = options[:metric_name] || "rails.request"
  super
  Sapience::Extensions::Notifications.subscribe("process_action.action_controller") do |event|
    record event
  end
end

Private Instance Methods

record(event) click to toggle source
# File lib/sapience/extensions/action_controller/notifications.rb, line 20
def record(event) # rubocop:disable AbcSize
  return unless record?

  payload = event.payload
  method  = payload[:method].downcase
  status  = payload[:status]
  action  = payload[:action]
  ctrl    = payload[:controller].sub(/Controller$/, "").underscore
  format  = payload[:format]

  tags    = self.tags + %W(
    method:#{method}
    status:#{status}
    action:#{action}
    controller:#{ctrl}
    format:#{format}
  )

  metrics.batch do
    metrics.increment metric_name, tags: tags
    metrics.timing("#{metric_name}.time", event.duration, tags: tags)
    metrics.timing("#{metric_name}.time.db", payload[:db_runtime].round(10), tags: tags) if payload[:db_runtime]



    if payload[:view_runtime]
      metrics.timing("#{metric_name}.time.view", payload[:view_runtime].round(2), tags: tags)
    end
  end
end