resque-sliders 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,12 +10,17 @@ module Resque
10
10
 
11
11
  def initialize
12
12
  @host_status = redis_get_hash(host_config_key)
13
- @stale_hosts = Resque.redis.keys("#{key_prefix}:*").map { |x| y = x.split(':').last; y unless x == host_config_key or hosts.include?(y) }.compact.sort
13
+ @stale_hosts = Resque.redis.smembers(known_hosts_key) - hosts
14
14
  end
15
15
 
16
16
  # Return Array of currently online hosts
17
17
  def hosts
18
- @host_status.keys.select { |x| x unless %w(reload pause stop).include? x.split(':').last }.map { |x| x.split(':').first }.uniq.sort
18
+ Set.new.tap do |l|
19
+ @host_status.keys.each do |x|
20
+ x = x.split(':')
21
+ l << x.first unless %w(reload pause stop).include?(x.last)
22
+ end
23
+ end.to_a.sort
19
24
  end
20
25
 
21
26
  # Array of all hosts (current + stale)
@@ -23,6 +28,18 @@ module Resque
23
28
  (hosts + stale_hosts).sort
24
29
  end
25
30
 
31
+ # Remove all keys for a host (clean)
32
+ def remove_all_host_keys(hostname)
33
+ # expensive process O(N)
34
+ keys_to_delete = Resque.redis.keys("#{key_prefix}:*").select { |k| name = k.split(':').last; hostname == name }
35
+ # look at config hash, remove fields if relate to this hostname
36
+ fields_to_delete = redis_get_hash(host_config_key).keys.select { |k| name = k.split(':').first; hostname == name }
37
+ # do delete
38
+ Resque.redis.del(keys_to_delete) unless keys_to_delete.empty?
39
+ redis_del_hash(host_config_key, fields_to_delete) unless fields_to_delete.empty?
40
+ del_from_known_hosts(hostname)
41
+ end
42
+
26
43
  # Return current children count or nil if Host hasn't registered itself.
27
44
  def current_children(host)
28
45
  @host_status["#{host}:current_children"].to_i if max_children(host)
@@ -3,12 +3,28 @@ module Resque
3
3
  module ResqueSliders
4
4
  module Helpers
5
5
 
6
+ # prefix to all keys our plugin uses in redis
6
7
  def key_prefix
7
8
  "plugins:resque-sliders"
8
9
  end
9
10
 
11
+ # we store everything in this hash
10
12
  def host_config_key
11
- "plugins:resque-sliders:host_configs"
13
+ "#{key_prefix}:host_configs"
14
+ end
15
+
16
+ # used to keep track of hosts we know about
17
+ def known_hosts_key
18
+ "#{key_prefix}:known_hosts"
19
+ end
20
+
21
+ def add_to_known_hosts(hostname)
22
+ # add a hostname to the hosts set
23
+ Resque.redis.sadd(known_hosts_key, hostname)
24
+ end
25
+
26
+ def del_from_known_hosts(hostname)
27
+ Resque.redis.srem(known_hosts_key, hostname)
12
28
  end
13
29
 
14
30
  def redis_get_hash(key)
@@ -163,6 +163,7 @@ module Resque
163
163
  register_signal_handlers
164
164
  clean_signal_settings
165
165
  register_setting('max_children', @max_children)
166
+ add_to_known_hosts(@hostname)
166
167
  log! "Registered Max Children with Redis"
167
168
  $stdout.sync = true
168
169
  end
@@ -361,12 +362,10 @@ module Resque
361
362
  # Issue wait() to make sure pid isn't forgotten
362
363
  Timeout::timeout(wait) { Process.wait(pid) }
363
364
  to_delete << pid
364
- next
365
365
  rescue Timeout::Error
366
366
  # waited too long so just catch and ignore, and continue
367
367
  rescue Errno::ESRCH, Errno::ECHILD # child is gone
368
368
  to_delete << pid
369
- next
370
369
  end
371
370
  end
372
371
  to_delete.each { |pid| @zombie_pids.delete(pid) }
@@ -45,6 +45,11 @@ module Resque
45
45
  end
46
46
  end
47
47
 
48
+ # we need the ability to remove old hosts
49
+ app.delete '/sliders/:host' do
50
+ Commander.new.remove_all_host_keys(params[:host])
51
+ end
52
+
48
53
  app.helpers do
49
54
  def slider_view(filename, options={}, locals={})
50
55
  erb(File.read(File.join(VIEW_PATH, "#{filename}.erb")), options, locals)
@@ -1,7 +1,7 @@
1
1
  module Resque
2
2
  module Plugins
3
3
  module ResqueSliders
4
- Version = VERSION = '0.2.1'
4
+ Version = VERSION = '0.2.2'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,20 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-sliders
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
5
4
  prerelease:
5
+ version: 0.2.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kevin Mullin
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
12
+ date: 2013-10-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: resque
16
+ type: :runtime
16
17
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
@@ -22,10 +22,8 @@ dependencies:
22
22
  - - <
23
23
  - !ruby/object:Gem::Version
24
24
  version: '2.0'
25
- type: :runtime
26
- prerelease: false
27
- version_requirements: !ruby/object:Gem::Requirement
28
25
  none: false
26
+ version_requirements: !ruby/object:Gem::Requirement
29
27
  requirements:
30
28
  - - ! '>='
31
29
  - !ruby/object:Gem::Version
@@ -33,6 +31,8 @@ dependencies:
33
31
  - - <
34
32
  - !ruby/object:Gem::Version
35
33
  version: '2.0'
34
+ none: false
35
+ prerelease: false
36
36
  description: ! " Resque-Sliders is a plugin for Resque that enables you to control
37
37
  multiple hosts'\n running resque workers with a monitor PID watching over them.
38
38
  \ From the resque-web UI, you\n can add/delete/change which queues are running
@@ -83,26 +83,26 @@ rdoc_options: []
83
83
  require_paths:
84
84
  - lib
85
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
- none: false
87
86
  requirements:
88
87
  - - ! '>='
89
88
  - !ruby/object:Gem::Version
90
- version: '0'
91
89
  segments:
92
90
  - 0
93
- hash: 3990848849096963840
94
- required_rubygems_version: !ruby/object:Gem::Requirement
91
+ hash: -2979142470906782605
92
+ version: '0'
95
93
  none: false
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
95
  requirements:
97
96
  - - ! '>='
98
97
  - !ruby/object:Gem::Version
99
- version: '0'
100
98
  segments:
101
99
  - 0
102
- hash: 3990848849096963840
100
+ hash: -2979142470906782605
101
+ version: '0'
102
+ none: false
103
103
  requirements: []
104
104
  rubyforge_project:
105
- rubygems_version: 1.8.24
105
+ rubygems_version: 1.8.25
106
106
  signing_key:
107
107
  specification_version: 3
108
108
  summary: ! 'Resque-Sliders: a plugin for resque that controls which resque workers