capistrano-ext 1.0.1 → 1.1.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.
- data/lib/capistrano/ext/monitor.rb +70 -4
- data/lib/capistrano/ext/version.rb +2 -2
- metadata +30 -25
@@ -36,8 +36,9 @@ module MonitorServers
|
|
36
36
|
print header * size, " "
|
37
37
|
else
|
38
38
|
print header
|
39
|
-
padding = size - header.length
|
40
|
-
print " "
|
39
|
+
padding = size - header.length
|
40
|
+
print " " if padding > 0
|
41
|
+
print "-" * (padding - 1) if padding > 1
|
41
42
|
print " "
|
42
43
|
end
|
43
44
|
end
|
@@ -57,14 +58,14 @@ module MonitorServers
|
|
57
58
|
# Monitor the load of the servers tied to the current task.
|
58
59
|
def load(options={})
|
59
60
|
servers = current_task.servers.sort
|
60
|
-
names = servers.map { |s| s.match(/^(
|
61
|
+
names = servers.map { |s| s.match(/^([^.]+)/)[1] }
|
61
62
|
time = date_column(:init)
|
62
63
|
load_column_width = "0.00".length * 3 + 2
|
63
64
|
|
64
65
|
puts "connecting..."
|
65
66
|
connect!
|
66
67
|
|
67
|
-
parser = Proc.new { |text| text.match(/
|
68
|
+
parser = Proc.new { |text| text.match(/average.*: (.*)$/)[1].split(/, /) }
|
68
69
|
delay = (options[:delay] || 30).to_i
|
69
70
|
|
70
71
|
running = true
|
@@ -225,6 +226,63 @@ module MonitorServers
|
|
225
226
|
def put_asset(name, to)
|
226
227
|
put(File.read("#{File.dirname(__FILE__)}/assets/#{name}"), to)
|
227
228
|
end
|
229
|
+
|
230
|
+
def uptime
|
231
|
+
results = {}
|
232
|
+
|
233
|
+
puts "querying servers..."
|
234
|
+
run "uptime" do |ch, stream, out|
|
235
|
+
if stream == :err
|
236
|
+
results[ch[:host]] = { :error => "error: #{out.strip}" }
|
237
|
+
else
|
238
|
+
if out.strip =~ /(\S+)\s+up\s+(.*?),\s+(\d+) users?,\s+load averages?: (.*)/
|
239
|
+
time = $1
|
240
|
+
uptime = $2
|
241
|
+
users = $3
|
242
|
+
loads = $4
|
243
|
+
|
244
|
+
results[ch[:host]] = { :uptime => uptime.strip.gsub(/ +/, " "),
|
245
|
+
:loads => loads,
|
246
|
+
:users => users,
|
247
|
+
:time => time }
|
248
|
+
else
|
249
|
+
results[ch[:host]] = { :error => "unknown uptime format: #{out.strip}" }
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
longest_hostname = results.keys.map { |k| k.length }.max
|
255
|
+
longest_uptime = results.values.map { |v| (v[:uptime] || "").length }.max
|
256
|
+
|
257
|
+
by_role = {}
|
258
|
+
roles.each do |name, list|
|
259
|
+
by_role[name] = {}
|
260
|
+
list.each do |role|
|
261
|
+
next unless results[role.host]
|
262
|
+
by_role[name][role.host] = results.delete(role.host)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
by_role[:zzz] = results unless results.empty?
|
267
|
+
|
268
|
+
add_newline = false
|
269
|
+
by_role.keys.sort_by { |k| k.to_s }.each do |role|
|
270
|
+
results = by_role[role]
|
271
|
+
next if results.empty?
|
272
|
+
|
273
|
+
puts "\n" if add_newline
|
274
|
+
add_newline = true
|
275
|
+
|
276
|
+
results.keys.sort.each do |server|
|
277
|
+
print "[%-*s] " % [longest_hostname, server]
|
278
|
+
if results[server][:error]
|
279
|
+
puts results[server][:error]
|
280
|
+
else
|
281
|
+
puts "up %*s, load %s" % [longest_uptime, results[server][:uptime], results[server][:loads]]
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
228
286
|
end
|
229
287
|
|
230
288
|
Capistrano.plugin :monitor, MonitorServers
|
@@ -247,4 +305,12 @@ STR
|
|
247
305
|
task :watch_requests, :roles => :app do
|
248
306
|
monitor.requests_per_second("#{shared_path}/log/#{self[:log_name] || "production.log"}")
|
249
307
|
end
|
308
|
+
|
309
|
+
desc <<-STR
|
310
|
+
Display the current uptime and load for all servers, nicely formatted with
|
311
|
+
columns all lined up for easy scanning.
|
312
|
+
STR
|
313
|
+
task :uptime do
|
314
|
+
monitor.uptime
|
315
|
+
end
|
250
316
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: capistrano-ext
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0
|
7
|
-
date: 2006-
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2006-09-14 00:00:00 -06:00
|
8
8
|
summary: Capistrano Extensions is a set of useful task libraries and methods that other developers may reference in their own recipe files.
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: jamis@37signals.com
|
12
12
|
homepage: http://www.rubyonrails.com
|
13
13
|
rubyforge_project:
|
@@ -18,37 +18,42 @@ bindir: bin
|
|
18
18
|
has_rdoc: false
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
28
|
+
post_install_message:
|
29
29
|
authors:
|
30
|
-
|
30
|
+
- Jamis Buck
|
31
31
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
- lib/capistrano
|
33
|
+
- lib/capistrano/ext
|
34
|
+
- lib/capistrano/ext/assets
|
35
|
+
- lib/capistrano/ext/monitor.rb
|
36
|
+
- lib/capistrano/ext/version.rb
|
37
|
+
- lib/capistrano/ext/assets/request-counter.rb
|
38
38
|
test_files: []
|
39
|
+
|
39
40
|
rdoc_options: []
|
41
|
+
|
40
42
|
extra_rdoc_files: []
|
43
|
+
|
41
44
|
executables: []
|
45
|
+
|
42
46
|
extensions: []
|
47
|
+
|
43
48
|
requirements: []
|
49
|
+
|
44
50
|
dependencies:
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
version:
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: capistrano
|
53
|
+
version_requirement:
|
54
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 1.0.0
|
59
|
+
version:
|