multi_daemons 0.1.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +9 -0
- data/Gemfile.lock +9 -1
- data/README.md +22 -0
- data/lib/multi_daemons/controller.rb +6 -8
- data/lib/multi_daemons/daemon.rb +21 -16
- data/lib/multi_daemons/version.rb +1 -1
- data/multi_daemons.gemspec +2 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2c2ba21525698d5998c83e65666a37e11974c06191619f356c195735c6ed9bf
|
4
|
+
data.tar.gz: aebfd0a037c7aa4d8fc127e893f56771b78beb8f5e44208aa5000eb4ed9efeb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bea3e64a1cd62f4e96ef2da6141d3729a49873126780be17ba87d99e18502fc9b22ef0361aa0f4a9ef9e733cf99c1dde5fbf9eaa79d6153e26eb8e91dc7131d3
|
7
|
+
data.tar.gz: fd68ccd90b6b5105213b45bf1b8e9bcb5d9d52715d2280564ed68a0ff9db1698c2ab18e064ede61cc2fc7a96d9a508c72b2b477acebd73ae165d078a0e67820d
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
coverage
|
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
multi_daemons (0.
|
4
|
+
multi_daemons (1.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
byebug (10.0.2)
|
10
|
+
docile (1.3.1)
|
11
|
+
json (2.1.0)
|
10
12
|
metaclass (0.0.4)
|
11
13
|
minitest (5.11.3)
|
12
14
|
mocha (1.7.0)
|
13
15
|
metaclass (~> 0.0.1)
|
14
16
|
rake (10.5.0)
|
17
|
+
simplecov (0.16.1)
|
18
|
+
docile (~> 1.1)
|
19
|
+
json (>= 1.8, < 3)
|
20
|
+
simplecov-html (~> 0.10.0)
|
21
|
+
simplecov-html (0.10.2)
|
15
22
|
|
16
23
|
PLATFORMS
|
17
24
|
ruby
|
@@ -23,6 +30,7 @@ DEPENDENCIES
|
|
23
30
|
mocha (~> 1.7)
|
24
31
|
multi_daemons!
|
25
32
|
rake (~> 10.0)
|
33
|
+
simplecov
|
26
34
|
|
27
35
|
BUNDLED WITH
|
28
36
|
1.16.2
|
data/README.md
CHANGED
@@ -67,12 +67,34 @@ looper = MultiDaemons::Daemon.new(proc_code, name: 'looper', type: :proc, option
|
|
67
67
|
MultiDaemons.runner([looper], { force_kill_timeout: 60 })
|
68
68
|
```
|
69
69
|
|
70
|
+
We can even stop/start single daemon
|
71
|
+
```ruby
|
72
|
+
ruby server.rb start looper
|
73
|
+
|
74
|
+
or
|
75
|
+
|
76
|
+
ruby server.rb stop looper
|
77
|
+
```
|
78
|
+
|
79
|
+
|
70
80
|
### Supported options for runner:
|
71
81
|
force_kill_timeout: <integer> # To kill all running daemons within the specified time.
|
72
82
|
|
73
83
|
### Supported option for Daemon:
|
74
84
|
force_kill_timeout, log_dir, pid_dir
|
75
85
|
|
86
|
+
### Error reporter
|
87
|
+
|
88
|
+
You may edit the error reporter to notify about any exception inside the daemon in a custom way. To notify Errbit or HoneyBadger use the following configuration
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
MultiDaemons.error_reporters = [ proc { |exception, _worker, context_hsh| Airbrake.notify(exception, context_hsh) } ]
|
92
|
+
|
93
|
+
or
|
94
|
+
|
95
|
+
MultiDaemons.error_reporters = [ proc { |exception, _worker, context_hsh| HoneyBadger.notify(exception, context_hsh) } ]
|
96
|
+
```
|
97
|
+
|
76
98
|
## Development
|
77
99
|
|
78
100
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -8,7 +8,7 @@ module MultiDaemons
|
|
8
8
|
@options = options
|
9
9
|
unless ARGV[1].to_s.empty?
|
10
10
|
@daemons = filter_daemons(daemons)
|
11
|
-
puts "Daemon [#{ARGV[1]}] not exist.
|
11
|
+
puts "Daemon [#{ARGV[1]}] not exist. Available ones are #{daemons.map(&:name)}" if @daemons.empty?
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -30,14 +30,12 @@ module MultiDaemons
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def status
|
33
|
-
daemon_attrs =
|
33
|
+
daemon_attrs = {}
|
34
34
|
daemons.each do |daemon|
|
35
|
-
|
35
|
+
daemon.pids.each { |pid| daemon_attrs["#{daemon.name}-#{pid}"] = pid }
|
36
36
|
end
|
37
|
-
daemon_attrs.each do |
|
38
|
-
|
39
|
-
puts "#{hsh[:name]}(#{pid}): #{print_status(Pid.running?(pid))}"
|
40
|
-
end
|
37
|
+
daemon_attrs.each do |pid_name, pid|
|
38
|
+
puts "#{pid_name}: #{print_status(Pid.running?(pid))}"
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
@@ -45,7 +43,7 @@ module MultiDaemons
|
|
45
43
|
|
46
44
|
def filter_daemons(daemons)
|
47
45
|
daemon_names = ARGV[1].split(',')
|
48
|
-
daemons.select{ |v| daemon_names.include?(v.name) }
|
46
|
+
daemons.select { |v| daemon_names.include?(v.name) }
|
49
47
|
end
|
50
48
|
|
51
49
|
def print_status(status)
|
data/lib/multi_daemons/daemon.rb
CHANGED
@@ -59,26 +59,31 @@ module MultiDaemons
|
|
59
59
|
"#{log_dir}#{name}.log"
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
Process.setsid
|
62
|
+
def process_fork
|
63
|
+
begin
|
64
|
+
Process.setsid
|
66
65
|
|
67
|
-
|
66
|
+
$0 = name || $PROGRAM_NAME
|
68
67
|
|
69
|
-
|
68
|
+
PidStore.store(pid_file, Process.pid)
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
log = File.new(log_file, 'a')
|
71
|
+
STDIN.reopen '/dev/null'
|
72
|
+
STDOUT.reopen log
|
73
|
+
STDERR.reopen STDOUT
|
74
|
+
STDOUT.sync = true
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
yield if block_given?
|
77
|
+
rescue Exception => e
|
78
|
+
puts e.message
|
79
|
+
puts e.backtrace
|
80
|
+
ErrorReporter.report(e, class: self.class.name, name: name, type: type, options: options)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def safe_fork(&block)
|
85
|
+
Process.fork do
|
86
|
+
process_fork(&block)
|
82
87
|
end
|
83
88
|
end
|
84
89
|
|
data/multi_daemons.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = 'MultiDaemon provides an wrapper to run multiple daemon scripts'
|
12
12
|
spec.description = 'MultiDaemon provides an warpper to run multiple daemon scripts which can be controlled by start/stop and restart commands'
|
13
|
-
spec.homepage =
|
13
|
+
spec.homepage = 'https://github.com/santhanakarthikeyan/multi_daemons'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
@@ -35,4 +35,5 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
36
36
|
spec.add_development_dependency 'mocha', '~> 1.7'
|
37
37
|
spec.add_development_dependency 'rake', '~> 10.0'
|
38
|
+
spec.add_development_dependency 'simplecov'
|
38
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_daemons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- santhanakarthikeyan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: MultiDaemon provides an warpper to run multiple daemon scripts which
|
84
98
|
can be controlled by start/stop and restart commands
|
85
99
|
email:
|
@@ -88,6 +102,8 @@ executables: []
|
|
88
102
|
extensions: []
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
91
107
|
- CODE_OF_CONDUCT.md
|
92
108
|
- CONTRIBUTING.md
|
93
109
|
- Gemfile
|