health-monitor-rails 3.0.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f5ca7cbb4392ffa1363a87b40c2816d4de722ae0
4
- data.tar.gz: 59b5e9e6d382fa61e2e11f065e09c993da777fd0
3
+ metadata.gz: 43cd56ba93149b6cd9603a232f6d42e733244997
4
+ data.tar.gz: 53f5306701a6e8a9318aa27c65c1553f2ba39f97
5
5
  SHA512:
6
- metadata.gz: 07f4c55dde7f10f8019df3c3177d34e44104ccf259334060f7747d843c09e82c62779998f46b600a442f859b68135c60fdaa9e93157c1b103e9d62d7bdce24a2
7
- data.tar.gz: 703925424ed0d6aa9450140616f92052fbf1cc11d1002a01e26e48d886f36e73dcab4c2ef46fa294df224ecc67b9cb90de61bedd82cb90d4c59d12afcb4a80b0
6
+ metadata.gz: f2906eff933ec100b18abf659ac3e9143328f9f13d1460ef903b3ebac53c4964a32ea3a69d847c54fdea84d1b3d63622df504ce2d6973722aae1d7dc16116e42
7
+ data.tar.gz: 76f14766d0c328686449107a7e3532af95e1c058ba363b81f484e17fd8c16fd2f341560b00ecaa9acc70b850805ec272bc1488b02a7733f0118d3c61efa52d7d
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  This is a health monitoring Rails mountable plug-in, which checks various services (db, cache, sidekiq, redis, etc.).
9
9
 
10
- Mounting this gem will add a '/check' route to your application, which can be used for health monitoring the application and its various services.
10
+ Mounting this gem will add a '/check' route to your application, which can be used for health monitoring the application and its various services. The method will return an appropriate HTTP status as well as a JSON array representing the state of each provider.
11
11
 
12
12
  ## Setup
13
13
 
@@ -8,13 +8,11 @@ module HealthMonitor
8
8
 
9
9
  # GET /health/check
10
10
  def check
11
- HealthMonitor.check!(request: request)
11
+ res = HealthMonitor.check(request: request)
12
12
 
13
- self.status = :ok
14
- self.response_body = "Health check has passed: r#{Time.now.to_s(:db)}\n"
15
- rescue => e
16
- self.status = :service_unavailable
17
- self.response_body = "Health check has failed: #{Time.now.to_s(:db)}, error: #{e.message}\n"
13
+ self.content_type = Mime::JSON
14
+ self.status = res[:status]
15
+ self.response_body = ActiveSupport::JSON.encode(res[:results])
18
16
  end
19
17
 
20
18
  private
@@ -1,6 +1,11 @@
1
1
  require 'health_monitor/configuration'
2
2
 
3
3
  module HealthMonitor
4
+ STATUSES = {
5
+ ok: 'OK',
6
+ error: 'ERROR'
7
+ }.freeze
8
+
4
9
  extend self
5
10
 
6
11
  attr_accessor :configuration
@@ -11,15 +16,38 @@ module HealthMonitor
11
16
  yield configuration if block_given?
12
17
  end
13
18
 
14
- def check!(request: nil)
15
- configuration.providers.each do |provider|
16
- monitor = provider.new(request: request)
17
- monitor.check!
18
- end
19
+ def check(request: nil)
20
+ results = configuration.providers.map { |provider| provider_result(provider, request) }
21
+
22
+ {
23
+ results: results,
24
+ status: results.all? { |res| res.values.first[:status] == STATUSES[:ok] } ? :ok : :service_unavailable
25
+ }
26
+ end
27
+
28
+ private
29
+
30
+ def provider_result(provider, request)
31
+ monitor = provider.new(request: request)
32
+ monitor.check!
33
+
34
+ {
35
+ provider.provider_name => {
36
+ message: '',
37
+ status: STATUSES[:ok],
38
+ timestamp: Time.now.to_s(:db)
39
+ }
40
+ }
19
41
  rescue => e
20
42
  configuration.error_callback.call(e) if configuration.error_callback
21
43
 
22
- raise
44
+ {
45
+ provider.provider_name => {
46
+ message: e.message,
47
+ status: STATUSES[:error],
48
+ timestamp: Time.now.to_s(:db)
49
+ }
50
+ }
23
51
  end
24
52
  end
25
53
 
@@ -4,6 +4,10 @@ module HealthMonitor
4
4
  attr_reader :request
5
5
  cattr_accessor :configuration
6
6
 
7
+ def self.provider_name
8
+ @name ||= name.demodulize.downcase
9
+ end
10
+
7
11
  def self.configure
8
12
  return unless configurable?
9
13
 
@@ -11,7 +11,7 @@ module HealthMonitor
11
11
  Rails.cache.write(key, time)
12
12
  fetched = Rails.cache.read(key)
13
13
 
14
- raise "different values (now: #{time}, fetched: #{fetched}" if fetched != time
14
+ raise "different values (now: #{time}, fetched: #{fetched})" if fetched != time
15
15
  rescue Exception => e
16
16
  raise CacheException.new(e.message)
17
17
  end
@@ -13,7 +13,7 @@ module HealthMonitor
13
13
  redis.set(key, time)
14
14
  fetched = redis.get(key)
15
15
 
16
- raise "different values (now: #{time}, fetched: #{fetched}" if fetched != time
16
+ raise "different values (now: #{time}, fetched: #{fetched})" if fetched != time
17
17
  rescue Exception => e
18
18
  raise RedisException.new(e.message)
19
19
  ensure
@@ -1,3 +1,3 @@
1
1
  module HealthMonitor
2
- VERSION = '3.0.2'.freeze
2
+ VERSION = '4.0.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: health-monitor-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonid Beder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-31 00:00:00.000000000 Z
11
+ date: 2015-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: timecop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rediska
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
235
  version: '0'
222
236
  requirements: []
223
237
  rubyforge_project:
224
- rubygems_version: 2.4.6
238
+ rubygems_version: 2.4.8
225
239
  signing_key:
226
240
  specification_version: 4
227
241
  summary: Health monitoring Rails plug-in, which checks various services (db, cache,