monittr 0.0.0 → 0.0.1

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/README.markdown CHANGED
@@ -8,18 +8,16 @@ It also displays the information in HTML with the provided helpers. You can use
8
8
 
9
9
  ![Screenshot: Monittr, a web interface for Monit statistics](https://github.com/karmi/monittr/raw/master/screenshot.png)
10
10
 
11
- ## Installation ##
12
-
13
- $ gem install monittr
14
-
15
11
 
16
12
  ## Usage ##
17
13
 
14
+ First, clone or download the sources from [_Github_](https://github.com/karmi/monittr/zipball/master).
15
+
18
16
  You can try the interface in a IRB console:
19
17
 
20
18
  $ irb -Ilib -rubygems -rmonittr
21
19
 
22
- You have to pass one or more URLs to a running Monit web server.
20
+ You have to pass one or more full URLs to a running Monit web server XML output, eg. `http://admin:monit@example.com:2812/_status?format=xml`.
23
21
 
24
22
  In case you don't have a running Monit handy, fake its output:
25
23
 
@@ -28,7 +26,7 @@ In case you don't have a running Monit handy, fake its output:
28
26
 
29
27
  Now, retrieve information from the cluster:
30
28
 
31
- cluster = Monittr::Cluster.new 'http://localhost:2812/_status?format=xml'
29
+ cluster = Monittr::Cluster.new ['http://localhost:2812/_status?format=xml']
32
30
  cluster.servers.size
33
31
 
34
32
  server = cluster.servers.first
@@ -53,7 +51,7 @@ You should see the information about two faked Monit instances in your browser.
53
51
 
54
52
  Provide the URLs to _Monit_ instances by setting the appropriate option:
55
53
 
56
- set :monit_urls, ['http://localhost:2812/_status?format=xml', 'http://localhost:2812/_status?format=xml']
54
+ set :monit_urls, ['http://production.example.com:2812/_status?format=xml', 'http://staging.example.com:2812/_status?format=xml']
57
55
 
58
56
 
59
57
  ## Customization ##
@@ -61,11 +59,25 @@ Provide the URLs to _Monit_ instances by setting the appropriate option:
61
59
  It's easy to customize the HTML output by setting the appropriate options in your _Sinatra_ application.
62
60
 
63
61
 
64
- set :template, Proc.new { File.join(root, 'template.erb') }
65
- set :stylesheet, '/path/to/my/stylesheet'
62
+ set :template, Proc.new { File.join(root, 'template.erb') }
63
+ set :stylesheet, '/path/to/my/stylesheet'
66
64
 
67
65
  Please see the example application for more.
68
66
 
67
+
68
+ ## Installation ##
69
+
70
+ The best way how to install the gem is from the source:
71
+
72
+ $ git clone http://github.com/karmi/monittr.git
73
+ $ cd monittr
74
+ $ rake install
75
+
76
+ Stable versions of the gem can be installed from _Rubygems_:
77
+
78
+ $ gem install monittr
79
+
80
+
69
81
  ## Other Information ##
70
82
 
71
83
  See the [_monit_](https://github.com/k33l0r/monit) gem for another Ruby interface to _Monit_.
@@ -0,0 +1,59 @@
1
+ $LOAD_PATH.unshift( File.expand_path('../../lib', __FILE__) )
2
+
3
+ require 'rubygems'
4
+ require 'monittr'
5
+ require 'sinatra'
6
+ require 'fakeweb'
7
+
8
+ require 'monittr/sinatra/monittr'
9
+
10
+ FakeWeb.register_uri(:get, 'http://localhost:2812/_status?format=xml', :body => File.read( File.expand_path('../../test/fixtures/status.xml', __FILE__)))
11
+
12
+ set :monit_urls, ['http://localhost:2812/_status?format=xml', 'http://localhost:2812/_status?format=xml']
13
+
14
+ # set :template, Proc.new { File.join(root, 'template.erb') }
15
+ # set :stylesheet, '/path/to/my/stylesheet'
16
+
17
+ get "/" do
18
+ erb :index
19
+ end
20
+
21
+ __END__
22
+
23
+ @@ layout
24
+ <!DOCTYPE html>
25
+ <html>
26
+ <head>
27
+ <title>Example Admin Application With Monittr</title>
28
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
29
+ <style>
30
+ body { color: #222; font-family: sans-serif; margin: 2em; }
31
+ #example { border: 4px solid #ccc; padding: 1em; }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <%= yield %>
36
+ </body>
37
+ </html>
38
+
39
+ @@ index
40
+
41
+ <p>This is your regular admin application created with <em>Sinatra</em>, having lots of features.</p>
42
+
43
+ <p>Now, you can embed the <em>Monittr</em> info anywhere by calling this helper method:</p>
44
+
45
+ <pre>monittr.html</pre>
46
+
47
+ <p>and you should see something like this:</p>
48
+
49
+ <div id="example">
50
+ <%= monittr.html %>
51
+ </div><!-- /monittr_example -->
52
+
53
+ <p>See, easy.</p>
54
+
55
+ <p>You can customize the template, of course, and set the path to it with:</p>
56
+
57
+ <pre>
58
+ set :template, '/path/to/my/template.erb'
59
+ </pre>
data/examples/monitrc ADDED
@@ -0,0 +1,29 @@
1
+ # ##########################################
2
+ # Run me with `monit -I -c examples/monitrc`
3
+ # ##########################################
4
+
5
+ set daemon 120
6
+
7
+ set alert user@example.com
8
+ set mailserver localhost
9
+
10
+ set httpd port 2812 and
11
+ use address localhost
12
+ allow localhost
13
+
14
+ check system myapplication.cz
15
+ if loadavg (1min) > 4 then alert
16
+ if loadavg (5min) > 2 then alert
17
+ if memory usage > 75% then alert
18
+ if cpu usage (user) > 70% then alert
19
+ if cpu usage (system) > 30% then alert
20
+ if cpu usage (wait) > 20% then alert
21
+
22
+ check filesystem tmp with path /tmp
23
+ if space usage > 90% for 5 times within 15 cycles then alert
24
+ if inode usage > 30000 then alert
25
+ group myapplication.cz
26
+
27
+ check host sinatra with address 127.0.0.1
28
+ if failed url http://127.0.0.1:4567/ with timeout 15 seconds then alert
29
+ group myapplication.cz
@@ -0,0 +1,20 @@
1
+ <h1>A Customized template for <em>Monittr</em></h1>
2
+
3
+ <p>You can customize the template as you wish,
4
+ just set the path to it with something like this in your application:</p>
5
+
6
+ <pre>set :template, Proc.new { File.join(root, 'template.erb') }</pre>
7
+
8
+ <hr>
9
+
10
+ <% cluster.servers.each do |server| %>
11
+ <h2>Server: <em><%= server.system.name %></em> // status: <%= server.system.status %></h2>
12
+
13
+ <h3>Processes</h3>
14
+ <ul>
15
+ <% server.processes.each do |process| %>
16
+ <li><%= process.name %></li>
17
+ <% end %>
18
+ </ul>
19
+
20
+ <% end %>
data/lib/monittr.rb CHANGED
@@ -4,6 +4,9 @@ require 'ostruct'
4
4
 
5
5
  module Monittr
6
6
 
7
+ # Represents a cluster of monitored instances.
8
+ # Pass and array of URLs to the constructor.
9
+ #
7
10
  class Cluster
8
11
 
9
12
  attr_reader :servers
@@ -15,7 +18,7 @@ module Monittr
15
18
  end
16
19
 
17
20
 
18
- # Represents one monitored system instance
21
+ # Represents one monitored instance
19
22
  #
20
23
  class Server
21
24
 
@@ -23,60 +26,113 @@ module Monittr
23
26
 
24
27
  def initialize(xml)
25
28
  @xml = Nokogiri::XML(xml)
26
- @system = Services::System.new(@xml.xpath("//service[@type=5]").first)
27
- @filesystems = @xml.xpath("//service[@type=0]").map { |xml| Services::Filesystem.new(xml) }
28
- @processes = @xml.xpath("//service[@type=3]").map { |xml| Services::Process.new(xml) }
29
+ if error = @xml.xpath('error').first
30
+ @system = Services::Base.new :name => error.attributes['name'].content,
31
+ :message => error.attributes['message'].content,
32
+ :status => 3
33
+ else
34
+ @system = Services::System.new(@xml.xpath("//service[@type=5]").first)
35
+ @filesystems = @xml.xpath("//service[@type=0]").map { |xml| Services::Filesystem.new(xml) }
36
+ @processes = @xml.xpath("//service[@type=3]").map { |xml| Services::Process.new(xml) }
37
+ end
29
38
  end
30
39
 
40
+ # Retrieve Monit status XML from the URL
41
+ #
31
42
  def self.fetch(url=nil)
32
43
  url = url || ENV['MONIT_URL'] || 'http://admin:monit@localhost:2812/_status?format=xml'
33
44
  self.new( RestClient.get(url) )
45
+ rescue Exception => e
46
+ self.new(%Q|<error status="3" name="#{e.class}" message="#{e.message}" />|)
47
+ end
48
+
49
+ def inspect
50
+ %Q|<#{self.class} name="#{system.name}" status="#{system.status}" message="#{system.message}">|
34
51
  end
35
52
 
36
53
  end
37
54
 
38
55
 
56
+
39
57
  module Services
58
+
40
59
  class Base < OpenStruct
41
60
  TYPES = { 0 => "Filesystem", 1 => "Directory", 2 => "File", 3 => "Daemon", 4 => "Connection", 5 => "System" }
61
+
62
+ def value(matcher, converter=:to_s)
63
+ @xml.xpath(matcher).first.content.send(converter) rescue nil
64
+ end
65
+
66
+ def inspect
67
+ %Q|<#{self.class} name="#{name}" status="#{status}" message="#{message}">|
68
+ end
42
69
  end
43
70
 
71
+ # A "system" service in Monit
72
+ #
73
+ # <service type="5">
74
+ #
44
75
  class System < Base
45
76
  def initialize(xml)
46
- super( { :name => xml.xpath('name').first.content,
47
- :status => xml.xpath('status').first.content.to_i,
48
- :monitored => xml.xpath('monitor').first.content.to_i,
49
- :load => (xml.xpath('system/load/avg01').first.content.to_f rescue nil),
50
- :cpu => (xml.xpath('system/cpu/user').first.content.to_f rescue nil),
51
- :memory => (xml.xpath('system/memory/percent').first.content.to_f rescue nil),
52
- :uptime => (xml.xpath('//server/uptime').first.content.to_i rescue nil)
77
+ @xml = xml
78
+ super( { :name => value('name' ),
79
+ :status => value('status', :to_i),
80
+ :monitored => value('monitor', :to_i),
81
+ :load => value('system/load/avg01', :to_f),
82
+ :cpu => value('system/cpu/user', :to_f),
83
+ :memory => value('system/memory/percent', :to_f),
84
+ :uptime => value('//server/uptime', :to_f)
53
85
  } )
54
86
  end
55
87
  end
56
88
 
89
+ # A "filesystem" service in Monit
90
+ #
91
+ # http://mmonit.com/monit/documentation/monit.html#filesystem_flags_testing
92
+ #
93
+ # <service type="0">
94
+ #
57
95
  class Filesystem < Base
58
96
  def initialize(xml)
59
- super( { :name => xml.xpath('name').first.content,
60
- :status => xml.xpath('status').first.content.to_i.to_i,
61
- :monitored => xml.xpath('monitor').first.content.to_i,
62
- :percent => xml.xpath('block/percent').first.content.to_f,
63
- :usage => xml.xpath('block/usage').first.content,
64
- :total => xml.xpath('block/total').first.content
97
+ @xml = xml
98
+ super( { :name => value('name' ),
99
+ :status => value('status', :to_i),
100
+ :monitored => value('monitor', :to_i),
101
+ :percent => value('block/percent', :to_f),
102
+ :usage => value('block/usage' ),
103
+ :total => value('block/total' )
65
104
  } )
105
+ rescue Exception => e
106
+ puts "ERROR: #{e.class} -- #{e.message}, In: #{e.backtrace.first}"
107
+ super( { :name => 'Error',
108
+ :status => 3,
109
+ :message => e.message } )
66
110
  end
67
111
  end
68
112
 
113
+ # A "process" service in Monit
114
+ #
115
+ # http://mmonit.com/monit/documentation/monit.html#pid_testing
116
+ #
117
+ # <service type="3">
118
+ #
69
119
  class Process < Base
70
120
  def initialize(xml)
71
- super( { :name => xml.xpath('name').first.content,
72
- :status => xml.xpath('status').first.content.to_i,
73
- :monitored => xml.xpath('monitor').first.content.to_i,
74
- :pid => (xml.xpath('pid').first.content.to_i rescue nil),
75
- :uptime => (xml.xpath('uptime').first.content.to_i rescue nil),
76
- :memory => (xml.xpath('memory/percent').first.content.to_f rescue nil),
77
- :cpu => (xml.xpath('cpu/percent').first.content.to_f rescue nil)
121
+ @xml = xml
122
+ super( { :name => value('name' ),
123
+ :status => value('status', :to_i),
124
+ :monitored => value('monitor', :to_i),
125
+ :pid => value('pid', :to_i),
126
+ :uptime => value('uptime', :to_i),
127
+ :memory => value('memory/percent', :to_f),
128
+ :cpu => value('cpu/percent', :to_i)
78
129
 
79
130
  } )
131
+ rescue Exception => e
132
+ puts "ERROR: #{e.class} -- #{e.message}, In: #{e.backtrace.first}"
133
+ super( { :name => 'Error',
134
+ :status => 3,
135
+ :message => e.message } )
80
136
  end
81
137
  end
82
138
 
@@ -12,6 +12,7 @@
12
12
  <span class="dot status <%= server.system.status == 0 ? 'running' : 'failure' %>">&middot;</span>
13
13
  <span class="dot monitored <%= server.system.monitored == 1 ? 'running' : 'failure' %>">&middot;</span>
14
14
  <%= server.system.name %>
15
+ <%= "<em>#{server.system.message}</em>" if server.system.message %>
15
16
  </strong>
16
17
 
17
18
  <small>
@@ -1,3 +1,3 @@
1
1
  module Monittr
2
- VERSION = "0.0.0"
2
+ VERSION = "0.0.1"
3
3
  end
@@ -1 +1,549 @@
1
- <?xml version="1.0" encoding="ISO-8859-1"?><monit><server><id>92d1d1a237da200ac04cc19890495214</id><incarnation>1289589073</incarnation><version>5.1.1</version><uptime>937661</uptime><poll>10</poll><startdelay>0</startdelay><localhostname>myapplication.cz</localhostname><controlfile>/usr/local/etc/monitrc</controlfile><httpd><address></address><port>2812</port><ssl>0</ssl></httpd></server><platform><name>FreeBSD</name><release>8.1-RELEASE</release><version>FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:36:49 UTC 2010 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC</version><machine>amd64</machine><cpu>4</cpu><memory>8373908</memory></platform><service type="0"><collected_sec>1290526733</collected_sec><collected_usec>927817</collected_usec><name>root</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><mode>755</mode><uid>0</uid><gid>0</gid><flags>20480</flags><block><percent>22.8</percent><usage>294.5 MB</usage><total>1978.5 MB</total></block><inode><percent>0.8</percent><usage>2382</usage><total>282622</total></inode></service><service type="0"><collected_sec>1290526733</collected_sec><collected_usec>927867</collected_usec><name>tmp</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><mode>1777</mode><uid>0</uid><gid>0</gid><flags>2101248</flags><block><percent>67.0</percent><usage>281.2 MB</usage><total>476.4 MB</total></block><inode><percent>4.3</percent><usage>2769</usage><total>63230</total></inode></service><service type="0"><collected_sec>1290526733</collected_sec><collected_usec>927885</collected_usec><name>usr</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><mode>755</mode><uid>0</uid><gid>0</gid><flags>2101248</flags><block><percent>35.1</percent><usage>2125.7 MB</usage><total>7815.5 MB</total></block><inode><percent>4.9</percent><usage>51155</usage><total>1036286</total></inode></service><service type="0"><collected_sec>1290526733</collected_sec><collected_usec>927903</collected_usec><name>var</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><mode>755</mode><uid>0</uid><gid>0</gid><flags>2101248</flags><block><percent>57.5</percent><usage>26554.6 MB</usage><total>53555.8 MB</total></block><inode><percent>0.1</percent><usage>8038</usage><total>7089150</total></inode></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>928167</collected_usec><name>thin_1</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups><name>my_application_thin</name></groups><pid>40199</pid><ppid>1</ppid><uptime>679095</uptime><children>0</children><memory><percent>1.2</percent><percenttotal>1.2</percenttotal><kilobyte>101576</kilobyte><kilobytetotal>101576</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu><unix><path>/var/run/thin/thin.1.sock</path><protocol>DEFAULT</protocol><responsetime>0.000</responsetime></unix></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>928169</collected_usec><name>thin_2</name><status>0</status><status_hint>0</status_hint><monitor>0</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups><name>my_application_thin</name></groups></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>928391</collected_usec><name>thin_3</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups><name>my_application_thin</name></groups><pid>40070</pid><ppid>1</ppid><uptime>679107</uptime><children>0</children><memory><percent>1.3</percent><percenttotal>1.3</percenttotal><kilobyte>109268</kilobyte><kilobytetotal>109268</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu><unix><path>/var/run/thin/thin.3.sock</path><protocol>DEFAULT</protocol><responsetime>0.000</responsetime></unix></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>938417</collected_usec><name>nginx</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups><name>myapplication</name></groups><pid>41305</pid><ppid>1</ppid><uptime>299250</uptime><children>6</children><memory><percent>0.0</percent><percenttotal>0.3</percenttotal><kilobyte>3264</kilobyte><kilobytetotal>29136</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu><port><hostname>localhost</hostname><portnumber>80</portnumber><request>/sign_in</request><protocol>HTTP</protocol><type>TCP</type><responsetime>0.010</responsetime></port></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>940124</collected_usec><name>couchdb</name><status>0</status><status_hint>524288</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>29555</pid><ppid>29554</ppid><uptime>59920</uptime><children>40</children><memory><percent>4.4</percent><percenttotal>7.2</percenttotal><kilobyte>372484</kilobyte><kilobytetotal>608548</kilobytetotal></memory><cpu><percent>4.2</percent><percenttotal>14.5</percenttotal></cpu><port><hostname>127.0.0.1</hostname><portnumber>5984</portnumber><request></request><protocol>DEFAULT</protocol><type>TCP</type><responsetime>0.000</responsetime></port></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>938754</collected_usec><name>couchdb_lucene</name><status>0</status><status_hint>524288</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>32378</pid><ppid>1</ppid><uptime>433976</uptime><children>0</children><memory><percent>2.0</percent><percenttotal>2.0</percenttotal><kilobyte>171184</kilobyte><kilobytetotal>171184</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu><port><hostname>127.0.0.1</hostname><portnumber>5985</portnumber><request></request><protocol>DEFAULT</protocol><type>TCP</type><responsetime>0.000</responsetime></port></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939199</collected_usec><name>redis</name><status>0</status><status_hint>524288</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>963</pid><ppid>1</ppid><uptime>937659</uptime><children>0</children><memory><percent>11.8</percent><percenttotal>11.8</percenttotal><kilobyte>992948</kilobyte><kilobytetotal>992948</kilobytetotal></memory><cpu><percent>0.2</percent><percenttotal>0.2</percenttotal></cpu><port><hostname>127.0.0.1</hostname><portnumber>6379</portnumber><request></request><protocol>DEFAULT</protocol><type>TCP</type><responsetime>0.000</responsetime></port></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939333</collected_usec><name>refresh_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>75352</pid><ppid>75350</ppid><uptime>67064</uptime><children>10</children><memory><percent>0.7</percent><percenttotal>9.4</percenttotal><kilobyte>59020</kilobyte><kilobytetotal>787952</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>5.9</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939465</collected_usec><name>enrichment_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>75434</pid><ppid>75433</ppid><uptime>49821</uptime><children>10</children><memory><percent>0.7</percent><percenttotal>8.4</percenttotal><kilobyte>59384</kilobyte><kilobytetotal>704804</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.6</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939601</collected_usec><name>enrichment_manager_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>14922</pid><ppid>14921</ppid><uptime>655967</uptime><children>1</children><memory><percent>0.6</percent><percenttotal>1.4</percenttotal><kilobyte>57204</kilobyte><kilobytetotal>119852</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939682</collected_usec><name>delete_keyword_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>12889</pid><ppid>12888</ppid><uptime>656639</uptime><children>1</children><memory><percent>0.6</percent><percenttotal>1.4</percenttotal><kilobyte>56364</kilobyte><kilobytetotal>119656</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939749</collected_usec><name>reports_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>12934</pid><ppid>12933</ppid><uptime>656624</uptime><children>1</children><memory><percent>0.6</percent><percenttotal>1.4</percenttotal><kilobyte>56908</kilobyte><kilobytetotal>120236</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939824</collected_usec><name>scheduler_workers</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>12870</pid><ppid>12869</ppid><uptime>656652</uptime><children>1</children><memory><percent>0.6</percent><percenttotal>1.3</percenttotal><kilobyte>56596</kilobyte><kilobytetotal>116260</kilobytetotal></memory><cpu><percent>0.0</percent><percenttotal>0.0</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939890</collected_usec><name>scheduler</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><pid>12681</pid><ppid>1</ppid><uptime>656765</uptime><children>0</children><memory><percent>0.7</percent><percenttotal>0.7</percenttotal><kilobyte>66200</kilobyte><kilobytetotal>66200</kilobytetotal></memory><cpu><percent>0.2</percent><percenttotal>0.2</percenttotal></cpu></service><service type="3"><collected_sec>1290526733</collected_sec><collected_usec>939892</collected_usec><name>enrichment_fresh</name><status>0</status><status_hint>0</status_hint><monitor>0</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups></service><service type="5"><collected_sec>1290526733</collected_sec><collected_usec>939894</collected_usec><name>myapplication.cz</name><status>0</status><status_hint>0</status_hint><monitor>1</monitor><monitormode>0</monitormode><pendingaction>0</pendingaction><groups></groups><system><load><avg01>5.28</avg01><avg05>5.66</avg05><avg15>5.06</avg15></load><cpu><user>63.2</user><system>21.8</system></cpu><memory><percent>37.0</percent><kilobyte>3099648</kilobyte></memory></system></service></monit>
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <monit>
3
+ <server>
4
+ <id>92d1d1a237da200ac04cc19890495214</id>
5
+ <incarnation>1289589073</incarnation>
6
+ <version>5.1.1</version>
7
+ <uptime>937661</uptime>
8
+ <poll>10</poll>
9
+ <startdelay>0</startdelay>
10
+ <localhostname>myapplication.cz</localhostname>
11
+ <controlfile>/usr/local/etc/monitrc</controlfile>
12
+ <httpd>
13
+ <address/>
14
+ <port>2812</port>
15
+ <ssl>0</ssl>
16
+ </httpd>
17
+ </server>
18
+ <platform>
19
+ <name>FreeBSD</name>
20
+ <release>8.1-RELEASE</release>
21
+ <version>FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:36:49 UTC 2010 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC</version>
22
+ <machine>amd64</machine>
23
+ <cpu>4</cpu>
24
+ <memory>8373908</memory>
25
+ </platform>
26
+ <service type="0">
27
+ <collected_sec>1290526733</collected_sec>
28
+ <collected_usec>927817</collected_usec>
29
+ <name>root</name>
30
+ <status>0</status>
31
+ <status_hint>0</status_hint>
32
+ <monitor>1</monitor>
33
+ <monitormode>0</monitormode>
34
+ <pendingaction>0</pendingaction>
35
+ <groups/>
36
+ <mode>755</mode>
37
+ <uid>0</uid>
38
+ <gid>0</gid>
39
+ <flags>20480</flags>
40
+ <block>
41
+ <percent>22.8</percent>
42
+ <usage>294.5 MB</usage>
43
+ <total>1978.5 MB</total>
44
+ </block>
45
+ <inode>
46
+ <percent>0.8</percent>
47
+ <usage>2382</usage>
48
+ <total>282622</total>
49
+ </inode>
50
+ </service>
51
+ <service type="0">
52
+ <collected_sec>1290526733</collected_sec>
53
+ <collected_usec>927867</collected_usec>
54
+ <name>tmp</name>
55
+ <status>0</status>
56
+ <status_hint>0</status_hint>
57
+ <monitor>1</monitor>
58
+ <monitormode>0</monitormode>
59
+ <pendingaction>0</pendingaction>
60
+ <groups/>
61
+ <mode>1777</mode>
62
+ <uid>0</uid>
63
+ <gid>0</gid>
64
+ <flags>2101248</flags>
65
+ <block>
66
+ <percent>67.0</percent>
67
+ <usage>281.2 MB</usage>
68
+ <total>476.4 MB</total>
69
+ </block>
70
+ <inode>
71
+ <percent>4.3</percent>
72
+ <usage>2769</usage>
73
+ <total>63230</total>
74
+ </inode>
75
+ </service>
76
+ <service type="0">
77
+ <collected_sec>1290526733</collected_sec>
78
+ <collected_usec>927885</collected_usec>
79
+ <name>usr</name>
80
+ <status>0</status>
81
+ <status_hint>0</status_hint>
82
+ <monitor>1</monitor>
83
+ <monitormode>0</monitormode>
84
+ <pendingaction>0</pendingaction>
85
+ <groups/>
86
+ <mode>755</mode>
87
+ <uid>0</uid>
88
+ <gid>0</gid>
89
+ <flags>2101248</flags>
90
+ <block>
91
+ <percent>35.1</percent>
92
+ <usage>2125.7 MB</usage>
93
+ <total>7815.5 MB</total>
94
+ </block>
95
+ <inode>
96
+ <percent>4.9</percent>
97
+ <usage>51155</usage>
98
+ <total>1036286</total>
99
+ </inode>
100
+ </service>
101
+ <service type="0">
102
+ <collected_sec>1290526733</collected_sec>
103
+ <collected_usec>927903</collected_usec>
104
+ <name>var</name>
105
+ <status>0</status>
106
+ <status_hint>0</status_hint>
107
+ <monitor>1</monitor>
108
+ <monitormode>0</monitormode>
109
+ <pendingaction>0</pendingaction>
110
+ <groups/>
111
+ <mode>755</mode>
112
+ <uid>0</uid>
113
+ <gid>0</gid>
114
+ <flags>2101248</flags>
115
+ <block>
116
+ <percent>57.5</percent>
117
+ <usage>26554.6 MB</usage>
118
+ <total>53555.8 MB</total>
119
+ </block>
120
+ <inode>
121
+ <percent>0.1</percent>
122
+ <usage>8038</usage>
123
+ <total>7089150</total>
124
+ </inode>
125
+ </service>
126
+ <service type="3">
127
+ <collected_sec>1290526733</collected_sec>
128
+ <collected_usec>928167</collected_usec>
129
+ <name>thin_1</name>
130
+ <status>0</status>
131
+ <status_hint>0</status_hint>
132
+ <monitor>1</monitor>
133
+ <monitormode>0</monitormode>
134
+ <pendingaction>0</pendingaction>
135
+ <groups>
136
+ <name>my_application_thin</name>
137
+ </groups>
138
+ <pid>40199</pid>
139
+ <ppid>1</ppid>
140
+ <uptime>679095</uptime>
141
+ <children>0</children>
142
+ <memory>
143
+ <percent>1.2</percent>
144
+ <percenttotal>1.2</percenttotal>
145
+ <kilobyte>101576</kilobyte>
146
+ <kilobytetotal>101576</kilobytetotal>
147
+ </memory>
148
+ <cpu>
149
+ <percent>0.0</percent>
150
+ <percenttotal>0.0</percenttotal>
151
+ </cpu>
152
+ <unix>
153
+ <path>/var/run/thin/thin.1.sock</path>
154
+ <protocol>DEFAULT</protocol>
155
+ <responsetime>0.000</responsetime>
156
+ </unix>
157
+ </service>
158
+ <service type="3">
159
+ <collected_sec>1290526733</collected_sec>
160
+ <collected_usec>928169</collected_usec>
161
+ <name>thin_2</name>
162
+ <status>0</status>
163
+ <status_hint>0</status_hint>
164
+ <monitor>0</monitor>
165
+ <monitormode>0</monitormode>
166
+ <pendingaction>0</pendingaction>
167
+ <groups>
168
+ <name>my_application_thin</name>
169
+ </groups>
170
+ </service>
171
+ <service type="3">
172
+ <collected_sec>1290526733</collected_sec>
173
+ <collected_usec>928391</collected_usec>
174
+ <name>thin_3</name>
175
+ <status>0</status>
176
+ <status_hint>0</status_hint>
177
+ <monitor>1</monitor>
178
+ <monitormode>0</monitormode>
179
+ <pendingaction>0</pendingaction>
180
+ <groups>
181
+ <name>my_application_thin</name>
182
+ </groups>
183
+ <pid>40070</pid>
184
+ <ppid>1</ppid>
185
+ <uptime>679107</uptime>
186
+ <children>0</children>
187
+ <memory>
188
+ <percent>1.3</percent>
189
+ <percenttotal>1.3</percenttotal>
190
+ <kilobyte>109268</kilobyte>
191
+ <kilobytetotal>109268</kilobytetotal>
192
+ </memory>
193
+ <cpu>
194
+ <percent>0.0</percent>
195
+ <percenttotal>0.0</percenttotal>
196
+ </cpu>
197
+ <unix>
198
+ <path>/var/run/thin/thin.3.sock</path>
199
+ <protocol>DEFAULT</protocol>
200
+ <responsetime>0.000</responsetime>
201
+ </unix>
202
+ </service>
203
+ <service type="3">
204
+ <collected_sec>1290526733</collected_sec>
205
+ <collected_usec>938417</collected_usec>
206
+ <name>nginx</name>
207
+ <status>0</status>
208
+ <status_hint>0</status_hint>
209
+ <monitor>1</monitor>
210
+ <monitormode>0</monitormode>
211
+ <pendingaction>0</pendingaction>
212
+ <groups>
213
+ <name>myapplication</name>
214
+ </groups>
215
+ <pid>41305</pid>
216
+ <ppid>1</ppid>
217
+ <uptime>299250</uptime>
218
+ <children>6</children>
219
+ <memory>
220
+ <percent>0.0</percent>
221
+ <percenttotal>0.3</percenttotal>
222
+ <kilobyte>3264</kilobyte>
223
+ <kilobytetotal>29136</kilobytetotal>
224
+ </memory>
225
+ <cpu>
226
+ <percent>0.0</percent>
227
+ <percenttotal>0.0</percenttotal>
228
+ </cpu>
229
+ <port>
230
+ <hostname>localhost</hostname>
231
+ <portnumber>80</portnumber>
232
+ <request>/sign_in</request>
233
+ <protocol>HTTP</protocol>
234
+ <type>TCP</type>
235
+ <responsetime>0.010</responsetime>
236
+ </port>
237
+ </service>
238
+ <service type="3">
239
+ <collected_sec>1290526733</collected_sec>
240
+ <collected_usec>940124</collected_usec>
241
+ <name>couchdb</name>
242
+ <status>0</status>
243
+ <status_hint>524288</status_hint>
244
+ <monitor>1</monitor>
245
+ <monitormode>0</monitormode>
246
+ <pendingaction>0</pendingaction>
247
+ <groups/>
248
+ <pid>29555</pid>
249
+ <ppid>29554</ppid>
250
+ <uptime>59920</uptime>
251
+ <children>40</children>
252
+ <memory>
253
+ <percent>4.4</percent>
254
+ <percenttotal>7.2</percenttotal>
255
+ <kilobyte>372484</kilobyte>
256
+ <kilobytetotal>608548</kilobytetotal>
257
+ </memory>
258
+ <cpu>
259
+ <percent>4.2</percent>
260
+ <percenttotal>14.5</percenttotal>
261
+ </cpu>
262
+ <port>
263
+ <hostname>127.0.0.1</hostname>
264
+ <portnumber>5984</portnumber>
265
+ <request/>
266
+ <protocol>DEFAULT</protocol>
267
+ <type>TCP</type>
268
+ <responsetime>0.000</responsetime>
269
+ </port>
270
+ </service>
271
+ <service type="3">
272
+ <collected_sec>1290526733</collected_sec>
273
+ <collected_usec>938754</collected_usec>
274
+ <name>couchdb_lucene</name>
275
+ <status>0</status>
276
+ <status_hint>524288</status_hint>
277
+ <monitor>1</monitor>
278
+ <monitormode>0</monitormode>
279
+ <pendingaction>0</pendingaction>
280
+ <groups/>
281
+ <pid>32378</pid>
282
+ <ppid>1</ppid>
283
+ <uptime>433976</uptime>
284
+ <children>0</children>
285
+ <memory>
286
+ <percent>2.0</percent>
287
+ <percenttotal>2.0</percenttotal>
288
+ <kilobyte>171184</kilobyte>
289
+ <kilobytetotal>171184</kilobytetotal>
290
+ </memory>
291
+ <cpu>
292
+ <percent>0.0</percent>
293
+ <percenttotal>0.0</percenttotal>
294
+ </cpu>
295
+ <port>
296
+ <hostname>127.0.0.1</hostname>
297
+ <portnumber>5985</portnumber>
298
+ <request/>
299
+ <protocol>DEFAULT</protocol>
300
+ <type>TCP</type>
301
+ <responsetime>0.000</responsetime>
302
+ </port>
303
+ </service>
304
+ <service type="3">
305
+ <collected_sec>1290526733</collected_sec>
306
+ <collected_usec>939199</collected_usec>
307
+ <name>redis</name>
308
+ <status>0</status>
309
+ <status_hint>524288</status_hint>
310
+ <monitor>1</monitor>
311
+ <monitormode>0</monitormode>
312
+ <pendingaction>0</pendingaction>
313
+ <groups/>
314
+ <pid>963</pid>
315
+ <ppid>1</ppid>
316
+ <uptime>937659</uptime>
317
+ <children>0</children>
318
+ <memory>
319
+ <percent>11.8</percent>
320
+ <percenttotal>11.8</percenttotal>
321
+ <kilobyte>992948</kilobyte>
322
+ <kilobytetotal>992948</kilobytetotal>
323
+ </memory>
324
+ <cpu>
325
+ <percent>0.2</percent>
326
+ <percenttotal>0.2</percenttotal>
327
+ </cpu>
328
+ <port>
329
+ <hostname>127.0.0.1</hostname>
330
+ <portnumber>6379</portnumber>
331
+ <request/>
332
+ <protocol>DEFAULT</protocol>
333
+ <type>TCP</type>
334
+ <responsetime>0.000</responsetime>
335
+ </port>
336
+ </service>
337
+ <service type="3">
338
+ <collected_sec>1290526733</collected_sec>
339
+ <collected_usec>939333</collected_usec>
340
+ <name>refresh_workers</name>
341
+ <status>0</status>
342
+ <status_hint>0</status_hint>
343
+ <monitor>1</monitor>
344
+ <monitormode>0</monitormode>
345
+ <pendingaction>0</pendingaction>
346
+ <groups/>
347
+ <pid>75352</pid>
348
+ <ppid>75350</ppid>
349
+ <uptime>67064</uptime>
350
+ <children>10</children>
351
+ <memory>
352
+ <percent>0.7</percent>
353
+ <percenttotal>9.4</percenttotal>
354
+ <kilobyte>59020</kilobyte>
355
+ <kilobytetotal>787952</kilobytetotal>
356
+ </memory>
357
+ <cpu>
358
+ <percent>0.0</percent>
359
+ <percenttotal>5.9</percenttotal>
360
+ </cpu>
361
+ </service>
362
+ <service type="3">
363
+ <collected_sec>1290526733</collected_sec>
364
+ <collected_usec>939465</collected_usec>
365
+ <name>enrichment_workers</name>
366
+ <status>0</status>
367
+ <status_hint>0</status_hint>
368
+ <monitor>1</monitor>
369
+ <monitormode>0</monitormode>
370
+ <pendingaction>0</pendingaction>
371
+ <groups/>
372
+ <pid>75434</pid>
373
+ <ppid>75433</ppid>
374
+ <uptime>49821</uptime>
375
+ <children>10</children>
376
+ <memory>
377
+ <percent>0.7</percent>
378
+ <percenttotal>8.4</percenttotal>
379
+ <kilobyte>59384</kilobyte>
380
+ <kilobytetotal>704804</kilobytetotal>
381
+ </memory>
382
+ <cpu>
383
+ <percent>0.0</percent>
384
+ <percenttotal>0.6</percenttotal>
385
+ </cpu>
386
+ </service>
387
+ <service type="3">
388
+ <collected_sec>1290526733</collected_sec>
389
+ <collected_usec>939601</collected_usec>
390
+ <name>enrichment_manager_workers</name>
391
+ <status>0</status>
392
+ <status_hint>0</status_hint>
393
+ <monitor>1</monitor>
394
+ <monitormode>0</monitormode>
395
+ <pendingaction>0</pendingaction>
396
+ <groups/>
397
+ <pid>14922</pid>
398
+ <ppid>14921</ppid>
399
+ <uptime>655967</uptime>
400
+ <children>1</children>
401
+ <memory>
402
+ <percent>0.6</percent>
403
+ <percenttotal>1.4</percenttotal>
404
+ <kilobyte>57204</kilobyte>
405
+ <kilobytetotal>119852</kilobytetotal>
406
+ </memory>
407
+ <cpu>
408
+ <percent>0.0</percent>
409
+ <percenttotal>0.0</percenttotal>
410
+ </cpu>
411
+ </service>
412
+ <service type="3">
413
+ <collected_sec>1290526733</collected_sec>
414
+ <collected_usec>939682</collected_usec>
415
+ <name>delete_keyword_workers</name>
416
+ <status>0</status>
417
+ <status_hint>0</status_hint>
418
+ <monitor>1</monitor>
419
+ <monitormode>0</monitormode>
420
+ <pendingaction>0</pendingaction>
421
+ <groups/>
422
+ <pid>12889</pid>
423
+ <ppid>12888</ppid>
424
+ <uptime>656639</uptime>
425
+ <children>1</children>
426
+ <memory>
427
+ <percent>0.6</percent>
428
+ <percenttotal>1.4</percenttotal>
429
+ <kilobyte>56364</kilobyte>
430
+ <kilobytetotal>119656</kilobytetotal>
431
+ </memory>
432
+ <cpu>
433
+ <percent>0.0</percent>
434
+ <percenttotal>0.0</percenttotal>
435
+ </cpu>
436
+ </service>
437
+ <service type="3">
438
+ <collected_sec>1290526733</collected_sec>
439
+ <collected_usec>939749</collected_usec>
440
+ <name>reports_workers</name>
441
+ <status>0</status>
442
+ <status_hint>0</status_hint>
443
+ <monitor>1</monitor>
444
+ <monitormode>0</monitormode>
445
+ <pendingaction>0</pendingaction>
446
+ <groups/>
447
+ <pid>12934</pid>
448
+ <ppid>12933</ppid>
449
+ <uptime>656624</uptime>
450
+ <children>1</children>
451
+ <memory>
452
+ <percent>0.6</percent>
453
+ <percenttotal>1.4</percenttotal>
454
+ <kilobyte>56908</kilobyte>
455
+ <kilobytetotal>120236</kilobytetotal>
456
+ </memory>
457
+ <cpu>
458
+ <percent>0.0</percent>
459
+ <percenttotal>0.0</percenttotal>
460
+ </cpu>
461
+ </service>
462
+ <service type="3">
463
+ <collected_sec>1290526733</collected_sec>
464
+ <collected_usec>939824</collected_usec>
465
+ <name>scheduler_workers</name>
466
+ <status>0</status>
467
+ <status_hint>0</status_hint>
468
+ <monitor>1</monitor>
469
+ <monitormode>0</monitormode>
470
+ <pendingaction>0</pendingaction>
471
+ <groups/>
472
+ <pid>12870</pid>
473
+ <ppid>12869</ppid>
474
+ <uptime>656652</uptime>
475
+ <children>1</children>
476
+ <memory>
477
+ <percent>0.6</percent>
478
+ <percenttotal>1.3</percenttotal>
479
+ <kilobyte>56596</kilobyte>
480
+ <kilobytetotal>116260</kilobytetotal>
481
+ </memory>
482
+ <cpu>
483
+ <percent>0.0</percent>
484
+ <percenttotal>0.0</percenttotal>
485
+ </cpu>
486
+ </service>
487
+ <service type="3">
488
+ <collected_sec>1290526733</collected_sec>
489
+ <collected_usec>939890</collected_usec>
490
+ <name>scheduler</name>
491
+ <status>0</status>
492
+ <status_hint>0</status_hint>
493
+ <monitor>1</monitor>
494
+ <monitormode>0</monitormode>
495
+ <pendingaction>0</pendingaction>
496
+ <groups/>
497
+ <pid>12681</pid>
498
+ <ppid>1</ppid>
499
+ <uptime>656765</uptime>
500
+ <children>0</children>
501
+ <memory>
502
+ <percent>0.7</percent>
503
+ <percenttotal>0.7</percenttotal>
504
+ <kilobyte>66200</kilobyte>
505
+ <kilobytetotal>66200</kilobytetotal>
506
+ </memory>
507
+ <cpu>
508
+ <percent>0.2</percent>
509
+ <percenttotal>0.2</percenttotal>
510
+ </cpu>
511
+ </service>
512
+ <service type="3">
513
+ <collected_sec>1290526733</collected_sec>
514
+ <collected_usec>939892</collected_usec>
515
+ <name>enrichment_fresh</name>
516
+ <status>0</status>
517
+ <status_hint>0</status_hint>
518
+ <monitor>0</monitor>
519
+ <monitormode>0</monitormode>
520
+ <pendingaction>0</pendingaction>
521
+ <groups/>
522
+ </service>
523
+ <service type="5">
524
+ <collected_sec>1290526733</collected_sec>
525
+ <collected_usec>939894</collected_usec>
526
+ <name>myapplication.cz</name>
527
+ <status>0</status>
528
+ <status_hint>0</status_hint>
529
+ <monitor>1</monitor>
530
+ <monitormode>0</monitormode>
531
+ <pendingaction>0</pendingaction>
532
+ <groups/>
533
+ <system>
534
+ <load>
535
+ <avg01>5.28</avg01>
536
+ <avg05>5.66</avg05>
537
+ <avg15>5.06</avg15>
538
+ </load>
539
+ <cpu>
540
+ <user>63.2</user>
541
+ <system>21.8</system>
542
+ </cpu>
543
+ <memory>
544
+ <percent>37.0</percent>
545
+ <kilobyte>3099648</kilobyte>
546
+ </memory>
547
+ </system>
548
+ </service>
549
+ </monit>
data/test/monittr_test.rb CHANGED
@@ -15,6 +15,24 @@ module Monittr
15
15
  end
16
16
  end
17
17
 
18
+ should "not fail on invalid URLS" do
19
+ assert_nothing_raised do
20
+ cluster = Monittr::Cluster.new %w[ NOTVALID
21
+ http://admin:monit@localhost:2812/_status?format=xml ]
22
+ assert_not_nil cluster.servers
23
+ assert_equal 2, cluster.servers.size
24
+ end
25
+ end
26
+
27
+ should "not fail on out-of-order URLs" do
28
+ cluster = Monittr::Cluster.new %w[ http://not-working/_status?format=xml
29
+ http://admin:monit@localhost:2812/_status?format=xml ]
30
+ assert_not_nil cluster.servers
31
+ assert_equal 2, cluster.servers.size
32
+ assert_equal 3, cluster.servers.first.system.status
33
+ assert_equal '500 Internal Server Error', cluster.servers.first.system.message
34
+ end
35
+
18
36
  end
19
37
 
20
38
  context "Server" do
@@ -23,10 +41,16 @@ module Monittr
23
41
  @server = Server.new( fixture_file('status.xml') )
24
42
  end
25
43
 
44
+ should "parse error XML on initialization" do
45
+ assert_nothing_raised do
46
+ server = Server.new(%Q|<error status="3" name="ERROR" message="MESSAGE" />|)
47
+ assert_equal 'ERROR', server.system.name
48
+ end
49
+ end
50
+
26
51
  should "fetch info from Monit embedded web server" do
27
52
  assert_nothing_raised { Server.fetch }
28
53
  assert_nothing_raised { Server.fetch('http://admin:monit@localhost:2812/_status?format=xml') }
29
- assert_raise(FakeWeb::NetConnectNotAllowedError) { Server.fetch('http://example.com') }
30
54
  end
31
55
 
32
56
  should "return system info" do
@@ -64,6 +88,20 @@ module Monittr
64
88
 
65
89
  end
66
90
 
91
+ [ Services::System, Services::Filesystem, Services::Process ].each do |klass|
92
+ context "#{klass}" do
93
+ should "deal with invalid XML" do
94
+ assert_nothing_raised do
95
+ part = klass.new('KRUPITZOWKA')
96
+ assert_nil part.name
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+
103
+ # ---------------------------------------------------------------------------
104
+
67
105
  end
68
106
 
69
107
  end
data/test/test_helper.rb CHANGED
@@ -16,7 +16,8 @@ class Test::Unit::TestCase
16
16
 
17
17
  def setup
18
18
  FakeWeb.register_uri(:get, 'http://admin:monit@localhost:2812/_status?format=xml', :body => fixture_file('status.xml'))
19
- FakeWeb.allow_net_connect = false
19
+ FakeWeb.register_uri(:get, 'http://not-working/_status?format=xml', :body => '', :status => ['500'])
20
+ # FakeWeb.allow_net_connect = false
20
21
  end
21
22
 
22
23
  def fixtures_path
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 0
9
- version: 0.0.0
8
+ - 1
9
+ version: 0.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Karel Minarik
@@ -125,6 +125,9 @@ files:
125
125
  - test/monittr_test.rb
126
126
  - test/sinatra_helper_test.rb
127
127
  - test/test_helper.rb
128
+ - examples/application.rb
129
+ - examples/monitrc
130
+ - examples/template.erb
128
131
  has_rdoc: true
129
132
  homepage: http://github.com/karmi/monittr
130
133
  licenses: []