Sha256: d45cea7bbfc8660d8fa007684e34bf387ac43ad5e041f507a80175d27c78194c

Contents?: true

Size: 1.31 KB

Versions: 10

Compression:

Stored size: 1.31 KB

Contents

# typed: true

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

require 'sqreen/exception'

module Sqreen
  module Metric
    OBSERVATION_KEY = 'observation'.freeze
    START_KEY = 'start'.freeze
    FINISH_KEY = 'finish'.freeze
    # Base interface for a metric
    class Base
      def initialize(_opts={})
        @sample = nil
      end

      # Update the current metric with a new observation
      # @param _at [Time] when was the observation made
      # @param _key [String] which aggregation key was it made for
      # @param _value [Object] The observation
      def update(_key, _value)
        raise Sqreen::Exception, 'No current sample' unless @sample
      end

      # create a new empty sample and publish the last one
      # @param time [Float] Time of start of new sample/end of the last one
      def next_sample(time)
        finalize_sample(time) unless @sample.nil?
        current_sample = @sample
        new_sample(time)
        current_sample
      end

      protected

      # @param time [Float]
      def new_sample(time)
        @sample = { OBSERVATION_KEY => {}, START_KEY => time }
      end

      # @param time [Float]
      def finalize_sample(time)
        @sample[FINISH_KEY] = time
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
sqreen-1.19.4 lib/sqreen/metrics/base.rb
sqreen-1.19.3-java lib/sqreen/metrics/base.rb
sqreen-1.19.3 lib/sqreen/metrics/base.rb
sqreen-1.19.2-java lib/sqreen/metrics/base.rb
sqreen-1.19.2 lib/sqreen/metrics/base.rb
sqreen-1.19.1-java lib/sqreen/metrics/base.rb
sqreen-1.19.1 lib/sqreen/metrics/base.rb
sqreen-1.19.0-java lib/sqreen/metrics/base.rb
sqreen-1.19.0 lib/sqreen/metrics/base.rb
sqreen-1.19.0.beta1 lib/sqreen/metrics/base.rb