Sha256: dd6263600b28102ad685611eae333b23f4b63b837a442693ed6f76496f2884ef

Contents?: true

Size: 811 Bytes

Versions: 2

Compression:

Stored size: 811 Bytes

Contents

module Salus
  class Accumulator < Metric
    STORAGE_DEPTH = 1

    def push(opts={}, &block)
      opts = {} unless opts.is_a?(Hash)

      synchronize do
        opts.each do |k, v|
          validate(k, v)
          @opts[k] = v unless [:value, :ttl, :timestamp].include?(k)
        end

        if block_given?
          v = begin
            yield
          rescue Exception => e
            log DEBUG, e
            nil
          end
          validate(:value, v)
          opts[:value] = v
        end

        prev  = @values.empty? ? 0 : (@values.last.value || 0)
        curr  = opts[:value] || 0
        
        @values << Value.new(prev+curr, opts[:timestamp] || Time.now.to_f, opts[:ttl] || @opts[:ttl])
        @needs_update = true
      end
    end
  end
end
  

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
salus-0.2.1 lib/salus/metric/accumulator.rb
salus-0.2.0 lib/salus/metric/accumulator.rb