what 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/bin/whatsup ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'optparse'
5
+ require 'what/version'
6
+ require 'what/sup'
7
+
8
+ options = Struct.new(:oks, :warnings, :alerts, :servers, :hide).new
9
+ options.alerts = true
10
+ options.servers = []
11
+
12
+ opts = OptionParser.new do |opts|
13
+ opts.banner = "Usage: what [options]"
14
+ opts.separator ""
15
+
16
+ opts.on_tail('-v', '--version', 'Show the version number.') do
17
+ puts What::VERSION
18
+ exit
19
+ end
20
+
21
+ opts.on_tail('-h', '--help', 'Show this message.') do
22
+ puts opts
23
+ exit
24
+ end
25
+
26
+ opts.on('-o', '--ok', 'Show details for ok, warning and alert levels.') do
27
+ options.oks = true
28
+ end
29
+
30
+ opts.on('-w', '--warning', 'Show details for warning and alert levels.') do
31
+ options.warnings = true
32
+ end
33
+
34
+ opts.on('-a', '--alert', 'Show details for alert levels (default).') do
35
+ options.alerts = true
36
+ end
37
+
38
+ opts.on('-s', '--server host:port', 'Show details from What server at host:port (default 127.0.0.1:9428). Multiple servers are supported.') do |s|
39
+ options.servers << s
40
+ end
41
+
42
+ opts.on('-d', '--hide', 'When showing multiple servers, hide servers who have nothing to show at the level set by -o, -w, or -a') do
43
+ options.hide = true
44
+ end
45
+
46
+ end
47
+ opts.parse!(ARGV)
48
+
49
+ What::Sup.run(options)
data/lib/what/helpers.rb CHANGED
@@ -2,17 +2,13 @@ module What
2
2
  module Helpers
3
3
  # Take an array of healths and determine overall health, on
4
4
  # the principle that overall health == the worst sub-health.
5
+ HEALTH = %w(ok warning alert)
5
6
  def self.overall_health(healths)
6
- healths.reduce('ok') do |overall, current|
7
- case current
8
- when 'ok'
9
- overall
10
- when 'warning'
11
- 'warning' if overall != 'alert'
12
- else
13
- 'alert'
14
- end
15
- end
7
+ worst_health = healths.map do |health|
8
+ HEALTH.index(health) || HEALTH.index('alert')
9
+ end.max
10
+
11
+ HEALTH[worst_health]
16
12
  end
17
13
 
18
14
  # Stolen from Rails (http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html)
data/lib/what/sup.rb ADDED
@@ -0,0 +1,91 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ ## Impletments the whatsup CLI for querying what servers
5
+
6
+ module What
7
+ class Sup
8
+
9
+ LEVELS = ['unknown', 'ok', 'warning', 'alert']
10
+
11
+ def self.run(opts)
12
+ new(opts).run
13
+ end
14
+
15
+ def initialize(opts)
16
+ @opts = opts
17
+ @statuses = []
18
+ @servers = if opts.servers.size > 0
19
+ opts.servers
20
+ else
21
+ ['127.0.0.1']
22
+ end
23
+ end
24
+
25
+ ##@@ TODO: Make this multi-threaded
26
+ def fetch_statuses
27
+ @servers.each do |s|
28
+ @statuses << self.fetch_status(*s.split(':'))
29
+ end
30
+ end
31
+
32
+ def fetch_status(host, port='9428')
33
+ status = { 'host' => host, 'health' => 'unknown', 'oks' => [], 'warnings' => [], 'alerts' => [] }
34
+ begin
35
+ response = JSON.parse(Net::HTTP.get(host, '/', port))
36
+ #status['details'] = response['details']
37
+ response['details'].each do |d|
38
+ if LEVELS.index(d['health']) > LEVELS.index(status['health'])
39
+ status['health'] = d['health']
40
+ end
41
+ status["#{d['health']}s"] << [d['type'], d['details']]
42
+ end
43
+ rescue
44
+ end
45
+ status
46
+ end
47
+
48
+ def print_status(status)
49
+ sections_to_show = self.sections_to_show
50
+ if !@opts.hide || sections_to_show.any?{|s| status[s[1]].size > 0} || (status['health'] == 'unknown')
51
+ puts "#{status['host']} | #{status['health'].upcase}"
52
+ puts
53
+ sections_to_show.each do |s|
54
+ print_status_section(s[1], status[s[1]])
55
+ end
56
+ end
57
+ end
58
+
59
+ def print_status_section(section, details)
60
+ puts " #{section}:"
61
+ details.each do |d|
62
+ puts " #{d[0]}"
63
+ puts " #{d[1].inspect}"
64
+ end
65
+ puts
66
+ end
67
+
68
+ def sections_to_show
69
+ sections = []
70
+ if @opts.alerts
71
+ sections << ['Alerts', 'alerts']
72
+ end
73
+ if @opts.warnings || @opts.oks
74
+ sections << ['Warnings', 'warnings']
75
+ end
76
+ if @opts.oks
77
+ sections << ['OKs', 'oks']
78
+ end
79
+ sections
80
+ end
81
+
82
+
83
+ def run
84
+ self.fetch_statuses
85
+ @statuses.each do |status|
86
+ self.print_status(status)
87
+ end
88
+ end
89
+
90
+ end
91
+ end
data/lib/what/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module What
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.4"
3
3
  end
data/what.gemspec CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "what"
7
7
  s.version = What::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Ryan Fitzgerald", "Ryan Lower"]
10
- s.email = ["rwfitzge@gmail.com", "rpjlower@gmail.com"]
9
+ s.authors = ["Ryan Fitzgerald", "Ryan Lower", "Colin Curtin"]
10
+ s.email = ["rwfitzge@gmail.com", "rpjlower@gmail.com", "colin.t.curtin@gmail.com"]
11
11
  s.homepage = "http://academia.edu/"
12
12
  s.summary = %q{Simple server monitoring tool}
13
13
  s.description = <<-EOS
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: what
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Fitzgerald
9
9
  - Ryan Lower
10
+ - Colin Curtin
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2012-08-10 00:00:00.000000000 Z
14
+ date: 2012-11-17 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: rack
@@ -73,8 +74,10 @@ description: ! 'What uses WEBrick to serve a JSON object representing the state
73
74
  email:
74
75
  - rwfitzge@gmail.com
75
76
  - rpjlower@gmail.com
77
+ - colin.t.curtin@gmail.com
76
78
  executables:
77
79
  - what
80
+ - whatsup
78
81
  extensions: []
79
82
  extra_rdoc_files: []
80
83
  files:
@@ -84,6 +87,7 @@ files:
84
87
  - README.md
85
88
  - Rakefile
86
89
  - bin/what
90
+ - bin/whatsup
87
91
  - example/modules/custom_module.rb
88
92
  - example/what.yml
89
93
  - lib/what.rb
@@ -104,6 +108,7 @@ files:
104
108
  - lib/what/monitor.rb
105
109
  - lib/what/server.rb
106
110
  - lib/what/status.rb
111
+ - lib/what/sup.rb
107
112
  - lib/what/version.rb
108
113
  - what.gemspec
109
114
  homepage: http://academia.edu/
@@ -131,4 +136,3 @@ signing_key:
131
136
  specification_version: 3
132
137
  summary: Simple server monitoring tool
133
138
  test_files: []
134
- has_rdoc: