Sha256: a534c926dc356503228e9359f1872c3bb83e2237c3e58029025b238c9242f191

Contents?: true

Size: 1.25 KB

Versions: 34

Compression:

Stored size: 1.25 KB

Contents

require 'get_process_mem'

module Dynflow
  module Watchers
    class MemoryConsumptionWatcher

      attr_reader :memory_limit, :world

      def initialize(world, memory_limit, options)
        @memory_limit = memory_limit
        @world = world
        @polling_interval = options[:polling_interval] || 60
        @memory_info_provider = options[:memory_info_provider] || GetProcessMem.new
        @memory_checked_callback = options[:memory_checked_callback]
        @memory_limit_exceeded_callback = options[:memory_limit_exceeded_callback]
        set_timer options[:initial_wait] || @polling_interval
      end

      def check_memory_state
        current_memory = @memory_info_provider.bytes
        if current_memory > @memory_limit
          @memory_limit_exceeded_callback.call(current_memory, @memory_limit) if @memory_limit_exceeded_callback
          # terminate the world and stop polling
          world.terminate
        else
          @memory_checked_callback.call(current_memory, @memory_limit) if @memory_checked_callback
          # memory is under the limit - keep waiting
          set_timer
        end
      end

      def set_timer(interval = @polling_interval)
        @world.clock.ping(self, interval, nil, :check_memory_state)
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
dynflow-1.3.0 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.2.3 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.2.2 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.2.1 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.2.0 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.2.0.pre1 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.6 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.5 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.4 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.3 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.2 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.1 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.1.0 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.5 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.4 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.3 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.2 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.1 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-1.0.0 lib/dynflow/watchers/memory_consumption_watcher.rb
dynflow-0.8.37 lib/dynflow/watchers/memory_consumption_watcher.rb