class StatsdTaggable::ActiveSupportSubscriber

Public Class Methods

mock_client(client) click to toggle source
# File lib/statsd-opentsdb-client/active_support_subscriber.rb, line 34
def self.mock_client(client)
  @client = client
end
subscribe(statsd_client) click to toggle source
# File lib/statsd-opentsdb-client/active_support_subscriber.rb, line 5
def self.subscribe(statsd_client)
  @client = statsd_client
  ActiveSupport::Notifications.subscribe "process_action.action_controller" do |*args|
    event = ActiveSupport::Notifications::Event.new(*args)
    controller = event.payload[:controller]
    action = event.payload[:action]
    format = event.payload[:format] || "all"
    format = "all" if format == "*/*"
    status = event.payload[:status]
    path = event.payload[:path]
    id = event.payload[:params]['id'] || 'null'
    ActiveSupport::Notifications.instrument :performance, :action => :timing, :measurement => "total_duration",
                                            :controller => controller, :controller_action => action,
                                            :format => format, :path => path, :id => id, :value => event.duration
    ActiveSupport::Notifications.instrument :performance, :action => :timing, :measurement => "db_time",
                                            :controller => controller, :controller_action => action,
                                            :format => format, :path => path, :id => id, :value => event.payload[:db_runtime]
    ActiveSupport::Notifications.instrument :performance, :action => :timing, :measurement => "view_time",
                                            :controller => controller, :controller_action => action,
                                            :format => format, :path => path, :id => id, :value => event.payload[:view_runtime]
    ActiveSupport::Notifications.instrument :performance, :measurement => "status", :controller => controller,
                                            :controller_action => action, :format => format, :path => path, :id => id,
                                            :status => status
  end
  ActiveSupport::Notifications.subscribe "performance" do |name, start, finish, id, payload|
    self.send_event_to_statsd(@client, name, payload)
  end
end

Private Class Methods

send_event_to_statsd(statsd_client, name, payload) click to toggle source
# File lib/statsd-opentsdb-client/active_support_subscriber.rb, line 39
def self.send_event_to_statsd(statsd_client, name, payload)
  measurement = payload[:measurement]
  value = payload[:value]
  action = payload[:action] || :count

  tags = Hash.new
  tags[:controller] = payload[:controller].gsub(/::/, '-')
  tags[:action] = payload[:controller_action]
  tags[:format] = payload[:format]
  # path often includes data and can be too long and varied -- not useful and hogs statsd memory
  #tags[:path] = payload[:path][0..41]
  tags[:id] = "#{payload[:id]}"[0..29]
  tags[:status] = payload[:status] if payload.include? :status

  statsd_client.send "#{action.to_s}_with_tags", "#{name.to_s}.#{measurement}", (value || 1), tags
end