lib/modern_times/manager.rb in modern_times-0.1.1 vs lib/modern_times/manager.rb in modern_times-0.1.2
- old
+ new
@@ -1,17 +1,18 @@
module ModernTimes
class Manager
attr_accessor :allowed_workers
def initialize(config={})
+ @stopped = false
@config = config
@domain = config[:domain] || 'ModernTimes'
@supervisors = []
@jmx_server = JMX::MBeanServer.new
bean = ManagerMBean.new("#{@domain}.Manager", "Manager", self)
@jmx_server.register_mbean(bean, "#{@domain}:type=Manager")
- persist_file = config[:persist_file]
+ self.persist_file = config[:persist_file]
end
def add(worker_klass, num_workers, worker_options)
ModernTimes.logger.info "Starting #{worker_klass} with #{num_workers} workers with options #{worker_options.inspect}"
unless worker_klass.kind_of?(Class)
@@ -22,15 +23,15 @@
end
end
if @allowed_workers && !@allowed_workers.include?(worker_klass)
raise ModernTimes::Exception.new("Error: #{worker_klass.name} is not an allowed worker")
end
- supervisor = worker_klass.create_supervisor(self)
+ supervisor = worker_klass.create_supervisor(self, worker_options)
mbean = supervisor.create_mbean(@domain)
@supervisors << supervisor
supervisor.worker_count = num_workers
- @jmx_server.register_mbean(mbean, "#{@domain}:worker=#{worker_klass.name},type=Worker")
+ @jmx_server.register_mbean(mbean, "#{@domain}:worker=#{supervisor.name},type=Worker")
ModernTimes.logger.info "Started #{worker_klass.name} with #{num_workers} workers"
rescue Exception => e
ModernTimes.logger.error "Exception trying to add #{worker_klass.name}: #{e.message}\n\t#{e.backtrace.join("\n\t")}"
rescue java.lang.Exception => e
ModernTimes.logger.error "Java exception trying to add #{worker_klass.name}: #{e.message}\n\t#{e.backtrace.join("\n\t")}"
@@ -67,22 +68,27 @@
@persist_file = file
return unless file
@persist_file = file
if File.exist?(file)
hash = YAML.load_file(file)
- hash.each do |worker_klass, count|
- add(worker_klass, count)
+ hash.each do |worker_name, worker_hash|
+ klass = worker_hash[:klass]
+ count = worker_hash[:count]
+ options = worker_hash[:options]
+ options[:name] = worker_name
+ add(klass, count, options)
end
end
end
def save_persist_state
return unless @persist_file
hash = {}
@supervisors.each do |supervisor|
- hash[supervisor.worker_name] = {
- :worker_count => supervisor.worker_count,
- :options => supervisor.worker_options
+ hash[supervisor.name] = {
+ :klass => supervisor.worker_klass.name,
+ :count => supervisor.worker_count,
+ :options => supervisor.worker_options
}
end
File.open(@persist_file, 'w') do |out|
YAML.dump(hash, out )
end