Class: ProcessManager::ChildrenMonitor

Inherits:
Object
  • Object
show all
Defined in:
lib/process_manager/children_monitor.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ChildrenMonitor

Returns a new instance of ChildrenMonitor.



16
17
18
19
20
21
# File 'lib/process_manager/children_monitor.rb', line 16

def initialize(options = {})
  @options = options
  options[:logger] ||= Logger.new(STDOUT).tap do |logger|
    logger.level = Logger::INFO
  end
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



2
3
4
# File 'lib/process_manager/children_monitor.rb', line 2

def options
  @options
end

Class Method Details

.run_in_background(options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/process_manager/children_monitor.rb', line 4

def self.run_in_background(options = {})
  new(options).tap do |monitor|
    options[:interval] ||= 30
    Thread.new do
      loop do
        monitor.run
        sleep(options[:interval])
      end
    end
  end
end

Instance Method Details

#loggerObject



37
38
39
# File 'lib/process_manager/children_monitor.rb', line 37

def logger
  options[:logger]
end

#runObject



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/process_manager/children_monitor.rb', line 23

def run
  children_pids.each do |pid|
    memory_usage = process_memory_usage(pid)
    if memory_usage > options[:memory_limit]
      logger.info("Child #{pid} uses #{memory_usage} MB of memory, graceful shutdown signaled.")
      gracefully_kill_child(pid)
    else
      logger.debug("Child #{pid} uses #{memory_usage} MB of memory.")
    end
  end
rescue => e
  logger.error(e)
end