Sha256: dfcc2ab94fbea8a924e54afa4e21465fd7b2847d5299740c43cd65d60d59ecb6
Contents?: true
Size: 1.06 KB
Versions: 4
Compression:
Stored size: 1.06 KB
Contents
module Salus class Counter < Metric INT32_MAX = 2**32 def initialize(defaults={}) super(defaults) option :maximum, Numeric validate(:maximum, @opts[:maximum]) if @opts.key?(:maximum) end 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 end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
salus-0.2.1 | lib/salus/metric/counter.rb |
salus-0.2.0 | lib/salus/metric/counter.rb |
salus-0.1.3 | lib/salus/metric/counter.rb |
salus-0.1.2 | lib/salus/metric/counter.rb |