srvmonitor 0.0.1 → 0.0.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.
- data/.gitignore +2 -0
- data/README.markdown +52 -0
- data/lib/srvmonitor/expectations/load_average.rb +6 -1
- data/lib/srvmonitor/notifiers/mailer.rb +3 -7
- data/lib/srvmonitor/report.rb +1 -1
- data/lib/srvmonitor/scout.rb +4 -2
- data/lib/srvmonitor/scouts/load_average.rb +4 -1
- data/lib/srvmonitor/scouts/timed_http.rb +21 -15
- data/lib/srvmonitor/version.rb +1 -1
- metadata +2 -2
data/.gitignore
CHANGED
data/README.markdown
CHANGED
@@ -1,6 +1,58 @@
|
|
1
1
|
# Srvconfig
|
2
2
|
Based on outpost (https://github.com/vinibaggio/outpost)
|
3
3
|
|
4
|
+
## Example
|
5
|
+
```ruby
|
6
|
+
require 'srvmonitor'
|
7
|
+
require 'srvmonitor/scouts'
|
8
|
+
|
9
|
+
# define your servers
|
10
|
+
server1 = SrvMonitor::Server.new(:name => 'first server', :description => 'web server', :host => '192.168.0.1', :method => :local, :user => 'deployer')
|
11
|
+
server2 = SrvMonitor::Server.new(:name => 'second server', :description => 'node server', :host => '192.168.0.2', :method => :local, :user => 'deployer')
|
12
|
+
|
13
|
+
# define your applications
|
14
|
+
railswatch = SrvMonitor::Application.create do
|
15
|
+
name 'Rails Watch'
|
16
|
+
scout SrvMonitor::Scouts::TimedHttp, :port => 80, :path => '/', :timeout => 15
|
17
|
+
report :up, :response_code => 200
|
18
|
+
|
19
|
+
server server1, :port => 3000, :method => :local
|
20
|
+
server server2, :method => :local
|
21
|
+
end
|
22
|
+
|
23
|
+
loadwatch = SrvMonitor::Application.create do
|
24
|
+
name 'Load Watch'
|
25
|
+
scout SrvMonitor::Scouts::LoadAverage
|
26
|
+
report :up, :load_average => { :less_than => 50 }
|
27
|
+
|
28
|
+
servers server1, server2, :method => :remote
|
29
|
+
end
|
30
|
+
|
31
|
+
# create the monitor
|
32
|
+
SrvMonitor::Monitor.create do
|
33
|
+
notifier SrvMonitor::Notifiers::Mailer, {
|
34
|
+
:delivery_method => 'smtp',
|
35
|
+
:address => 'smtp.gmail.com',
|
36
|
+
:port => '587',
|
37
|
+
:authentication => 'plain',
|
38
|
+
:username => 'username@gmail.com',
|
39
|
+
:password => 'password',
|
40
|
+
:enable_starttls_auto => true,
|
41
|
+
:to => 'you@gmail.com',
|
42
|
+
:status => :down }
|
43
|
+
|
44
|
+
alert :if => :down, :attempts => 5
|
45
|
+
applications railswatch, loadwatch
|
46
|
+
|
47
|
+
forever true
|
48
|
+
wait 5
|
49
|
+
|
50
|
+
run
|
51
|
+
end
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
|
4
56
|
## License
|
5
57
|
|
6
58
|
MIT License.
|
@@ -19,7 +19,12 @@ module SrvMonitor
|
|
19
19
|
# Method that will be used as an expectation to evaluate load average
|
20
20
|
def evaluate_load_average(scout, rules)
|
21
21
|
rules.all? do |rule, comparison|
|
22
|
-
|
22
|
+
case rule
|
23
|
+
when :less_than
|
24
|
+
scout.load_average < comparison
|
25
|
+
when :more_than
|
26
|
+
scout.load_average > comparison
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
@@ -48,11 +48,9 @@ module SrvMonitor
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
# Issues a notification through email. This is a callback, called by
|
52
|
-
# an
|
53
|
-
#
|
54
|
-
# latest status, messages and reports that can be queried to build
|
55
|
-
# a notification message.
|
51
|
+
# Issues a notification through email. This is a callback, called by an Outpost instance.
|
52
|
+
# @param [SrvMonitor::Monitor, #read] outpost an instance of an outpost, containing
|
53
|
+
# latest status, messages and reports that can be queried to build a notification message.
|
56
54
|
def send(monitor)
|
57
55
|
smtp_connect! if @delivery_method == :smtp
|
58
56
|
|
@@ -62,8 +60,6 @@ module SrvMonitor
|
|
62
60
|
mail.subject = @subject
|
63
61
|
mail.body = build_message(monitor)
|
64
62
|
|
65
|
-
#mail.delivery_method @delivery_method
|
66
|
-
|
67
63
|
mail.deliver
|
68
64
|
end
|
69
65
|
|
data/lib/srvmonitor/report.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module SrvMonitor
|
2
|
-
# Contain the status report of an
|
2
|
+
# Contain the status report of an SrvMonitor execution. Holds the name,
|
3
3
|
# description and status of the reported item.
|
4
4
|
class Report
|
5
5
|
# Summarizes the list of statuses in a single status only.
|
data/lib/srvmonitor/scout.rb
CHANGED
@@ -37,8 +37,10 @@ module SrvMonitor
|
|
37
37
|
raise NotImplementedError, "expectation '#{expectation}' wasn't implemented by #{self.class.name}"
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
statuses << status
|
40
|
+
begin
|
41
|
+
statuses << status if self.class.expectations[expectation].call(self, value)
|
42
|
+
rescue
|
43
|
+
statuses << :down
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
@@ -6,7 +6,6 @@ module SrvMonitor
|
|
6
6
|
extend SrvMonitor::Expectations::LoadAverage
|
7
7
|
|
8
8
|
attr_reader :load_average
|
9
|
-
#report_data :load_average
|
10
9
|
|
11
10
|
# Configure the scout with given options.
|
12
11
|
# @param [Hash] Options to setup the scout
|
@@ -33,6 +32,8 @@ module SrvMonitor
|
|
33
32
|
def local_exec
|
34
33
|
loadavg = File.open('/proc/loadavg').read
|
35
34
|
@load_average = loadavg.split(' ').first.to_f
|
35
|
+
rescue
|
36
|
+
@load_average = nil
|
36
37
|
end
|
37
38
|
|
38
39
|
def remote_exec
|
@@ -40,6 +41,8 @@ module SrvMonitor
|
|
40
41
|
loadavg = ssh.exec!('cat /proc/loadavg')
|
41
42
|
@load_average = loadavg.split(' ').first.to_f
|
42
43
|
end
|
44
|
+
rescue
|
45
|
+
@load_average = nil
|
43
46
|
end
|
44
47
|
|
45
48
|
end
|
@@ -11,7 +11,6 @@ module SrvMonitor
|
|
11
11
|
extend SrvMonitor::Expectations::ResponseTime
|
12
12
|
|
13
13
|
attr_reader :response_code, :response_body, :response_time
|
14
|
-
#report_data :response_code, :response_body, :response_time
|
15
14
|
|
16
15
|
# Configure the scout with given options.
|
17
16
|
# @param [Hash] Options to setup the scout
|
@@ -29,17 +28,11 @@ module SrvMonitor
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def execute
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
when remote? then remote_exec
|
36
|
-
when local? then local_exec
|
37
|
-
end
|
31
|
+
case
|
32
|
+
when remote? then remote_exec
|
33
|
+
when local? then local_exec
|
38
34
|
end
|
39
|
-
rescue
|
40
|
-
@response_time = (Time.now - previous_time).round
|
41
|
-
@response_code = @response_body = nil
|
42
|
-
rescue SocketError, Errno::ECONNREFUSED
|
35
|
+
rescue
|
43
36
|
@response_code = @response_body = @response_time = nil
|
44
37
|
end
|
45
38
|
|
@@ -52,20 +45,33 @@ module SrvMonitor
|
|
52
45
|
private
|
53
46
|
def local_exec
|
54
47
|
previous_time = Time.now
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
48
|
+
Timeout::timeout(@timeout) do
|
49
|
+
response = @http_class.get_response(@host, @path, @port)
|
50
|
+
@response_time = (Time.now - previous_time) * 1000 # Miliseconds
|
51
|
+
@response_code = response.code.to_i
|
52
|
+
@response_body = response.body
|
53
|
+
rescue Timeout::Error
|
54
|
+
@response_time = (Time.now - previous_time).round
|
55
|
+
@response_code = @response_body = nil
|
56
|
+
rescue
|
57
|
+
@response_code = @response_body = @response_time = nil
|
59
58
|
end
|
60
59
|
|
61
60
|
# Runs the scout, connecting to the host and getting the response code, body and time.
|
62
61
|
def remote_exec
|
62
|
+
previous_time = Time.now
|
63
|
+
Timeout::timeout(@timeout) do
|
63
64
|
server.exec do |ssh|
|
64
65
|
response = ssh.exec!("curl --write-out %{http_code}:%{time_total} --silent --output /dev/null #{ url }")
|
65
66
|
@response_code = response.split(':').first.to_i
|
66
67
|
@response_time = response.split(':').last.to_f * 1000
|
67
68
|
@response_body = ssh.exec!("curl #{ url }")
|
68
69
|
end
|
70
|
+
rescue Timeout::Error
|
71
|
+
@response_time = (Time.now - previous_time).round
|
72
|
+
@response_code = @response_body = nil
|
73
|
+
rescue
|
74
|
+
@response_code = @response_body = @response_time = nil
|
69
75
|
end
|
70
76
|
|
71
77
|
def url
|
data/lib/srvmonitor/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: srvmonitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-21 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Server monitor.
|
15
15
|
email: clickjogos@clickjogos.com.br
|