delayed_job_master 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97335497d66ae19f719fdfd655d184507e985b42
4
- data.tar.gz: d723ca1ed73489e737cf2653e4685ab0644a4a26
3
+ metadata.gz: ac6f45642e4c4848deea50d7819bfef1f0d17b8c
4
+ data.tar.gz: ac6ba6a5386a2f3d2cb72f495ce5c4bc06f5e266
5
5
  SHA512:
6
- metadata.gz: 56e8b33e80dee3d82b370f3275cc638fee882a458260c5304977c9379fcb6523aec185231038e0629fefb090c78d960ed4fa28e674e4b1a38d702b0492dacce0
7
- data.tar.gz: 4b26b8ffbe453683d07809afc5a968dcb115429b0c41a1b2593da12996e5ba1d814e65126d9afa63ad63ae52d353322be2f02385ce4e630e7ff849e549d522be
6
+ metadata.gz: 74016c0784861d3f3b2c43b8ff6bc2cd2dfe2252918f4848d752073218aea50b53bb372307e823c9f9b3cf8dc596d5617a0b1d0740e1d12873e289e0fcc074c3
7
+ data.tar.gz: 9ca2c253636b19f8810ba693ea9bc5c8ac6d2b8278a33aec12af5548cb17712f1f90cd0d94e8025daac1c539ffb805b84ee497ce86cdcd95cb61636b7ce1cdcb
data/.travis.yml CHANGED
@@ -2,8 +2,8 @@ language: ruby
2
2
  services:
3
3
  - mongodb
4
4
  rvm:
5
- - 2.3.4
6
- - 2.4.1
5
+ - 2.3
6
+ - 2.4
7
7
  gemfile:
8
8
  - gemfiles/active_record.gemfile
9
9
  - gemfiles/mongoid.gemfile
data/README.md CHANGED
@@ -16,7 +16,7 @@ A simple delayed_job master process to control multiple workers.
16
16
  * ruby 2.3+
17
17
  * delayed_job 4.1
18
18
 
19
- Supported delayed_job backends:
19
+ ## Supported delayed_job backends
20
20
 
21
21
  * delayed_job_active_record 4.1
22
22
  * delayed_job_mongoid 2.3
@@ -33,9 +33,9 @@ And then execute:
33
33
 
34
34
  $ bundle
35
35
 
36
- Create default files:
36
+ Create config files:
37
37
 
38
- $ rails generate delayed_job_master
38
+ $ rails generate delayed_job_master:config
39
39
 
40
40
  This command creates `bin/delayed_job_master` and `config/delayed_job_master.rb`.
41
41
 
@@ -96,6 +96,13 @@ end
96
96
  after_fork do |master, worker_info|
97
97
  Delayed::Worker.after_fork if defined?(Delayed::Worker)
98
98
  end
