okcomputer 0.1.3 → 0.2.0
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 +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:
|