Sha256: 411311b212abb4a261dcf26e70741c5b74c4e32e181c98b5f0037b8d2b0c890e

Contents?: true

Size: 1.51 KB

Versions: 22

Compression:

Stored size: 1.51 KB

Contents

class Kuroko2::MemoryConsumptionLog < Kuroko2::ApplicationRecord
  include Kuroko2::TableNameCustomizable

  belongs_to :job_instance

  validates :value, presence: true

  # As count becames greater, the interval period will be longer.
  # First interval will be 1 second and next interval will be 1 second too,
  # then next interval will be 4 seconds then next interval will be 9 seconds.
  # Finally, maximum of interval will be 30 minutes.
  class Interval
    INITIAL_INTERVAL_PERIOD = 1.second.to_i
    MAX_INTERVAL_PERIOD = 30.minutes.to_i
    INCREMENT = 2

    attr_reader :base_time, :count

    # @param [Time] base_time
    # @param [Integer] count Throttled to be less than 50.
    def initialize(base_time, count = 0)
      @base_time = base_time
      @count = [count, 50].min
    end

    # @param [Time] now
    # @return [Boolean]
    def reached?(now)
      (now - @base_time) > current_length
    end

    # @return [MemoryConsumptionLog::Interval]
    def next
      self.class.new(Time.at(@base_time.to_i + current_length), @count.succ)
    end

    private

    # current_length mapping for count (0..50)
    #
    # [1, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
    #  289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900,
    #  961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764,
    #  1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800]
    def current_length
      [[@count ** INCREMENT, INITIAL_INTERVAL_PERIOD].max, MAX_INTERVAL_PERIOD].min
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
kuroko2-0.8.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.7.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.6.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.5.2 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.5.1 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.5.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.6 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.5 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.4 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.3 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.2 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.1 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.4.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.3.4 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.3.3 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.3.2 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.3.1 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.3.0 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.2.3 app/models/kuroko2/memory_consumption_log.rb
kuroko2-0.2.2 app/models/kuroko2/memory_consumption_log.rb