class Hallmonitor::Outputters::NewRelic

Outputs events to NewRelic using their custom metrics API

Public Class Methods

new(prefix = '') click to toggle source

Initializes a new instance @raise String if {NewRelic::Agent} isn't defined (Library isn't loaded) @param prefix [String] String to prefix all metrics with

Calls superclass method Hallmonitor::Outputter::new
# File lib/hallmonitor/outputters/new_relic.rb, line 8
def initialize(prefix = '')
  unless defined?(::NewRelic::Agent)
    fail 'In order to use NewRelic, new_relic gem must be installed'
  end
  super(prefix)
end

Public Instance Methods

process(event) click to toggle source
# File lib/hallmonitor/outputters/new_relic.rb, line 15
def process(event)
  if event.is_a?(Hallmonitor::TimedEvent)
    process_timed_event(event)
  elsif event.is_a?(Hallmonitor::GaugeEvent)
    process_gauge_event(event)
  else
    process_event(event)
  end
end

Private Instance Methods

new_relic_name(name) click to toggle source

Formats the event name into the naming scheme that NewRelic expects

# File lib/hallmonitor/outputters/new_relic.rb, line 58
def new_relic_name(name)
  "Custom/#{name.tr('.', '/')}"
end
process_event(event) click to toggle source
# File lib/hallmonitor/outputters/new_relic.rb, line 47
def process_event(event)
  if event.count.is_a?(Hash)
    event.count.each do |name, value|
      ::NewRelic::Agent.increment_metric(new_relic_name("#{event.name}.#{name}"), value)
    end
  else
    ::NewRelic::Agent.increment_metric(new_relic_name(event.name), event.count)
  end
end
process_gauge_event(event) click to toggle source
# File lib/hallmonitor/outputters/new_relic.rb, line 37
def process_gauge_event(event)
  if event.value.is_a?(Hash)
    event.value.each do |name, value|
      ::NewRelic::Agent.record_metric(new_relic_name("#{event.name}.#{name}"), value)
    end
  else
    ::NewRelic::Agent.record_metric(new_relic_name(event.name), event.value)
  end
end
process_timed_event(event) click to toggle source
# File lib/hallmonitor/outputters/new_relic.rb, line 27
def process_timed_event(event)
  if event.duration.is_a?(Hash)
    event.duration.each do |name, value|
      ::NewRelic::Agent.record_metric(new_relic_name("#{event.name}.#{name}"), value)
    end
  else
    ::NewRelic::Agent.record_metric(new_relic_name(event.name), event.duration)
  end
end