class ProcessManager::Daemon::Child

Attributes

index[RW]
master_pid[RW]
times_run[RW]

Public Class Methods

new(index, master_pid) click to toggle source

each child gets the PID of the master the child checks regularly if the master is alive and terminates itself if not

# File vendor/gems/process_manager/lib/process_manager/child.rb, line 10
def initialize(index, master_pid)
  @index = index
  @master_pid = master_pid
  @times_run = 0

  ProcessManager.set_program_name(description)
end

Public Instance Methods

description() click to toggle source

please override

# File vendor/gems/process_manager/lib/process_manager/child.rb, line 97
def description
  "child #{position} (#{$$}) of master #{master_pid}"
end
increase_run_counter() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 45
def increase_run_counter
  @times_run += 1
end
master_alive?() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 92
def master_alive?
  ProcessManager.process_running?(master_pid)
end
position() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 101
def position
  "#{index + 1}/#{ProcessManager::Config.config[:children]}"
end
prepare_run() click to toggle source

please override

# File vendor/gems/process_manager/lib/process_manager/child.rb, line 80
def prepare_run
end
prepare_run_with_error_handling() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 62
def prepare_run_with_error_handling
  with_error_handling do
    prepare_run
  end
end
run() click to toggle source

please override

# File vendor/gems/process_manager/lib/process_manager/child.rb, line 75
def run
  ProcessManager::Log.info "Hello from #{description}"
end
run_limit_met?() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 49
def run_limit_met?
  limit = ProcessManager::Config.config[:max_runs_per_worker].to_i
  return false if limit == 0
  times_run >= limit
end
run_with_error_handling() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 68
def run_with_error_handling
  with_error_handling do
    run
  end
end
should_stop?() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 88
def should_stop?
  @should_stop
end
start() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 18
def start
  trap_signals
  prepare_run_with_error_handling

  loop do
    if run_limit_met?
      ProcessManager::Log.info "#{description}: ran #{times_run} - shutting down"
      exit
    elsif should_stop?
      ProcessManager::Log.info "#{description}: shutting down"
      exit
    else # the main loop
      if master_alive?

        # the actual main running method
        run_with_error_handling
        increase_run_counter
      else
        ProcessManager::Log.info "#{description}: Master #{master_pid} not alive - shutting down"
        exit
      end
    end

    sleep ProcessManager::Config.config[:wait_between_runs].to_i
  end
end
stop() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 83
def stop
  @should_stop = true
  ProcessManager.set_program_name("#{description} - shutting down")
end
trap_signals() click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 105
def trap_signals
  [:INT, :QUIT, :TERM].each do |sig|
    trap(sig) do
      ProcessManager::Log.info "#{description}: Received #{sig} - setting internal shutting down flag and possibly finishing last run"
      stop
    end
  end

  # make sure we do not handle children like the master process
  trap(:CHLD, 'DEFAULT')
end
with_error_handling() { || ... } click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 55
def with_error_handling
  yield
rescue Exception => e
  ProcessManager::Log.error "#{description}: error during start: #{e.class} - #{e} - #{e.backtrace.join("\n")}"
  exit 1
end