modern_times 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -1,8 +1,9 @@
1
1
  require 'yaml'
2
+ require 'socket'
2
3
 
3
4
  module ModernTimes
4
5
  class Manager
5
- attr_accessor :allowed_workers
6
+ attr_accessor :allowed_workers, :dummy_host
6
7
  attr_reader :supervisors
7
8
 
8
9
  def initialize(config={})
@@ -14,6 +15,7 @@ module ModernTimes
14
15
  bean = ManagerMBean.new(@domain, self)
15
16
  @jmx_server.register_mbean(bean, ModernTimes.manager_mbean_object_name(@domain))
16
17
  self.persist_file = config[:persist_file]
18
+ self.worker_file = config[:worker_file]
17
19
  end
18
20
 
19
21
  def add(worker_klass, num_workers, worker_options={})
@@ -29,6 +31,7 @@ module ModernTimes
29
31
  raise ModernTimes::Exception, "Error: #{worker_klass.name} is not an allowed worker"
30
32
  end
31
33
  supervisor = worker_klass.create_supervisor(self, worker_options)
34
+ raise ModernTimes::Exception "A supervisor with name #{supervisor.name} already exists" if find_supervisor(supervisor.name)
32
35
  mbean = supervisor.create_mbean(@domain)
33
36
  @supervisors << supervisor
34
37
  supervisor.worker_count = num_workers
@@ -70,7 +73,6 @@ module ModernTimes
70
73
  end
71
74
 
72
75
  def persist_file=(file)
73
- @persist_file = file
74
76
  return unless file
75
77
  @persist_file = file
76
78
  if File.exist?(file)
@@ -99,5 +101,41 @@ module ModernTimes
99
101
  YAML.dump(hash, out )
100
102
  end
101
103
  end
104
+
105
+ def find_supervisor(name)
106
+ @supervisors.each do |supervisor|
107
+ return supervisor if supervisor.name == name
108
+ end
109
+ return nil
110
+ end
111
+
112
+ def worker_file=(file)
113
+ return unless file
114
+ @worker_file = file
115
+ if File.exist?(file)
116
+ hash = YAML.load_file(file)
117
+ host = @dummy_host || Socket.gethostname
118
+ host.sub!(/\..*/, '')
119
+ config = hash[host]
120
+ return unless config
121
+ # Don't save new states if the user never dynamically updates the workers
122
+ # Then they can solely define the workers via this file and updates to the counts won't be ignored.
123
+ save_persist_file = @persist_file
124
+ @persist_file = nil unless File.exist?(@persist_file)
125
+ begin
126
+ config.each do |worker_name, worker_hash|
127
+ # Don't add if persist_file already created this supervisor
128
+ next if find_supervisor(worker_name)
129
+ klass = worker_hash[:klass] || "#{worker_name}Worker"
130
+ count = worker_hash[:count]
131
+ options = worker_hash[:options] || {}
132
+ options[:name] = worker_name
133
+ add(klass, count, options)
134
+ end
135
+ ensure
136
+ @persist_file = save_persist_file
137
+ end
138
+ end
139
+ end
102
140
  end
103
141
  end
@@ -56,6 +56,8 @@ module ModernTimes
56
56
  manager.stop_on_signal
57
57
  manager.allowed_workers = rails_workers
58
58
  manager.persist_file = @cfg[:persist_file] || File.join(Rails.root, "log", "modern_times.persist")
59
+ manager.dummy_host = 'development' if Rails.env == 'development'
60
+ manager.worker_file = @cfg[:worker_file] || File.join(Rails.root, "config", "workers.yml")
59
61
  return manager
60
62
  end
61
63
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Brad Pardee