Sha256: 4a237f286f6140f4356b2189b70444de9f8159e5084a7c454f805bf3b31854a9

Contents?: true

Size: 1.93 KB

Versions: 20

Compression:

Stored size: 1.93 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]
    end
    
    def add_process(process)
      process.logger = self.logger.prefix_with(process.name)
      self.processes << process
    end
    
    def tick
      self.processes.each do |process|
        process.tick
      end
    end
    
    def determine_initial_state
      self.processes.each do |process|
        process.determine_initial_state
      end
    end

    # proxied events
    [:start, :unmonitor, :stop, :restart].each do |event|
      class_eval <<-END
        def #{event}(process_name = nil)
          threads = []
          affected = []
          self.processes.each do |process|
            next if process_name && process_name != process.name
            affected << [self.name, process.name].join(":")
            threads << Thread.new { process.handle_user_command("#{event}") }
          end
          threads.each { |t| t.join }
          affected
        end      
      END
    end
    
    def status(process_name = nil)
      lines = []
      if process_name.nil?
        prefix = self.name ? "  " : ""
        lines << "#{self.name}:" if self.name
      
        self.processes.each do |process|
          lines << "%s%s(pid:%s): %s" % [prefix, process.name, process.actual_pid, process.state]
          if process.monitor_children?
            process.children.each do |child|
              lines << "  %s%s: %s" % [prefix, child.name, child.state]
            end
          end
        end
      else
        self.processes.each do |process|
          next if process_name != process.name
          lines << "%s%s(pid:%s): %s" % [prefix, process.name, process.actual_pid, process.state]
          lines << process.statistics.to_s
        end
      end
      lines << ""
    end
    
  end
end

Version data entries

20 entries across 20 versions & 6 rubygems

Version Path
bluepill-0.0.46 lib/bluepill/group.rb
bluepill-0.0.45 lib/bluepill/group.rb
mwotton-bluepill-0.0.44 lib/bluepill/group.rb
ra-bluepill-0.0.48 lib/bluepill/group.rb
ra-bluepill-0.0.47 lib/bluepill/group.rb
ra-bluepill-0.0.46 lib/bluepill/group.rb
ra-bluepill-0.0.45 lib/bluepill/group.rb
ra-bluepill-0.0.44 lib/bluepill/group.rb
evented_bluepill-0.0.46 lib/bluepill/group.rb
bluepill-0.0.44 lib/bluepill/group.rb
sumskyi-bluepill-0.0.42.1 lib/bluepill/group.rb
sumskyi-bluepill-0.0.42.0 lib/bluepill/group.rb
bluepill-0.0.43 lib/bluepill/group.rb
bluepill-0.0.42 lib/bluepill/group.rb
bluepill-0.0.40 lib/bluepill/group.rb
dylanvaughn-bluepill-0.0.40 lib/bluepill/group.rb
dylanvaughn-bluepill-0.0.39 lib/bluepill/group.rb
bluepill-0.0.39 lib/bluepill/group.rb
bluepill-0.0.38 lib/bluepill/group.rb
bluepill-0.0.37 lib/bluepill/group.rb