mojombo-god 0.7.9 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,6 @@
1
- == 0.7.10 /
1
+ == 0.7.10 / 2008-11-13
2
+ * Major Enhancements
3
+ * Enable sending of arbitrary signals to a task or group via `god signal`
2
4
  * Bug Fixes
3
5
  * setup logging *after* loading a given config file when daemonized.
4
6
  enables logging to the 'God.log_file' specified in a config file. [github.com/jnewland]
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'hoe'
3
3
 
4
- Hoe.new('god', '0.7.9') do |p|
4
+ Hoe.new('god', '0.7.10') do |p|
5
5
  p.rubyforge_name = 'god'
6
6
  p.author = 'Tom Preston-Werner'
7
7
  p.email = 'tom@rubyisawesome.com'
data/bin/god CHANGED
@@ -33,6 +33,7 @@ begin
33
33
  load <file> load a config into a running god
34
34
  log <task name> show realtime log for given task
35
35
  status show status of each task
36
+ signal <task or group name> <sig> signal all matching tasks
36
37
  quit stop god
37
38
  terminate stop god and all tasks
38
39
  check run self diagnostic
data/lib/god.rb CHANGED
@@ -148,7 +148,7 @@ class Module
148
148
  end
149
149
 
150
150
  module God
151
- VERSION = '0.7.9'
151
+ VERSION = '0.7.10'
152
152
 
153
153
  LOG_BUFFER_SIZE_DEFAULT = 100
154
154
  PID_FILE_DIRECTORY_DEFAULTS = ['/var/run/god', '~/.god/pids']
@@ -481,6 +481,19 @@ module God
481
481
  info
482
482
  end
483
483
 
484
+ # Send a signal to each task.
485
+ # +name+ is the String name of the task or group
486
+ # +signal+ is the signal to send. e.g. HUP, 9
487
+ #
488
+ # Returns String[]:task_names
489
+ def self.signal(name, signal)
490
+ items = Array(self.watches[name] || self.groups[name]).dup
491
+ jobs = []
492
+ items.each { |w| jobs << Thread.new { w.signal(signal) } }
493
+ jobs.each { |j| j.join }
494
+ items.map { |x| x.name }
495
+ end
496
+
484
497
  # Log lines for the given task since the specified time.
485
498
  # +watch_name+ is the name of the task (may be abbreviated)
486
499
  # +since+ is the Time since which to report log lines
@@ -25,7 +25,7 @@ module God
25
25
  end
26
26
 
27
27
  def dispatch
28
- if %w{load status log quit terminate}.include?(@command)
28
+ if %w{load status signal log quit terminate}.include?(@command)
29
29
  setup
30
30
  send("#{@command}_command")
31
31
  elsif %w{start stop restart monitor unmonitor remove}.include?(@command)
@@ -84,6 +84,29 @@ module God
84
84
  end
85
85
  end
86
86
 
87
+ def signal_command
88
+ # get the name of the watch/group
89
+ name = @args[1]
90
+ signal = @args[2]
91
+
92
+ puts "Sending signal '#{signal}' to '#{name}'"
93
+
94
+ t = Thread.new { loop { sleep(1); STDOUT.print('.'); STDOUT.flush; sleep(1) } }
95
+
96
+ watches = @server.signal(name, signal)
97
+
98
+ # output response
99
+ t.kill; STDOUT.puts
100
+ unless watches.empty?
101
+ puts 'The following watches were affected:'
102
+ watches.each do |w|
103
+ puts ' ' + w
104
+ end
105
+ else
106
+ puts 'No matching task or group'
107
+ end
108
+ end
109
+
87
110
  def log_command
88
111
  begin
89
112
  Signal.trap('INT') { exit }
@@ -159,6 +159,15 @@ module God
159
159
  end
160
160
  end
161
161
 
162
+ # Send the given signal to this process.
163
+ #
164
+ # Returns nothing
165
+ def signal(sig)
166
+ sig = sig.to_i if sig.to_i != 0
167
+ applog(self, :info, "#{self.name} sending signal '#{sig}' to pid #{self.pid}")
168
+ ::Process.kill(sig, self.pid) rescue nil
169
+ end
170
+
162
171
  def start!
163
172
  call_action(:start)
164
173
  end
@@ -204,6 +204,10 @@ module God
204
204
  self.driver.message(:handle_event, [condition])
205
205
  end
206
206
 
207
+ def signal(sig)
208
+ # noop
209
+ end
210
+
207
211
  ###########################################################################
208
212
  #
209
213
  # Actions
@@ -14,7 +14,7 @@ module God
14
14
  def_delegators :@process, :name, :uid, :gid, :start, :stop, :restart,
15
15
  :name=, :uid=, :gid=, :start=, :stop=, :restart=,
16
16
  :pid_file, :pid_file=, :log, :log=, :log_cmd, :log_cmd=, :alive?, :pid,
17
- :unix_socket, :unix_socket=, :chroot, :chroot=, :env, :env=
17
+ :unix_socket, :unix_socket=, :chroot, :chroot=, :env, :env=, :signal
18
18
  #
19
19
  def initialize
20
20
  super
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojombo-god
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.9
4
+ version: 0.7.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-23 00:00:00 -07:00
12
+ date: 2008-11-13 00:00:00 -08:00
13
13
  default_executable: god
14
14
  dependencies: []
15
15