Sha256: bd332cb3f30cc3181f1819a678730ca8e2be4901c0bf95f578562fb1bd771931

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

module Eye::Process::Child

  def add_childs
    add_or_update_childs
  end

  def add_or_update_childs
    return unless self[:monitor_children]

    return unless self.up?

    unless self.pid
      warn 'Cant add childs, because no pid'
      return
    end

    now_childs = Eye::SystemResources.childs(self.pid)
    new_childs = []
    exist_childs = []

    now_childs.each do |child_pid|
      if self.childs[child_pid]
        exist_childs << child_pid
      else
        new_childs << child_pid
      end
    end

    removed_childs = self.childs.keys - now_childs

    if new_childs.present?
      new_childs.each do |child_pid|
        self.childs[child_pid] = Eye::ChildProcess.new(child_pid, self[:monitor_children], logger.prefix)
      end      
    end

    if removed_childs.present?
      removed_childs.each do |child_pid|
        child = self.childs.delete(child_pid)
        child.delete if child && child.alive?
      end      
    end

    h = {:new => new_childs.size, :removed => removed_childs.size, :exists => exist_childs.size }
    debug "childs info: #{ h.inspect }"

    h
  end

  def remove_childs
    if childs.present?
      childs.keys.each do |child_pid|
        child = childs.delete(child_pid)
        child.delete if child && child.alive?
      end
    else
      debug 'No childs to clear'
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
eye-0.1.11 lib/eye/process/child.rb