class Salus::Counter

Constants

INT32_MAX

Public Class Methods

new(defaults={}) click to toggle source
Calls superclass method Salus::Metric::new
# File lib/salus/metric/counter.rb, line 4
def initialize(defaults={})
  super(defaults)
  option :maximum, Numeric
  validate(:maximum, @opts[:maximum]) if @opts.key?(:maximum)
end

Public Instance Methods

calc() click to toggle source
Calls superclass method Salus::Metric#calc
# File lib/salus/metric/counter.rb, line 10
def calc
  super
  @last_calced_value = nil

  if @values.length < STORAGE_DEPTH
    return
  elsif @values[0].expired?(@values[1].timestamp)
    return
  elsif !@values[0].value.is_a?(Numeric)
    return
  elsif !@values[1].value.is_a?(Numeric)
    return
  end

  @last_calced_value = begin
    dt = (@values[1].timestamp - @values[0].timestamp)
    dv = if @values[1].value < @values[0].value
      w = @values[0].value < INT32_MAX ? 32 : 64
      (2**w - @values[0].value + @values[1].value)
    else
      (@values[1].value - @values[0].value)
    end
    r = (dt == 0) ? nil : (dv / dt)
    if @opts.key?(:maximum) && !r.nil? && r > @opts[:maximum]
      nil
    else
      r
    end
  end
end