immortalize 0.2.1 → 0.2.2

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.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/bin/immortalize +39 -13
  3. data/immortalize.gemspec +2 -2
  4. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/bin/immortalize CHANGED
@@ -25,8 +25,10 @@ optparse = OptionParser.new do |opts|
25
25
  Usage: #{$0} [run|remove|inspect] [options]
26
26
 
27
27
  To add (and start) a command:
28
- #{$0} run "command" --notification_recipient admin@email.com --max_failures 5
28
+ #{$0} run "command" --notify admin@email.com --max_failures 5
29
29
  To change a command's options, just re-add it.
30
+ You can group commands by adding a --group option, which allows
31
+ you to perform future actions on all commands in the group.
30
32
 
31
33
  To stop a daemon:
32
34
  #{$0} stop "command"
@@ -50,9 +52,9 @@ Run this command with no arguments as a cron job, to run every minute:
50
52
  Options:
51
53
  ENDBANNER
52
54
 
53
- $options[:notification_recipient] = nil
55
+ $options[:notify] = nil
54
56
  opts.on( '--notify EMAIL', "The email address to which failure notifications should be sent." ) do |email|
55
- $options[:notification_recipient] = email
57
+ $options[:notify] = email
56
58
  end
57
59
 
58
60
  $options[:max_failures] = 5
@@ -60,6 +62,11 @@ ENDBANNER
60
62
  $options[:max_failures] = num.to_i
61
63
  end
62
64
 
65
+ $options[:group] = nil
66
+ opts.on('--group GROUP', "Set the group of immortal commands that this command belongs to.") do |group|
67
+ $options[:group] = group
68
+ end
69
+
63
70
  $log_location = "#{ENV['HOME']}/.immortalize"
64
71
  opts.on('--log-location PATH', "Manually set the location for immortalize to keep its registry and cron.log (default #{$log_location})") do |path|
65
72
  if !File.directory?(path)
@@ -86,7 +93,7 @@ $action = ARGV[0]
86
93
 
87
94
  def notify(immortal, message)
88
95
  m = Merb::Mailer.new(
89
- :to => immortal[:notification_recipient],
96
+ :to => immortal[:notify],
90
97
  :from => "immortalize@video.iremix.org",
91
98
  :subject => "ImmortalCommand `#{immortal[:command]}' keeps dying!",
92
99
  :text => message
@@ -111,6 +118,10 @@ class Immortal
111
118
  end
112
119
  end
113
120
 
121
+ def self.in_group(group)
122
+ $registry.select {|k,i| i[:group] == group}.collect { |k,i| new(k) }
123
+ end
124
+
114
125
  attr_reader :identifier
115
126
  def initialize(identifier)
116
127
  @identifier = identifier
@@ -169,7 +180,7 @@ class Immortal
169
180
  end
170
181
 
171
182
  def inspect
172
- self[:command] + (failures.length >= self[:max_failures].to_i ? "\n\tLast #{self[:max_failures]} failures: #{failures[-5..1].join(", ")}" : '')
183
+ self[:command] + (" (group=#{self[:group]})" if self[:group]).to_s + (failures.length >= self[:max_failures].to_i ? "\n\tLast #{self[:max_failures]} failures: #{failures[-5..1].join(", ")}" : '')
173
184
  end
174
185
 
175
186
  private
@@ -179,6 +190,7 @@ class Immortal
179
190
  end
180
191
 
181
192
  # Curate the command string
193
+ $command_string = nil
182
194
  if ARGV[1].to_s.length > 1 && ARGV[1] !~ /^\d+$/ && ARGV[1] != 'all'
183
195
  $command_string = ARGV[1]
184
196
  # Complain about the string if it does not have proper output redirections
@@ -234,13 +246,19 @@ unless ::Object.const_defined?(:IRB)
234
246
  immortal.stop!
235
247
  end
236
248
  else
237
- identifier = SHA1.hexdigest($command_string)
238
- immortal = Immortal.new(identifier)
239
- immortal.stop!
249
+ if $command_string
250
+ identifier = SHA1.hexdigest($command_string)
251
+ immortal = Immortal.new(identifier)
252
+ immortal.stop!
253
+ elsif $options[:group]
254
+ Immortal.in_group($options[:group]).each do |immortal|
255
+ immortal.stop!
256
+ end
257
+ end
240
258
  end
241
259
 
242
260
  when 'run'
243
- if $options[:notification_recipient].nil?
261
+ if $options[:notify].nil?
244
262
  warn "Must include --notify EMAIL_ADDRESS when adding a command!"
245
263
  exit
246
264
  end
@@ -250,7 +268,8 @@ unless ::Object.const_defined?(:IRB)
250
268
 
251
269
  # Create the command
252
270
  $registry[identifier] ||= {
253
- :command => $command_string
271
+ :command => $command_string,
272
+ :group => $options[:group]
254
273
  }
255
274
  $registry[identifier].merge!($options)
256
275
 
@@ -274,9 +293,16 @@ unless ::Object.const_defined?(:IRB)
274
293
  puts "Deleted #{identifier}: \"#{reg[:command]}\""
275
294
  end
276
295
  else
277
- identifier = SHA1.hexdigest($command_string)
278
- reg = $registry.delete(identifier)
279
- puts "Deleted #{identifier}: \"#{reg[:command]}\""
296
+ if $command_string
297
+ identifier = SHA1.hexdigest($command_string)
298
+ reg = $registry.delete(identifier)
299
+ puts "Deleted #{identifier}: \"#{reg[:command]}\""
300
+ elsif $options[:group]
301
+ Immortal.in_group($options[:group]).each do |immortal|
302
+ reg = $registry.delete(immortal.identifier)
303
+ puts "Deleted #{immortal.identifier}: \"#{reg[:command]}\""
304
+ end
305
+ end
280
306
  end
281
307
 
282
308
  when nil
data/immortalize.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{immortalize}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["BehindLogic"]
12
- s.date = %q{2010-04-06}
12
+ s.date = %q{2010-04-27}
13
13
  s.default_executable = %q{immortalize}
14
14
  s.description = %q{Watch a specific process, restart it if it dies.}
15
15
  s.email = %q{gems@behindlogic.com}
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - BehindLogic
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-06 00:00:00 -04:00
17
+ date: 2010-04-27 00:00:00 -04:00
18
18
  default_executable: immortalize
19
19
  dependencies: []
20
20