sponges 0.7.1 → 1.0.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: 8220619bcda7dec95d17c485c795515c819e3293
4
- data.tar.gz: eac07f3396446fab4436e97d277cce5fbae5fb63
3
+ metadata.gz: 7bc1020da5a609d654d69a21d51fc0b77d05ea5c
4
+ data.tar.gz: bf1a641c5e4a66379fd9e0bcf58cf067a951c129
5
5
  SHA512:
6
- metadata.gz: 11b08867fbc334aac7e747a02b71393c51aa04cff8e28a16538e4216b9d2ff2078356fd551aa50feba982e76758b95c243b6e549a43e3a858235ad95ba42f1b2
7
- data.tar.gz: 4eff5b0558fdd00185ca29b0ff7992b098b22d31c4ce12d6afe512543a5ab0ccf665389a8b1279a4667cbce1b2a70c94eae1be9f9cbf9dd6df83baa9f2b32df4
6
+ metadata.gz: 60249ea5adc99e00704121e52eec82ba4edb4f4275467e89f9f0f6cc3bf5c395ade5991b22704f84996e4ef0e5d5eec66285060dfc7dc265c53817fedaf1bf14
7
+ data.tar.gz: fee8bbcee7199bfde7a19d7d4a068ef083c42c921b8856b75dae539eff44f921a0221685e8d99e49c63f077e54570dfbda575be54cb9709d50f04b148de09d09
data/README.md CHANGED
@@ -71,7 +71,6 @@ end
71
71
 
72
72
  Sponges.configure do |config|
73
73
  config.logger = MyCustomLogger.new # optionnal
74
- config.redis = Redis.new # optionnal
75
74
  config.size = 3 # optionnal, default to cpu's size
76
75
  config.daemonize = true # optionnal, default to false
77
76
  config.port = 5032 # optionnal, default to 5032
@@ -200,30 +199,6 @@ example of response:
200
199
  }
201
200
  ```
202
201
 
203
- ## Stores
204
-
205
- sponges can store pids in memory or in redis. Memory is the default store. The
206
- `list` command is not available with the memory store.
207
-
208
- To select the redis store, you need to add `nest` to your application's
209
- Gemfile, and do the following.
210
-
211
- ``` ruby
212
- gem "nest"
213
- ```
214
-
215
- ``` ruby
216
- Sponges.configure do |config|
217
- config.store = :redis
218
- end
219
- ```
220
-
221
- ## Roadmap
222
-
223
- ### Version 1.0
224
-
225
- * Removal of Redis store
226
-
227
202
  ## [Changelog](CHANGELOG.md)
228
203
 
229
204
  ## Acknowledgements
@@ -16,8 +16,6 @@ require_relative 'sponges/runner'
16
16
  require_relative 'sponges/commander'
17
17
  require_relative 'sponges/cli'
18
18
  require_relative 'sponges/store'
19
- require_relative 'sponges/store/memory'
20
- require_relative 'sponges/store/redis'
21
19
 
22
20
  module Sponges
23
21
  STOP_SIGNALS = [:INT, :QUIT, :TERM]
@@ -54,38 +54,6 @@ module Sponges
54
54
  Sponges::Commander.new(Sponges::Configuration.worker_name, options).
55
55
  decrement
56
56
  end
57
-
58
- desc "Show running processes"
59
- def list
60
- if Sponges::Configuration.store == :memory
61
- puts "Command not available with the memory store"
62
- exit
63
- end
64
- Sponges.logger.warn "Redis's store will be removed in version 1.0!"
65
- redis = Nest.new('sponges')
66
- puts %q{
67
- ___ _ __ ___ _ __ __ _ ___ ___
68
- / __| '_ \ / _ \| '_ \ / _` |/ _ \/ __|
69
- \__ \ |_) | (_) | | | | (_| | __/\__ \
70
- |___/ .__/ \___/|_| |_|\__, |\___||___/
71
- | | __/ |
72
- |_| |___/
73
- }.gsub(/^\n/, '') + "\n"
74
- puts "Workers:"
75
- Array(redis[:hostnames].smembers).each do |hostname|
76
- puts hostname.rjust(6)
77
- Array(redis[hostname][:workers].smembers).each do |worker|
78
- puts worker.rjust(6)
79
- puts "supervisor".rjust(15)
80
- puts redis[hostname][:worker][worker][:supervisor].get.rjust(12)
81
- puts "children".rjust(13)
82
- Array(redis[hostname][:worker][worker][:pids].smembers).each do |pid|
83
- puts pid.rjust(12)
84
- end
85
- end
86
- end
87
- puts "\n"
88
- end
89
57
  end
90
58
 
91
59
  end
@@ -4,9 +4,8 @@ module Sponges
4
4
  #
