okcomputer 1.3.0 → 1.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 348a7006a93a67bfd12d4e4c67c955b29d810a0f
4
- data.tar.gz: 72f3d48f7f3890f501e347b35c5d291bf8d18b19
3
+ metadata.gz: 8f2e2e1fbf0bd12e43eeed9987395392fefc5820
4
+ data.tar.gz: 071f6f634691d45b44c5f134c2d3b87534834199
5
5
  SHA512:
6
- metadata.gz: b42f71808c913eb59b258654f17056c3927b17e0e13c0de1fabac2fe95fe21ab7ba1737af3f45655edc6296faef43d0625e6da4cba7b9afb33e5a994a317cdaf
7
- data.tar.gz: 461fd07b2a27b6b36370ee96f8dd281a96a3e874d85a602c71c27eabafb51bceff41064ad348fc1f64f296cfc41600e20ad75d31f022b91ea79eb12f27dc7b47
6
+ metadata.gz: 36ef20a1ceae3441cb1ed24f5b78d1596b51724aad107a62f5b5850901b0138a1fa3e686307469749247e91ac129a0c8c574f3d152c6f5633d9aea34a66be658
7
+ data.tar.gz: 8f6dd78954876861034bd82052159cd7b759bfa4a7b7e25845a4d90ea86908e57c78e579bb9928510f44b3dc2b1b25e7af206045cba2050dd8351ac15f794271
@@ -6,17 +6,17 @@ module OkComputer
6
6
  # or red). A cluster status of red is reported as a failure, since this means
7
7
  # one or more primary shards are unavailable. Note that the app may still
8
8
  # be able to perform some queries on the available indices/shards.
9
- class ElasticsearchCheck < Check
10
- attr_accessor :host
11
- attr_accessor :request_timeout
9
+ class ElasticsearchCheck < HttpCheck
10
+ attr_reader :host
12
11
 
13
12
  # Public: Initialize a new elasticsearch check.
14
13
  #
15
14
  # host - The hostname of elasticsearch
16
15
  # request_timeout - How long to wait to connect before timing out. Defaults to 5 seconds.
17
16
  def initialize(host, request_timeout = 5)
18
- self.host = host
19
- self.request_timeout = request_timeout.to_i
17
+ @host = URI(host)
18
+ health_url = URI("#{host}/_cluster/health")
19
+ super(health_url, request_timeout)
20
20
  end
21
21
 
22
22
  # Public: Return the status of the elasticsearch cluster
@@ -28,23 +28,15 @@ module OkComputer
28
28
  end
29
29
 
30
30
  mark_message "Connected to elasticseach cluster '#{cluster_health[:cluster_name]}', #{cluster_health[:number_of_nodes]} nodes, status '#{cluster_health[:status]}'"
31
- rescue ConnectionFailed => e
31
+ rescue => e
32
32
  mark_failure
33
33
  mark_message "Error: '#{e}'"
34
34
  end
35
35
 
36
36
  # Returns a hash from elasticsearch's cluster health API
37
37
  def cluster_health
38
- response = timeout(request_timeout) { health_url.read(read_timeout: request_timeout) }
38
+ response = perform_request
39
39
  JSON.parse(response, symbolize_names: true)
40
- rescue => e
41
- raise ConnectionFailed, e
42
40
  end
43
-
44
- def health_url
45
- @health_url ||= URI.join(host, '_cluster/health')
46
- end
47
-
48
- ConnectionFailed = Class.new(StandardError)
49
41
  end
50
42
  end
