okcomputer 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +16 -7
- data/app/controllers/ok_computer_controller.rb +2 -0
- data/lib/okcomputer/built_in_checks/active_record_check.rb +3 -3
- data/lib/okcomputer/built_in_checks/default_check.rb +2 -2
- data/lib/okcomputer/built_in_checks/mongoid_check.rb +3 -3
- data/lib/okcomputer/built_in_checks/resque_backed_up_check.rb +3 -3
- data/lib/okcomputer/built_in_checks/resque_down_check.rb +3 -3
- data/lib/okcomputer/check.rb +37 -7
- data/lib/okcomputer/check_collection.rb +5 -0
- data/lib/okcomputer/version.rb +1 -1
- metadata +4 -4
data/README.markdown
CHANGED
@@ -45,25 +45,26 @@ Register additional checks in an initializer, like do:
|
|
45
45
|
|
46
46
|
```ruby
|
47
47
|
# config/initializers/okcomputer.rb
|
48
|
-
OKComputer::Registry.register "resque_down", OKComputer::ResqueDownCheck.new
|
49
|
-
OKComputer::Registry.register "resque_backed_up", OKComputer::ResqueBackedUpCheck.new
|
48
|
+
OKComputer::Registry.register "resque_down", OKComputer::ResqueDownCheck.new
|
49
|
+
OKComputer::Registry.register "resque_backed_up", OKComputer::ResqueBackedUpCheck.new("critical", 100)
|
50
50
|
```
|
51
51
|
|
52
52
|
### Registering Custom Checks
|
53
53
|
|
54
54
|
The simplest way to register a check unique to your application is to subclass
|
55
|
-
OKComputer::Check and implement your own `#
|
56
|
-
|
55
|
+
OKComputer::Check and implement your own `#check` method, which sets the
|
56
|
+
display message with `mark_message`, and calls `mark_failure` if anything is
|
57
|
+
wrong.
|
57
58
|
|
58
59
|
```ruby
|
59
60
|
# config/initializers/okcomputer.rb
|
60
61
|
class MyCustomCheck < OKComputer::Check
|
61
|
-
def
|
62
|
+
def check
|
62
63
|
if rand(10).even?
|
63
|
-
"Even is great!"
|
64
|
+
mark_message "Even is great!"
|
64
65
|
else
|
65
66
|
mark_failure
|
66
|
-
"We don't like odd numbers"
|
67
|
+
mark_message "We don't like odd numbers"
|
67
68
|
end
|
68
69
|
end
|
69
70
|
end
|
@@ -71,6 +72,14 @@ end
|
|
71
72
|
OKComputer::Registry.register "check_for_odds", MyCustomCheck.new
|
72
73
|
```
|
73
74
|
|
75
|
+
#### Deprecation of Check#call
|
76
|
+
|
77
|
+
Versions before 0.2.0 implemented a "#call" method which returned the message.
|
78
|
+
This has been deprecated and will be removed in a future version. Please
|
79
|
+
define a #check method which calls `mark_failure` and `mark_message` as
|
80
|
+
appropriate. In the meantime, OKComputer displays a warning and uses the result
|
81
|
+
of the #call method as the message.
|
82
|
+
|
74
83
|
## Performing Checks
|
75
84
|
|
76
85
|
* Perform a simple up check: http://example.com/okcomputer
|
@@ -4,12 +4,14 @@ class OkComputerController < ActionController::Base
|
|
4
4
|
|
5
5
|
def index
|
6
6
|
checks = OKComputer::Registry.all
|
7
|
+
checks.run
|
7
8
|
|
8
9
|
respond_with checks, status: status_code(checks)
|
9
10
|
end
|
10
11
|
|
11
12
|
def show
|
12
13
|
check = OKComputer::Registry.fetch(params[:check])
|
14
|
+
check.run
|
13
15
|
|
14
16
|
respond_with check, status: status_code(check)
|
15
17
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module OKComputer
|
2
2
|
class ActiveRecordCheck < Check
|
3
3
|
# Public: Return the schema version of the database
|
4
|
-
def
|
5
|
-
"Schema version: #{schema_version}"
|
4
|
+
def check
|
5
|
+
mark_message "Schema version: #{schema_version}"
|
6
6
|
rescue ConnectionFailed => e
|
7
7
|
mark_failure
|
8
|
-
"Failed to connect: '#{e}'"
|
8
|
+
mark_message "Failed to connect: '#{e}'"
|
9
9
|
end
|
10
10
|
|
11
11
|
# Public: The scema version of the app's database
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module OKComputer
|
2
2
|
class MongoidCheck < Check
|
3
3
|
# Public: Return the status of the mongodb
|
4
|
-
def
|
5
|
-
"Successfully connected to mongodb #{mongodb_name}"
|
4
|
+
def check
|
5
|
+
mark_message "Successfully connected to mongodb #{mongodb_name}"
|
6
6
|
rescue ConnectionFailed => e
|
7
7
|
mark_failure
|
8
|
-
"Failed to connect: '#{e}'"
|
8
|
+
mark_message "Failed to connect: '#{e}'"
|
9
9
|
end
|
10
10
|
|
11
11
|
# Public: The stats for the app's mongodb
|
@@ -14,12 +14,12 @@ module OKComputer
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# Public: Check whether the given queue is backed up
|
17
|
-
def
|
17
|
+
def check
|
18
18
|
if count <= threshold
|
19
|
-
"Resque queue '#{queue}' at reasonable level (#{count})"
|
19
|
+
mark_message "Resque queue '#{queue}' at reasonable level (#{count})"
|
20
20
|
else
|
21
21
|
mark_failure
|
22
|
-
"Resque queue '#{queue}' backed up! (#{count})"
|
22
|
+
mark_message "Resque queue '#{queue}' backed up! (#{count})"
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module OKComputer
|
2
2
|
class ResqueDownCheck < Check
|
3
3
|
# Public: Check whether Resque workers are working
|
4
|
-
def
|
4
|
+
def check
|
5
5
|
if queued? and not working?
|
6
6
|
mark_failure
|
7
|
-
"Resque is DOWN. No workers are working the queue."
|
7
|
+
mark_message "Resque is DOWN. No workers are working the queue."
|
8
8
|
else
|
9
|
-
"Resque is working"
|
9
|
+
mark_message "Resque is working"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
data/lib/okcomputer/check.rb
CHANGED
@@ -1,23 +1,40 @@
|
|
1
1
|
module OKComputer
|
2
2
|
class Check
|
3
|
+
CALL_DEPRECATION_MESSAGE = "Deprecation warning: Please define #check rather than defining #call"
|
4
|
+
|
3
5
|
# to be set by Registry upon registration
|
4
6
|
attr_accessor :name
|
5
7
|
# nil by default, only set to true if the check deems itself failed
|
6
8
|
attr_accessor :failure_occurred
|
9
|
+
# nil by default, set by #check to control the output
|
10
|
+
attr_accessor :message
|
11
|
+
|
12
|
+
# Public: Run the check
|
13
|
+
def run
|
14
|
+
clear
|
15
|
+
check
|
16
|
+
end
|
7
17
|
|
8
|
-
#
|
18
|
+
# Private: Perform the appropriate check
|
9
19
|
#
|
10
|
-
# Your subclass of Check must define its own #
|
20
|
+
# Your subclass of Check must define its own #check method. This method
|
11
21
|
# must return the string to render when performing the check.
|
12
|
-
def
|
13
|
-
|
22
|
+
def check
|
23
|
+
if respond_to? :call
|
24
|
+
warn CALL_DEPRECATION_MESSAGE
|
25
|
+
# The old #call methods returned the message, so use that to set the message output
|
26
|
+
mark_message call
|
27
|
+
else
|
28
|
+
raise(CheckNotDefined, "Your subclass must define its own #check.")
|
29
|
+
end
|
14
30
|
end
|
31
|
+
private :check
|
15
32
|
|
16
33
|
# Public: The text output of performing the check
|
17
34
|
#
|
18
35
|
# Returns a String
|
19
36
|
def to_text
|
20
|
-
"#{name}: #{
|
37
|
+
"#{name}: #{message}"
|
21
38
|
end
|
22
39
|
|
23
40
|
# Public: The JSON output of performing the check
|
@@ -26,7 +43,7 @@ module OKComputer
|
|
26
43
|
def to_json(*args)
|
27
44
|
# NOTE swallowing the arguments that Rails passes by default since we don't care. This may prove to be a bad idea
|
28
45
|
# Rails passes stuff like this: {:prefixes=>["ok_computer", "application"], :template=>"show", :layout=>#<Proc>}]
|
29
|
-
{name =>
|
46
|
+
{name => message}.to_json
|
30
47
|
end
|
31
48
|
|
32
49
|
# Public: Whether the check passed
|
@@ -41,6 +58,19 @@ module OKComputer
|
|
41
58
|
self.failure_occurred = true
|
42
59
|
end
|
43
60
|
|
44
|
-
|
61
|
+
# Public: Capture the desired message to display
|
62
|
+
#
|
63
|
+
# message - Text of the message to display for this check
|
64
|
+
def mark_message(message)
|
65
|
+
self.message = message
|
66
|
+
end
|
67
|
+
|
68
|
+
# Public: Clear any prior failures
|
69
|
+
def clear
|
70
|
+
self.failure_occurred = false
|
71
|
+
self.message = nil
|
72
|
+
end
|
73
|
+
|
74
|
+
CheckNotDefined = Class.new(StandardError)
|
45
75
|
end
|
46
76
|
end
|
data/lib/okcomputer/version.rb
CHANGED
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: okcomputer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Patrick Byrne
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
segments:
|
101
101
|
- 0
|
102
|
-
hash: -
|
102
|
+
hash: -1241122917546608114
|
103
103
|
none: false
|
104
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '0'
|
109
109
|
segments:
|
110
110
|
- 0
|
111
|
-
hash: -
|
111
|
+
hash: -1241122917546608114
|
112
112
|
none: false
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|