99
+
100
+ before_monitor do |master|
101
+ ActiveRecord::Base.connection.verify! if defined?(ActiveRecord::Base)
102
+ end
103
+
104
+ after_monitor do |master|
105
+ end
99
106
  ```
100
107
 
101
108
  ## Usage
@@ -2,7 +2,7 @@ module Delayed
2
2
  class Master
3
3
  class Callback
4
4
  def initialize(config = {})
5
- @config = config.select { |k, _| [:before_fork, :after_fork].include?(k) }
5
+ @config = config.select { |k, _| Delayed::Master::DSL::CALLBACK_CONFIGS.include?(k) }
6
6
  end
7
7
 
8
8
  def run(name, *args)
@@ -2,7 +2,7 @@ module Delayed
2
2
  class Master
3
3
  class DSL
4
4
  SIMPLE_CONFIGS = [:working_directory, :log_file, :log_level, :pid_file, :monitor_wait]
5
- CALLBACK_CONFIGS = [:before_fork, :after_fork]
5
+ CALLBACK_CONFIGS = [:before_fork, :after_fork, :before_monitor, :after_monitor]
6
6
 
7
7
  attr_reader :config
8
8
 
@@ -30,14 +30,18 @@ module Delayed
30
30
  def dispatch(signal)
31
31
  @worker_infos.each do |worker_info|
32
32
  next unless worker_info.pid
33
- begin
34
- Process.kill signal, worker_info.pid
35
- @logger.info "sent #{signal} signal to worker #{worker_info.pid}"
36
- rescue
37
- @logger.error "failed to send #{signal} signal to worker #{worker_info.pid}"
38
- end
33
+ dispatch_to(signal, worker_info.pid)
39
34
  end
40
35
  end
36
+
37
+ private
38
+
39
+ def dispatch_to(signal, pid)
40
+ Process.kill signal, pid
41
+ @logger.info "sent #{signal} signal to worker #{pid}"
42
+ rescue
43
+ @logger.error "failed to send #{signal} signal to worker #{pid}"
44
+ end
41
45
  end
42
46
  end
43
47
  end
@@ -1,5 +1,5 @@
1
1
  module Delayed
2
2
  class Master
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -27,8 +27,10 @@ module Delayed
27
27
  def monitor_while(&block)
28
28
  loop do
29
29
  break if block.call
30
- check_pid
31
- check_dynamic_worker
30
+ monitor do
31
+ check_pid
32
+ check_dynamic_worker
33
+ end
32
34
  sleep @config.monitor_wait.to_i
33
35
  end
34
36
  end
@@ -63,6 +65,14 @@ module Delayed
63
65
  worker
64
66
  end
65
67
 
68
+ def monitor
69
+ @callback.run(:before_monitor, @master)
70
+ yield
71
+ @callback.run(:after_monitor, @master)
72
+ rescue Exception => e
73
+ @logger.warn "#{e.class}: #{e.message} at #{__FILE__}: #{__LINE__}"
74
+ end
75
+
66
76
  def check_pid
67
77
  pid = wait_pid
68
78
  return unless pid
@@ -1,13 +1,17 @@
1
1
  require 'get_process_mem'
2
2
 
3
- class Delayed::Plugins::WorkerMemoryChecker < Delayed::Plugin
4
- callbacks do |lifecycle|
5
- lifecycle.after(:perform) do |worker, job|
6
- next unless worker.max_memory
7
- mem = GetProcessMem.new
8
- if mem.mb > worker.max_memory
9
- worker.master_logger.info "shutting down worker #{Process.pid} because it consumes large memory #{mem.mb.to_i} MB..."
10
- worker.stop
3
+ module Delayed
4
+ module Plugins
5
+ class WorkerMemoryChecker < Delayed::Plugin
6
+ callbacks do |lifecycle|
7
+ lifecycle.after(:perform) do |worker, job|
8
+ next unless worker.max_memory
9
+ mem = GetProcessMem.new
10
+ if mem.mb > worker.max_memory
11
+ worker.master_logger.info "shutting down worker #{Process.pid} because it consumes large memory #{mem.mb.to_i} MB..."
12
+ worker.stop
13
+ end
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -1,26 +1,30 @@
1
- class Delayed::Plugins::SignalHandler < Delayed::Plugin
2
- callbacks do |lifecycle|
3
- lifecycle.before(:execute) do |worker|
4
- worker.instance_eval do
5
- trap('USR1') do
6
- Thread.new do
7
- master_logger.info "reopening files..."
8
- Delayed::Util::FileReopener.reopen
9
- master_logger.info "reopened"
1
+ module Delayed
2
+ module Plugins
3
+ class SignalHandler < Delayed::Plugin
4
+ callbacks do |lifecycle|
5
+ lifecycle.before(:execute) do |worker|
6
+ worker.instance_eval do
7
+ trap('USR1') do
8
+ Thread.new do
9
+ master_logger.info "reopening files..."
10
+ Delayed::Util::FileReopener.reopen
11
+ master_logger.info "reopened"
12
+ end
13
+ end
14
+ trap('USR2') do
15
+ Thread.new do
16
+ $0 = "#{$0} [OLD]"
17
+ master_logger.info "shutting down worker #{Process.pid}..."
18
+ stop
19
+ end
20
+ end
10
21
  end
11
22
  end
12
- trap('USR2') do
13
- Thread.new do
14
- $0 = "#{$0} [OLD]"
15
- master_logger.info "shutting down worker #{Process.pid}..."
16
- stop
17
- end
23
+ lifecycle.after(:execute) do |worker|
24
+ worker.master_logger.info "shut down worker #{Process.pid}"
18
25
  end
19
26
  end
20
27
  end
21
- lifecycle.after(:execute) do |worker|
22
- worker.master_logger.info "shut down worker #{Process.pid}"
23
- end
24
28
  end
25
29
  end
26
30
 
@@ -1,11 +1,15 @@
1
- class Delayed::Plugins::StatusNotifier < Delayed::Plugin
2
- callbacks do |lifecycle|
3
- lifecycle.around(:perform) do |worker, job, &block|
4
- title = $0
5
- $0 = "#{title} [BUSY]"
6
- ret = block.call
7
- $0 = title
8
- ret
1
+ module Delayed
2
+ module Plugins
3
+ class StatusNotifier < Delayed::Plugin
4
+ callbacks do |lifecycle|
5
+ lifecycle.around(:perform) do |worker, job, &block|
6
+ title = $0
7
+ $0 = "#{title} [BUSY]"
8
+ ret = block.call
9
+ $0 = title
10
+ ret
11
+ end
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -0,0 +1,16 @@
1
+ require 'rails/generators'
2
+
3
+ module DelayedJobMaster
4
+ class ConfigGenerator < Rails::Generators::Base
5
+ source_root File.join(File.dirname(__FILE__), 'templates')
6
+
7
+ def create_script_file
8
+ template 'script', 'bin/delayed_job_master'
9
+ chmod 'bin/delayed_job_master', 0o755
10
+ end
11
+
12
+ def create_config_file
13
+ template 'config.rb', 'config/delayed_job_master.rb'
14
+ end
15
+ end
16
+ end
@@ -50,3 +50,10 @@ end
50
50
  after_fork do |master, worker_info|
51
51
  Delayed::Worker.after_fork if defined?(Delayed::Worker)
52
52
  end
53
+
54
+ before_monitor do |master|
55
+ ActiveRecord::Base.connection.verify! if defined?(ActiveRecord::Base)
56
+ end
57
+
58
+ after_monitor do |master|
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_master
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshikazu Kaneta
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-06 00:00:00.000000000 Z
11
+ date: 2017-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: delayed_job
@@ -170,9 +170,9 @@ files:
170
170
  - lib/delayed/worker/plugins/memory_checker.rb
171
171
  - lib/delayed/worker/plugins/signal_handler.rb
172
172
  - lib/delayed/worker/plugins/status_notifier.rb
173
- - lib/generators/delayed_job_master_generator.rb
174
- - lib/generators/templates/config.rb
175
- - lib/generators/templates/script
173
+ - lib/generators/delayed_job_master/config_generator.rb
174
+ - lib/generators/delayed_job_master/templates/config.rb
175
+ - lib/generators/delayed_job_master/templates/script
176
176
  homepage: https://github.com/kanety/delayed_job_master
177
177
  licenses:
178
178
  - MIT
@@ -1,14 +0,0 @@
1
- require 'rails/generators'
2
-
3
- class DelayedJobMasterGenerator < Rails::Generators::Base
4
- source_root File.join(File.dirname(__FILE__), 'templates')
5
-
6
- def create_script_file
7
- template 'script', 'bin/delayed_job_master'
8
- chmod 'bin/delayed_job_master', 0o755
9
- end
10
-
11
- def create_config_file
12
- template 'config.rb', 'config/delayed_job_master.rb'
13
- end
14
- end