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