Sha256: 8b231038f7dd95ce7abe5099c813a8d2aa934cf7dd713c0920f290b7fa02d6f2

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module Bluepill
  class Group
    attr_accessor :name, :processes, :logger
    attr_accessor :process_logger
    
    def initialize(name, options = {})
      self.name = name
      self.processes = []
      self.logger = options[:logger]
      
      if self.logger
        logger_prefix = self.name ? "#{self.name}:" : nil
        self.process_logger = Bluepill::Logger.new(self.logger, logger_prefix) 
      end
    end
    
    def add_process(process)
      process.logger = Logger.new(self.process_logger, process.name)
      self.processes << process
    end
    
    def tick
      self.each_process do |process|
        process.tick
      end
    end

    # proxied events
    [:start, :unmonitor, :stop, :restart].each do |event|
      eval <<-END
        def #{event}(process_name = nil)
          self.each_process do |process|
            process.dispatch!("#{event}") if process_name.nil? || process.name == process_name
          end
        end      
      END
    end
    
    def status
      status = []
      self.each_process do |process|
        status << [process.name, process.state]
      end
      status
    end
    
    
    protected
    def each_process(&block)
      self.processes.each(&block)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bluepill-0.0.1 lib/bluepill/group.rb