@@ -0,0 +1,45 @@
1
+ require "open-uri"
2
+
3
+ module OkComputer
4
+ # Performs a health check by reading a URL over HTTP.
5
+ # A successful response is considered passing.
6
+ # To implement your own pass/fail criteria, inherit from this
7
+ # class, override #check, and call #perform_request to get the
8
+ # response body.
9
+ class HttpCheck < Check
10
+ ConnectionFailed = Class.new(StandardError)
11
+
12
+ attr_accessor :url
13
+ attr_accessor :request_timeout
14
+
15
+ # Public: Initialize a new HTTP check.
16
+ #
17
+ # url - The URL to check
18
+ # request_timeout - How long to wait to connect before timing out. Defaults to 5 seconds.
19
+ def initialize(url, request_timeout = 5)
20
+ self.url = URI(url)
21
+ self.request_timeout = request_timeout.to_i
22
+ end
23
+
24
+ # Public: Return the status of the HTTP check
25
+ def check
26
+ if perform_request
27
+ mark_message "HTTP check successful"
28
+ end
29
+ rescue => e
30
+ mark_message "Error: '#{e}'"
31
+ mark_failure
32
+ end
33
+
34
+ # Public: Actually performs the request against the URL.
35
+ # Returns response body if the request was successful.
36
+ # Otherwise raises a HttpCheck::ConnectionFailed error.
37
+ def perform_request
38
+ timeout(request_timeout) do
39
+ url.read(read_timeout: request_timeout)
40
+ end
41
+ rescue => e
42
+ raise ConnectionFailed, e
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ module OkComputer
2
+ # This class performs a health check on Solr instance using the
3
+ # admin/ping handler.
4
+ class SolrCheck < HttpCheck
5
+ attr_reader :host
6
+
7
+ # Public: Initialize a new Solr check.
8
+ #
9
+ # host - The hostname of Solr
10
+ # request_timeout - How long to wait to connect before timing out. Defaults to 5 seconds.
11
+ def initialize(host, request_timeout = 5)
12
+ @host = URI(host)
13
+ ping_url ||= URI("#{host}/admin/ping")
14
+ super(ping_url, request_timeout)
15
+ end
16
+
17
+ # Public: Return the status of Solr
18
+ def check
19
+ if ping?
20
+ mark_message "Solr ping reported success"
21
+ else
22
+ mark_failure
23
+ mark_message "Solr ping reported failure"
24
+ end
25
+ rescue => e
26
+ mark_failure
27
+ mark_message "Error: '#{e}'"
28
+ end
29
+
30
+ # Public: Returns true if Solr's ping returned OK, otherwise false
31
+ def ping?
32
+ response = perform_request
33
+ !!(response =~ %r(<str name="status">OK</str>))
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module OkComputer
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
data/lib/okcomputer.rb CHANGED
@@ -6,6 +6,8 @@ require "ok_computer/registry"
6
6
 
7
7
  # and the built-in checks
8
8
  require "ok_computer/built_in_checks/size_threshold_check"
9
+ require "ok_computer/built_in_checks/http_check"
10
+
9
11
  require "ok_computer/built_in_checks/active_record_check"
10
12
  require "ok_computer/built_in_checks/app_version_check"
11
13
  require "ok_computer/built_in_checks/cache_check"
@@ -13,6 +15,7 @@ require "ok_computer/built_in_checks/default_check"
13
15
  require "ok_computer/built_in_checks/delayed_job_backed_up_check"
14
16
  require "ok_computer/built_in_checks/generic_cache_check"
15
17
  require "ok_computer/built_in_checks/elasticsearch_check"
18
+ require "ok_computer/built_in_checks/solr_check"
16
19
  require "ok_computer/built_in_checks/mongoid_check"
17
20
  require "ok_computer/built_in_checks/mongoid_replica_set_check"
18
21
  require "ok_computer/built_in_checks/resque_backed_up_check"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: okcomputer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Byrne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -74,6 +74,7 @@ files:
74
74
  - lib/ok_computer/built_in_checks/delayed_job_backed_up_check.rb
75
75
  - lib/ok_computer/built_in_checks/elasticsearch_check.rb
76
76
  - lib/ok_computer/built_in_checks/generic_cache_check.rb
77
+ - lib/ok_computer/built_in_checks/http_check.rb
77
78
  - lib/ok_computer/built_in_checks/mongoid_check.rb
78
79
  - lib/ok_computer/built_in_checks/mongoid_replica_set_check.rb
79
80
  - lib/ok_computer/built_in_checks/resque_backed_up_check.rb
@@ -82,6 +83,7 @@ files:
82
83
  - lib/ok_computer/built_in_checks/ruby_version_check.rb
83
84
  - lib/ok_computer/built_in_checks/sidekiq_latency_check.rb
84
85
  - lib/ok_computer/built_in_checks/size_threshold_check.rb
86
+ - lib/ok_computer/built_in_checks/solr_check.rb
85
87
  - lib/ok_computer/check.rb
86
88
  - lib/ok_computer/check_collection.rb
87
89
  - lib/ok_computer/configuration.rb