sponges 0.5.0.3.pre → 0.6.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 +7 -0
- data/README.md +28 -2
- data/lib/sponges/cli.rb +2 -1
- data/lib/sponges/configuration.rb +10 -1
- data/lib/sponges/handler.rb +17 -7
- data/lib/sponges/runner.rb +0 -1
- data/lib/sponges/supervisor.rb +6 -3
- data/lib/sponges/version.rb +1 -1
- metadata +12 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c6cece34aa41d2f8dad71f3d2135e7abe8aea29c
|
4
|
+
data.tar.gz: 9c07a08501a29f2c51c4b46d02ac3216aebfd11e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 163974d2f7704a4c564e6ec237de28daf0ce83ee5e2d25d3f984a3debb2162dc0442dcc66349bcabbc0f7cc227fd951d65d088f2f0d1bf128d5f8fbbff427c7c
|
7
|
+
data.tar.gz: a60e3ae1fcffd326f4863db94b4d9005762eea6816736b03ce7250a28bba5fae9c77e174a4965ff27218c520ba943c6d781d5cf7b38719d9c990f49eac1d6750
|
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# sponges
|
2
2
|
|
3
|
+
[](https://codeclimate.com/github/AF83/sponges)
|
5
|
+
[](http://badge.fury.io/rb/sponges)
|
7
|
+
|
3
8
|
When I build workers, I want them to be like an army of spongebobs, always
|
4
9
|
stressed and eager to work. `sponges` helps you build this army of sponges, to
|
5
10
|
control them, and, well, to kill them gracefully. Making them stressed and eager
|
@@ -43,12 +48,15 @@ In a file called `example.rb`:
|
|
43
48
|
require 'sponges'
|
44
49
|
|
45
50
|
class Worker
|
46
|
-
def
|
51
|
+
def initialize
|
47
52
|
# Trap the HUP signal, set a boolean to true.
|
48
53
|
trap(:HUP) {
|
49
54
|
Sponges.logger.info "HUP signal trapped, clean stop."
|
50
55
|
@hup = true
|
51
56
|
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def run
|
52
60
|
Sponges.logger.info Process.pid
|
53
61
|
if @hup # is true, we need to shutdown this worker
|
54
62
|
Sponges.logger.info "HUP signal trapped, shutdown..."
|
@@ -101,7 +109,7 @@ ruby example.rb start -d -s 8 # By default, size equals cpu core's size.
|
|
101
109
|
Retart gracefully 4 instances of the worker, with a timeout of 3 seconds and
|
102
110
|
daemonize them:
|
103
111
|
``` bash
|
104
|
-
ruby example.rb restart -g -
|
112
|
+
ruby example.rb restart -g -s 4 -t 3
|
105
113
|
```
|
106
114
|
|
107
115
|
Stop workers with a `QUIT` signal :
|
@@ -156,6 +164,24 @@ Sponges.configure do |config|
|
|
156
164
|
end
|
157
165
|
```
|
158
166
|
|
167
|
+
## Roadmap
|
168
|
+
|
169
|
+
### Version 0.6
|
170
|
+
|
171
|
+
* Deprecation notice about Redis store removal
|
172
|
+
|
173
|
+
|
174
|
+
### Version 0.7
|
175
|
+
|
176
|
+
* Inclusion of Http supervision
|
177
|
+
|
178
|
+
|
179
|
+
### Version 1.0
|
180
|
+
|
181
|
+
* Removal of Redis store
|
182
|
+
|
183
|
+
## [Changelog](CHANGELOG.md)
|
184
|
+
|
159
185
|
## Acknowledgements
|
160
186
|
|
161
187
|
sponges would not have been the same without [Jesse
|
data/lib/sponges/cli.rb
CHANGED
@@ -32,7 +32,7 @@ module Sponges
|
|
32
32
|
Sponges::Commander.new(Sponges::Configuration.worker_name, options).kill
|
33
33
|
end
|
34
34
|
|
35
|
-
option :daemonize, type: :boolean
|
35
|
+
option :daemonize, type: :boolean, default: true
|
36
36
|
option :size, type: :numeric
|
37
37
|
option :gracefully, type: :boolean
|
38
38
|
option :timeout, type: :numeric
|
@@ -61,6 +61,7 @@ module Sponges
|
|
61
61
|
puts "Command not available with the memory store"
|
62
62
|
exit
|
63
63
|
end
|
64
|
+
Sponges.logger.warn "Redis's store will be removed in version 1.0!"
|
64
65
|
redis = Nest.new('sponges')
|
65
66
|
puts %q{
|
66
67
|
___ _ __ ___ _ __ __ _ ___ ___
|
@@ -33,7 +33,16 @@ module Sponges
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def redis
|
36
|
-
@redis ||= Redis.new
|
36
|
+
@redis ||= Redis.new.tap { warn_redis }
|
37
|
+
end
|
38
|
+
|
39
|
+
def redis=(redis)
|
40
|
+
warn_redis
|
41
|
+
@redis = redis
|
42
|
+
end
|
43
|
+
|
44
|
+
def warn_redis
|
45
|
+
Sponges.logger.warn "Redis's store will be removed in version 1.0!"
|
37
46
|
end
|
38
47
|
end
|
39
48
|
end
|
data/lib/sponges/handler.rb
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
module Sponges
|
3
3
|
class Handler
|
4
4
|
extend Forwardable
|
5
|
-
attr_reader :supervisor
|
5
|
+
attr_reader :supervisor, :queue, :notifier
|
6
6
|
|
7
7
|
def initialize(supervisor)
|
8
8
|
@supervisor = supervisor
|
9
|
+
@queue, @notifier = IO.pipe
|
9
10
|
at_exit do
|
10
11
|
for_supervisor do
|
11
12
|
Sponges.logger.info "Supervisor exits."
|
@@ -13,9 +14,17 @@ module Sponges
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
17
|
+
def push(signal)
|
18
|
+
@notifier.puts(signal)
|
19
|
+
end
|
20
|
+
|
21
|
+
def call
|
22
|
+
Thread.new do
|
23
|
+
while signal = @queue.gets do
|
24
|
+
if Sponges::SIGNALS.include?(signal = find_signal(signal.chomp))
|
25
|
+
send "handler_#{signal.to_s.downcase}", signal
|
26
|
+
end
|
27
|
+
end
|
19
28
|
end
|
20
29
|
end
|
21
30
|
|
@@ -28,8 +37,8 @@ module Sponges
|
|
28
37
|
end
|
29
38
|
|
30
39
|
def find_signal(signal)
|
31
|
-
return signal if signal
|
32
|
-
if signal = Signal.list.find {|k,v| v == signal }
|
40
|
+
return signal.to_sym if signal =~ /\D/
|
41
|
+
if signal = Signal.list.find {|k,v| v == signal.to_i }
|
33
42
|
signal.first.to_sym
|
34
43
|
end
|
35
44
|
end
|
@@ -81,6 +90,7 @@ module Sponges
|
|
81
90
|
|
82
91
|
alias handler_quit handler_int
|
83
92
|
alias handler_term handler_int
|
93
|
+
alias handler_hup handler_int
|
84
94
|
|
85
95
|
def kill_them_all(signal)
|
86
96
|
store.children_pids.map do |pid|
|
@@ -100,7 +110,7 @@ module Sponges
|
|
100
110
|
|
101
111
|
def shutdown
|
102
112
|
Process.waitall
|
103
|
-
Sponges.logger.info "Children shutdown complete.
|
113
|
+
Sponges.logger.info "Children shutdown complete. Exiting..."
|
104
114
|
store.clear(name)
|
105
115
|
exit
|
106
116
|
rescue Errno::ESRCH, Errno::ECHILD, SignalException => e
|
data/lib/sponges/runner.rb
CHANGED
data/lib/sponges/supervisor.rb
CHANGED
@@ -13,15 +13,18 @@ module Sponges
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def start
|
16
|
+
handler.call
|
16
17
|
trap_signals
|
17
18
|
options[:size].times do
|
18
|
-
handler.
|
19
|
+
handler.push :TTIN
|
19
20
|
end
|
20
21
|
Sponges.logger.info "Supervisor started, waiting for messages."
|
21
22
|
sleep
|
23
|
+
rescue SystemExit => exception
|
24
|
+
raise exception
|
22
25
|
rescue Exception => exception
|
23
26
|
Sponges.logger.error exception
|
24
|
-
handler.
|
27
|
+
handler.push :INT
|
25
28
|
raise exception
|
26
29
|
end
|
27
30
|
|
@@ -37,7 +40,7 @@ module Sponges
|
|
37
40
|
|
38
41
|
def trap_signals
|
39
42
|
Sponges::SIGNALS.each do |signal|
|
40
|
-
trap(signal) {|signal| handler.
|
43
|
+
trap(signal) {|signal| handler.push signal }
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
data/lib/sponges/version.rb
CHANGED
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sponges
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease: 8
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- chatgris
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-03-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: boson
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: machine
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -84,27 +77,25 @@ files:
|
|
84
77
|
- lib/sponges/version.rb
|
85
78
|
homepage: http://af83.github.com/sponges
|
86
79
|
licenses: []
|
80
|
+
metadata: {}
|
87
81
|
post_install_message:
|
88
82
|
rdoc_options: []
|
89
83
|
require_paths:
|
90
84
|
- lib
|
91
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
-
none: false
|
93
86
|
requirements:
|
94
|
-
- -
|
87
|
+
- - '>='
|
95
88
|
- !ruby/object:Gem::Version
|
96
89
|
version: '0'
|
97
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
91
|
requirements:
|
100
|
-
- -
|
92
|
+
- - '>='
|
101
93
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
94
|
+
version: '0'
|
103
95
|
requirements: []
|
104
96
|
rubyforge_project:
|
105
|
-
rubygems_version:
|
97
|
+
rubygems_version: 2.0.0
|
106
98
|
signing_key:
|
107
|
-
specification_version:
|
99
|
+
specification_version: 4
|
108
100
|
summary: Turn any ruby object to a daemon controlling an army of sponges.
|
109
101
|
test_files: []
|
110
|
-
has_rdoc:
|