sponges 0.0.4 → 0.0.5

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.
data/README.md CHANGED
@@ -103,6 +103,16 @@ ruby example.rb stop -g
103
103
  In this case, you will have to trap the `HUP` signal, and handle a clean stop
104
104
  from each workers. The point is to wait for a task to be done before quitting.
105
105
 
106
+ Increment worker's pool size :
107
+ ``` bash
108
+ ruby example.rb increment # will add a worker to the pool.
109
+ ```
110
+
111
+ Decrement worker's pool size :
112
+ ``` bash
113
+ ruby example.rb decrement # will remove a worker to the pool.
114
+ ```
115
+
106
116
  Show a list of workers and their children.
107
117
  ``` bash
108
118
  ruby example.rb list
@@ -110,8 +120,7 @@ ruby example.rb list
110
120
 
111
121
  ## TODO
112
122
 
113
- * Specing.
114
- * Increment / decrement workers pool size with `TTIN` and `TTOUT`.
123
+ * More specs.
115
124
  * Check on OSX.
116
125
 
117
126
  ## Copyright
data/lib/sponges/cli.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  module Sponges
3
3
  # This class concern is to expose a nice CLI interface.
4
4
  #
5
- class Cli < Boson::Runner
5
+ class Cli < Boson::Runner
6
6
  option :daemonize, type: :boolean
7
7
  option :size, type: :numeric
8
8
  desc "Start workers"
@@ -32,6 +32,18 @@ module Sponges
32
32
  start(options)
33
33
  end
34
34
 
35
+ desc "Increment workers pool size"
36
+ def increment(options = {})
37
+ Sponges::Commander.new(Sponges::Configuration.worker_name, options).
38
+ increment
39
+ end
40
+
41
+ desc "Decrement workers pool size"
42
+ def decrement(options = {})
43
+ Sponges::Commander.new(Sponges::Configuration.worker_name, options).
44
+ decrement
45
+ end
46
+
35
47
  desc "Show running processes"
36
48
  def list
37
49
  redis = Nest.new('sponges')
@@ -27,6 +27,32 @@ module Sponges
27
27
  end
28
28
  end
29
29
 
30
+ def increment
31
+ Sponges.logger.info "Runner #{@name} increment message received."
32
+ if pid = @redis[:worker][@name][:supervisor].get
33
+ begin
34
+ Process.kill :TTIN, pid.to_i
35
+ rescue Errno::ESRCH => e
36
+ Sponges.logger.error e
37
+ end
38
+ else
39
+ Sponges.logger.info "No supervisor found."
40
+ end
41
+ end
42
+
43
+ def decrement
44
+ Sponges.logger.info "Runner #{@name} decrement message received."
45
+ if pid = @redis[:worker][@name][:supervisor].get
46
+ begin
47
+ Process.kill :TTOU, pid.to_i
48
+ rescue Errno::ESRCH => e
49
+ Sponges.logger.error e
50
+ end
51
+ else
52
+ Sponges.logger.info "No supervisor found."
53
+ end
54
+ end
55
+
30
56
  private
31
57
 
32
58
  def alive?(pid)
@@ -53,6 +53,18 @@ module Sponges
53
53
  handle_signal signal
54
54
  end
55
55
  end
56
+ trap(:TTIN) do
57
+ Sponges.logger.warn "Supervisor increment child's pool by one."
58
+ fork_children
59
+ end
60
+ trap(:TTOU) do
61
+ Sponges.logger.warn "Supervisor decrement child's pool by one."
62
+ if pids.first
63
+ kill_one(pids.first, :HUP)
64
+ else
65
+ Sponges.logger.warn "No more child to kill."
66
+ end
67
+ end
56
68
  trap(:CHLD) do
57
69
  pids.each do |pid|
58
70
  begin
@@ -83,13 +95,17 @@ module Sponges
83
95
 
84
96
  def kill_them_all(signal)
85
97
  pids.each do |pid|
86
- begin
87
- Process.kill signal, pid.to_i
88
- @pids.srem pid
89
- Sponges.logger.info "Child #{pid} receive a #{signal} signal."
90
- rescue Errno::ESRCH => e
91
- # Don't panic
92
- end
98
+ kill_one(pid, signal)
99
+ end
100
+ end
101
+
102
+ def kill_one(pid, signal)
103
+ begin
104
+ Process.kill signal, pid.to_i
105
+ @pids.srem pid
106
+ Sponges.logger.info "Child #{pid} receive a #{signal} signal."
107
+ rescue Errno::ESRCH => e
108
+ # Don't panic
93
109
  end
94
110
  end
95
111
 
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Sponges
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sponges
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-12 00:00:00.000000000 Z
12
+ date: 2012-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: boson