class Metriks::Reporter::NewRelic::Sampler

Public Class Methods

new(options={}) click to toggle source
# File lib/metriks/reporter/new_relic/sampler.rb, line 6
def initialize(options={})
  @registry = options[:registry] || Metriks::Registry.default
  @cache = Hash.new
end

Public Instance Methods

newrelic_name(name) click to toggle source
# File lib/metriks/reporter/new_relic/sampler.rb, line 46
def newrelic_name(name)
  "Custom/" + name.gsub('.', '/')
end
poll() click to toggle source
# File lib/metriks/reporter/new_relic/sampler.rb, line 11
def poll
  @registry.each do |name, metric|
    case metric
    when defined?(Metriks::Gauge) && metric.kind_of?(Metriks::Gauge)
      NewRelic::Agent.record_metric(newrelic_name(name), metric.value)
  
    when Metriks::Timer
      count = value_update(name, :count, metric.count) do |old,new|
        new - old
      end
      min = value_update(name, :min, metric.min) do |old,new|
        new < old ? new : old
      end
      max = value_update(name, :max, metric.max) do |old,new|
        new > old ? new : old
      end
      value = {
        :total => metric.mean,
        :count => count,
        :min => min,
        :max => max,
        # NOTE: we lose the total sum of squares, not in the registry
        :sum_of_squares => 0
      }
      ::NewRelic::Agent.record_metric(newrelic_name(name), value)

    when Metriks::Counter
      count = value_update(name, :count, metric.count) do |old,new|
        new - old
      end
      ::NewRelic::Agent.increment_metric(newrelic_name(name), count)
    end
  end
end
value_update(metric_name, field_name, new_value) { |cache, new_value| ... } click to toggle source
# File lib/metriks/reporter/new_relic/sampler.rb, line 50
def value_update(metric_name, field_name, new_value)
  cache_key = "#{metric_name}-#{field_name}"
  if @cache[cache_key] == nil
    update = new_value
  else
    update = yield(@cache[cache_key], new_value)
  end
  @cache[cache_key] = update
  return update
end