class ActiveMetrics::Collector

Constants

PREFIX

Public Class Methods

attach() click to toggle source

Start subscribing to the metrics-related events.

# File lib/active_metrics/collector.rb, line 17
def attach
  ActiveSupport::Notifications.subscribe(/#{PREFIX}/i) do |name, _, _, _, data|
    deliver(name, data)
  end
end
deliver(name, data = {}) click to toggle source

Deliver a metric to Librato

According to the Heroku DevCenter there is already a tight integration between Heroku logs and Librato so simply using `$stdout.puts` will be enough, as long as a specific format is used.

@param name [String] The name of the event being measured @param data [Hash] a Hash with type of metric and the value to be recorded

# File lib/active_metrics/collector.rb, line 31
def deliver(name, data = {})
  key    = name.gsub(PREFIX, '')
  value  = data[:value]
  metric = data[:metric]

  $stdout.puts "#{metric}##{key}=#{value}" unless silent?
end
record(event, payload = {}) { || ... } click to toggle source

Record an event

@param event [String] The name of the event @param payload [Hash] A hash that contains the event-related data.

# File lib/active_metrics/collector.rb, line 43
def record(event, payload = {})
  # Add a prefix to all events so things broadcasted using this method
  # will not get picked up by possibly other `ActiveSupport::Notifications`
  # subscribers.
  name = "#{PREFIX}#{event}"

  if block_given?
    ActiveSupport::Notifications.instrument(name, payload) { yield }
  else
    ActiveSupport::Notifications.instrument(name, payload)
  end
end
silent?() click to toggle source

Should the metrics be silent?

Useful especially in QA or development environments, where you'll might not want your logs to be filled with various metrics.

# File lib/active_metrics/collector.rb, line 12
def silent?
  [1, '1', 'true'].include?(ENV['SILENT_METRICS'])
end