5
5
  class Configuration
6
6
  class << self
7
- ACCESSOR = [:worker_name, :worker, :logger, :redis, :size,
8
- :daemonize, :after_fork, :timeout, :gracefully, :store,
9
- :port
7
+ ACCESSOR = [:worker_name, :worker, :logger, :size, :daemonize,
8
+ :after_fork, :timeout, :gracefully, :store, :port
10
9
  ]
11
10
  attr_accessor *ACCESSOR
12
11
 
@@ -15,9 +14,8 @@ module Sponges
15
14
  end
16
15
 
17
16
  def configuration
18
- ACCESSOR.inject({}) do |conf, method|
17
+ ACCESSOR.each_with_object({}) do |conf, method|
19
18
  conf[method] = send(method)
20
- conf
21
19
  end
22
20
  end
23
21
 
@@ -29,27 +27,10 @@ module Sponges
29
27
  Hook._on_chld = block
30
28
  end
31
29
 
32
- def store
33
- @store || :memory
34
- end
35
-
36
30
  def port
37
31
  @port || 5032
38
32
  end
39
33
 
40
- def redis
41
- @redis ||= Redis.new.tap { warn_redis }
42
- end
43
-
44
- def redis=(redis)
45
- warn_redis
46
- @redis = redis
47
- end
48
-
49
- def warn_redis
50
- Sponges.logger.warn "Redis's store will be removed in version 1.0!"
51
- end
52
-
53
34
  end
54
35
  end
55
36
 
@@ -14,7 +14,6 @@ module Sponges
14
14
  Sponges.logger.error "Runner #{@name} already started."
15
15
  exit
16
16
  end
17
- store.register_hostname Socket.gethostname
18
17
  end
19
18
 
20
19
  def start
@@ -33,12 +32,12 @@ module Sponges
33
32
 
34
33
  def trap_signals
35
34
  Sponges::SIGNALS.each do |signal|
36
- trap(signal) {|signal| kill_supervisor(signal) }
35
+ trap(signal) {|signal| kill_supervisor }
37
36
  end
38
37
  end
39
38
 
40
- def kill_supervisor(signal)
41
- Process.kill signal, @supervisor
39
+ def kill_supervisor
40
+ Process.kill :QUIT, @supervisor
42
41
  end
43
42
 
44
43
  def default_options
@@ -1,15 +1,56 @@
1
1
  # encoding: utf-8
2
2
  module Sponges
3
3
  class Store
4
- class << self
5
- def new(name)
6
- case Sponges::Configuration.store
7
- when :memory
8
- Sponges::Store::Memory.new(name)
9
- when :redis
10
- Sponges::Store::Redis.new(name)
11
- end
12
- end
4
+ extend Forwardable
5
+
6
+ attr_writer :supervisor_pid
7
+ attr_reader :pids, :name
8
+
9
+ def initialize(name)
10
+ @pids, @name = [], name
11
+ end
12
+
13
+ def_delegator :@pids, :<<, :add_children
14
+ def_delegator :@pids, :delete, :delete_children
15
+
16
+ def supervisor_pid
17
+ return @supervisor_pid if @supervisor_pid
18
+ s = find_supervisor
19
+ @supervisor_pid = s.pid if s
20
+ end
21
+
22
+ def children_pids
23
+ @pids.any? ? @pids : find_childs.map(&:pid)
24
+ end
25
+
26
+ def running?
27
+ !!find_supervisor
28
+ end
29
+
30
+ def register(supervisor_pid)
31
+ @supervisor_pid = supervisor_pid
32
+ end
33
+
34
+ def clear(name)
35
+ pids.clear
36
+ end
37
+
38
+ private
39
+
40
+ def supervisor_name
41
+ "#{name}_supervisor"
42
+ end
43
+
44
+ def childs_name
45
+ "#{name}_child"
46
+ end
47
+
48
+ def find_supervisor
49
+ Sys::ProcTable.ps.select {|f| f.cmdline == supervisor_name }.first
50
+ end
51
+
52
+ def find_childs
53
+ Sys::ProcTable.ps.select {|f| f.cmdline =~ /^#{childs_name}/ }
13
54
  end
14
55
  end
15
56
  end
@@ -9,7 +9,6 @@ module Sponges
9
9
  def initialize(name, options, store, block)
10
10
  @name, @options, @store, @block = name, options, store, block
11
11
  $PROGRAM_NAME = "#{@name}_supervisor"
12
- store.on_fork
13
12
  store.register Process.pid
14
13
  @children_seen = 0
15
14
  @handler = Handler.new self
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Sponges
3
- VERSION = "0.7.1"
3
+ VERSION = "1.0.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sponges
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - chatgris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-13 00:00:00.000000000 Z
11
+ date: 2013-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: boson
@@ -73,8 +73,6 @@ files:
73
73
  - lib/sponges/response.rb
74
74
  - lib/sponges/runner.rb
75
75
  - lib/sponges/store.rb
76
- - lib/sponges/store/memory.rb
77
- - lib/sponges/store/redis.rb
78
76
  - lib/sponges/supervisor.rb
79
77
  - lib/sponges/version.rb
80
78
  homepage: http://af83.github.com/sponges
@@ -96,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
94
  version: '0'
97
95
  requirements: []
98
96
  rubyforge_project:
99
- rubygems_version: 2.0.0.rc.2
97
+ rubygems_version: 2.0.0
100
98
  signing_key:
101
99
  specification_version: 4
102
100
  summary: Turn any ruby object to a daemon controlling an army of sponges.
@@ -1,64 +0,0 @@
1
- # encoding: utf-8
2
- module Sponges
3
- class Store
4
- class Memory
5
- extend Forwardable
6
-
7
- attr_writer :supervisor_pid
8
- attr_reader :pids, :name
9
-
10
- def initialize(name)
11
- @pids, @name = [], name
12
- end
13
-
14
- def_delegator :@pids, :<<, :add_children
15
- def_delegator :@pids, :delete, :delete_children
16
-
17
- def supervisor_pid
18
- return @supervisor_pid if @supervisor_pid
19
- s = find_supervisor
20
- @supervisor_pid = s.pid if s
21
- end
22
-
23
- def children_pids
24
- @pids.any? ? @pids : find_childs.map(&:pid)
25
- end
26
-
27
- def running?
28
- !!find_supervisor
29
- end
30
-
31
- def register(supervisor_pid)
32
- @supervisor_pid = supervisor_pid
33
- end
34
-
35
- def register_hostname(hostname)
36
- end
37
-
38
- def on_fork
39
- end
40
-
41
- def clear(name)
42
- pids.clear
43
- end
44
-
45
- private
46
-
47
- def supervisor_name
48
- "#{name}_supervisor"
49
- end
50
-
51
- def childs_name
52
- "#{name}_child"
53
- end
54
-
55
- def find_supervisor
56
- Sys::ProcTable.ps.select {|f| f.cmdline == supervisor_name }.first
57
- end
58
-
59
- def find_childs
60
- Sys::ProcTable.ps.select {|f| f.cmdline =~ /^#{childs_name}/ }
61
- end
62
- end
63
- end
64
- end
@@ -1,75 +0,0 @@
1
- # encoding: utf-8
2
- module Sponges
3
- class Store
4
- class Redis
5
- attr_reader :redis, :hostname_store, :name
6
- private :redis, :hostname_store
7
-
8
- def initialize(name)
9
- @name = name
10
- @redis ||= Nest.new('sponges', Configuration.redis)
11
- @hostname_store = @redis[Socket.gethostname]
12
- end
13
-
14
- def supervisor_pid
15
- hostname_store[:worker][name][:supervisor].get
16
- end
17
-
18
- def children_pids
19
- Array(hostname_store[:worker][name][:pids].smembers)
20
- end
21
-
22
- def running?
23
- if pid = hostname_store[:worker][name][:supervisor].get
24
- begin
25
- Process.kill 0, pid.to_i
26
- true
27
- rescue Errno::ESRCH => e
28
- hostname_store[:worker][name][:supervisor].del
29
- false
30
- end
31
- else
32
- false
33
- end
34
- end
35
-
36
- def register_hostname(hostname)
37
- redis[:hostnames].sadd hostname
38
- end
39
-
40
- def register(supervisor_pid)
41
- hostname_store[:workers].sadd name
42
- hostname_store[:worker][name][:supervisor].set supervisor_pid
43
- end
44
-
45
- def add_children(pid)
46
- hostname_store[:worker][name][:pids].sadd pid
47
- end
48
-
49
- def delete_children(pid)
50
- hostname_store[:worker][name][:pids].srem pid
51
- end
52
-
53
- def clear(name)
54
- hostname_store[:worker][name][:supervisor].del
55
- hostname_store[:workers].srem name
56
- hostname_store[:worker][name][:pids].del
57
- end
58
-
59
- def on_fork
60
- Sponges::Configuration.redis.client.reconnect
61
- end
62
-
63
- private
64
-
65
- def find_supervisor
66
- Sys::ProcTable.ps.select {|f| f.cmdline == supervisor_name }.first
67
- end
68
-
69
- def find_childs
70
- Sys::ProcTable.ps.select {|f| f.cmdline =~ /^#{childs_name}/ }
71
- end
72
- end
73
- end
74
- end
75
-