opticon 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.loadpath +5 -0
- data/.project +17 -0
- data/CHANGELOG.txt +9 -0
- data/History.txt +0 -0
- data/Manifest.txt +3 -2
- data/Rakefile +2 -1
- data/examples/sample.rb +1 -1
- data/lib/opticon/http.rb +8 -4
- data/lib/opticon/notifier.rb +1 -1
- data/lib/opticon/service.rb +2 -2
- data/lib/opticon/tester.rb +25 -19
- data/lib/opticon/version.rb +1 -1
- data/lib/opticon.rb +11 -2
- data/test/opticon/tester_test.rb +1 -1
- metadata +63 -49
data/.loadpath
ADDED
data/.project
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<projectDescription>
|
3
|
+
<name>opticon</name>
|
4
|
+
<comment></comment>
|
5
|
+
<projects>
|
6
|
+
</projects>
|
7
|
+
<buildSpec>
|
8
|
+
<buildCommand>
|
9
|
+
<name>org.rubypeople.rdt.core.rubybuilder</name>
|
10
|
+
<arguments>
|
11
|
+
</arguments>
|
12
|
+
</buildCommand>
|
13
|
+
</buildSpec>
|
14
|
+
<natures>
|
15
|
+
<nature>org.rubypeople.rdt.core.rubynature</nature>
|
16
|
+
</natures>
|
17
|
+
</projectDescription>
|
data/CHANGELOG.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.0.3 :: 2008-03-02
|
2
|
+
|
3
|
+
* When a service doesn't respond, a ConnectionFailure is now correctly
|
4
|
+
recorded. You can change how long Opticon will wait for a connection by
|
5
|
+
setting the Opticon.default_timeout value. The timeout is 3 seconds by
|
6
|
+
default.
|
7
|
+
* Changed require paths to fix strange loading problems experienced
|
8
|
+
by some people.
|
9
|
+
|
1
10
|
=== 0.0.2 :: 2007-11-15
|
2
11
|
|
3
12
|
* A series of tests on a service can now be specified as a block to the
|
data/History.txt
ADDED
File without changes
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -20,7 +20,8 @@ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
|
20
20
|
DEPS = ['actionmailer']
|
21
21
|
|
22
22
|
NAME = "opticon"
|
23
|
-
REV =
|
23
|
+
REV = nil
|
24
|
+
#REV = `svn info`[/Revision: (\d+)/, 1] rescue nil
|
24
25
|
VERS = ENV['VERSION'] || (Opticon::VERSION::STRING + (REV ? ".#{REV}" : ""))
|
25
26
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
26
27
|
RDOC_OPTS = ['--quiet', '--title', "opticon documentation",
|
data/examples/sample.rb
CHANGED
data/lib/opticon/http.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'net/https'
|
3
3
|
require 'uri'
|
4
|
+
require 'timeout'
|
4
5
|
|
5
6
|
module Opticon
|
6
7
|
module HTTP
|
@@ -28,11 +29,14 @@ module Opticon
|
|
28
29
|
http.use_ssl = uri.scheme == "https"
|
29
30
|
|
30
31
|
response = nil
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
|
33
|
+
timeout(Opticon.default_timeout) do
|
34
|
+
http.start do
|
35
|
+
path = uri.path.empty? ? '/' : uri.path
|
36
|
+
response = http.request_get(path)
|
37
|
+
end
|
34
38
|
end
|
35
|
-
|
39
|
+
|
36
40
|
response
|
37
41
|
end
|
38
42
|
end
|
data/lib/opticon/notifier.rb
CHANGED
data/lib/opticon/service.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'uri'
|
2
|
-
require '
|
2
|
+
require File.dirname(File.expand_path(__FILE__))+'/tester'
|
3
3
|
|
4
4
|
module Opticon
|
5
5
|
class Service
|
@@ -62,7 +62,7 @@ module Opticon
|
|
62
62
|
|
63
63
|
debug = "#{@uri} #{tester_type} #{condition.inspect}?"
|
64
64
|
|
65
|
-
if tester.
|
65
|
+
if tester.run(condition)
|
66
66
|
puts "#{debug} ==> PASSED!" if ARGV.include?("-v")
|
67
67
|
else
|
68
68
|
puts "#{debug} ==> FAILED!" if ARGV.include?("-v")
|
data/lib/opticon/tester.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require File.dirname(File.expand_path(__FILE__))+'/http'
|
2
|
+
require File.dirname(File.expand_path(__FILE__))+'/failure'
|
3
3
|
|
4
4
|
module Opticon
|
5
5
|
module Tester
|
@@ -10,11 +10,12 @@ module Opticon
|
|
10
10
|
include Opticon::HTTP
|
11
11
|
|
12
12
|
# Wrapper for calling the test method.
|
13
|
-
#
|
13
|
+
# Call this instead of invoking test directly.
|
14
14
|
def run(condition)
|
15
15
|
begin
|
16
16
|
test(condition)
|
17
|
-
rescue SocketError, TimeoutError, Net::HTTPError,
|
17
|
+
rescue SocketError, TimeoutError, Net::HTTPError,
|
18
|
+
Errno::ECONNREFUSED, Timeout::Error => e
|
18
19
|
@failure = Opticon::Failure::ConnectionFailure.new(uri, condition, nil)
|
19
20
|
@failure.exception = $!
|
20
21
|
false
|
@@ -24,6 +25,7 @@ module Opticon
|
|
24
25
|
|
25
26
|
# Tests that the service responds with some given HTTP status code.
|
26
27
|
class ResponseCodeTester < Base
|
28
|
+
protected
|
27
29
|
def test(condition)
|
28
30
|
case condition
|
29
31
|
when :ok
|
@@ -50,14 +52,15 @@ module Opticon
|
|
50
52
|
|
51
53
|
private
|
52
54
|
def responds_with_code(codes)
|
53
|
-
|
55
|
+
r = self.response
|
56
|
+
|
54
57
|
if codes.kind_of? Integer
|
55
|
-
result = codes ==
|
58
|
+
result = codes == r.code.to_i
|
56
59
|
else
|
57
|
-
result = codes.include?
|
60
|
+
result = codes.include? r.code.to_i
|
58
61
|
end
|
59
62
|
|
60
|
-
@failure = Opticon::Failure::ResponseCodeTestFailure.new(uri, codes,
|
63
|
+
@failure = Opticon::Failure::ResponseCodeTestFailure.new(uri, codes, r) unless result
|
61
64
|
return result
|
62
65
|
end
|
63
66
|
|
@@ -85,35 +88,38 @@ module Opticon
|
|
85
88
|
# Tests that the service responds with content that matches some given
|
86
89
|
# string or regular expression.
|
87
90
|
class ContentTester < Base
|
91
|
+
protected
|
88
92
|
def test(condition)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
+
r = self.response
|
94
|
+
|
95
|
+
unless (200..206).include?(r.code.to_i)
|
96
|
+
@failure = Opticon::Failure::ContentTestFailure.new(uri, condition, r)
|
97
|
+
if (300..307).include?(r.code.to_i)
|
98
|
+
@failure.exception = RuntimeError.new("Request was redirected to #{r['location']}.")
|
93
99
|
else
|
94
|
-
@failure.exception = RuntimeError.new("Request returned code '#{
|
100
|
+
@failure.exception = RuntimeError.new("Request returned code '#{r.message}'"+
|
95
101
|
" (#{response.code}) but response must be a 2xx HTTP status code.")
|
96
102
|
end
|
97
103
|
return false
|
98
104
|
end
|
99
105
|
|
100
|
-
unless
|
101
|
-
@failure = Opticon::Failure::ContentTestFailure.new(uri, condition,
|
102
|
-
@failure.exception = RuntimeError.new("Response did not include a body (HTTP response: #{
|
106
|
+
unless r.class.body_permitted?
|
107
|
+
@failure = Opticon::Failure::ContentTestFailure.new(uri, condition, r)
|
108
|
+
@failure.exception = RuntimeError.new("Response did not include a body (HTTP response: #{r.inspect})")
|
103
109
|
return false
|
104
110
|
end
|
105
111
|
|
106
112
|
case condition
|
107
113
|
when Regexp
|
108
|
-
result = condition =~
|
114
|
+
result = condition =~ r.body
|
109
115
|
when String
|
110
|
-
result =
|
116
|
+
result = r.body.include? condition
|
111
117
|
end
|
112
118
|
|
113
119
|
if result
|
114
120
|
@failure = nil
|
115
121
|
else
|
116
|
-
@failure = Opticon::Failure::ContentTestFailure.new(uri, condition,
|
122
|
+
@failure = Opticon::Failure::ContentTestFailure.new(uri, condition, r)
|
117
123
|
end
|
118
124
|
|
119
125
|
result
|
data/lib/opticon/version.rb
CHANGED
data/lib/opticon.rb
CHANGED
@@ -13,7 +13,16 @@ module Opticon
|
|
13
13
|
end
|
14
14
|
module_function :default_notifiers, 'default_notifiers='
|
15
15
|
|
16
|
+
@@default_timeout = 3
|
17
|
+
def default_timeout
|
18
|
+
@@default_timeout
|
19
|
+
end
|
20
|
+
def default_timeout=(timeout)
|
21
|
+
@@default_timeout = timeout
|
22
|
+
end
|
23
|
+
module_function :default_timeout, 'default_timeout='
|
24
|
+
|
16
25
|
end
|
17
26
|
|
18
|
-
require 'opticon/service'
|
19
|
-
require 'opticon/notifier'
|
27
|
+
require File.dirname(File.expand_path(__FILE__))+'/opticon/service'
|
28
|
+
require File.dirname(File.expand_path(__FILE__))+'/opticon/notifier'
|
data/test/opticon/tester_test.rb
CHANGED
@@ -27,7 +27,7 @@ class Opticon::HTTPTest < Test::Unit::TestCase
|
|
27
27
|
|
28
28
|
def test_response_code_tester_cant_connect
|
29
29
|
tester = Opticon::Tester::ResponseCodeTester.new
|
30
|
-
tester.uri = "http://there.is.no.such.server.foobarblah/test"
|
30
|
+
tester.uri = "http://there.is.no.such.server.foobarblah:1234/test"
|
31
31
|
|
32
32
|
assert !tester.run(:success)
|
33
33
|
assert_kind_of Opticon::Failure::ConnectionFailure, tester.failure
|
metadata
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: opticon
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-11-15 00:00:00 -05:00
|
8
|
-
summary: Peace of mind through automated monitoring of your HTTP services.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: matt [at] roughest.net
|
12
|
-
homepage: http://opticon.rubyforge.org
|
13
|
-
rubyforge_project: opticon
|
14
|
-
description: Peace of mind through automated monitoring of your HTTP services.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.0.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Matt Zukowski
|
31
|
-
|
32
|
-
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-02 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: actionmailer
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
description: Peace of mind through automated monitoring of your HTTP services.
|
25
|
+
email: matt [at] roughest.net
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- CHANGELOG.txt
|
32
|
+
- History.txt
|
33
|
+
- Manifest.txt
|
33
34
|
- README.txt
|
35
|
+
files:
|
36
|
+
- .loadpath
|
37
|
+
- .project
|
34
38
|
- CHANGELOG.txt
|
39
|
+
- History.txt
|
35
40
|
- Manifest.txt
|
41
|
+
- README.txt
|
42
|
+
- Rakefile
|
36
43
|
- examples/sample.rb
|
37
44
|
- lib/opticon.rb
|
38
45
|
- lib/opticon/failure.rb
|
@@ -52,30 +59,37 @@ files:
|
|
52
59
|
- test/opticon/tester_test.rb
|
53
60
|
- test/opticon_test.rb
|
54
61
|
- test/test_helper.rb
|
62
|
+
has_rdoc: true
|
63
|
+
homepage: http://opticon.rubyforge.org
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options:
|
66
|
+
- --main
|
67
|
+
- README.txt
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
version:
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: "0"
|
81
|
+
version:
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project: opticon
|
85
|
+
rubygems_version: 1.0.1
|
86
|
+
signing_key:
|
87
|
+
specification_version: 2
|
88
|
+
summary: Peace of mind through automated monitoring of your HTTP services.
|
55
89
|
test_files:
|
56
90
|
- test/opticon_test.rb
|
57
|
-
- test/opticon/service_test.rb
|
58
|
-
- test/opticon/tester_test.rb
|
59
91
|
- test/opticon/mailer_test.rb
|
60
|
-
- test/opticon/email_notifier_test.rb
|
61
92
|
- test/opticon/http_test.rb
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
executables: []
|
67
|
-
|
68
|
-
extensions: []
|
69
|
-
|
70
|
-
requirements: []
|
71
|
-
|
72
|
-
dependencies:
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: actionmailer
|
75
|
-
version_requirement:
|
76
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
77
|
-
requirements:
|
78
|
-
- - ">"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 0.0.0
|
81
|
-
version:
|
93
|
+
- test/opticon/tester_test.rb
|
94
|
+
- test/opticon/email_notifier_test.rb
|
95
|
+
- test/opticon/service_test.rb
|