delayed_job_master 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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