health-monitor-rails 12.2.0 → 12.4.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
  SHA256:
3
- metadata.gz: 5b598be966486e38fe823322c1f067e033543ad2df2eb3175c4f48464fd486c0
4
- data.tar.gz: c75ceeeffb9d18b5427d2791359a74616b91e830fce1cafd7f737e78b7b87c23
3
+ metadata.gz: 16d418a94d55bfea53470ed8a0b1d4b8614c32b2f3a0f439dd37859c99cb62b1
4
+ data.tar.gz: 5f53e4f8bcc43d2a2ae27fa02a14f44c277b2a37388b500b7c9450ca6834197d
5
5
  SHA512:
6
- metadata.gz: 54c82d499f5230ffb29d25d1f2ae07a82df5b2c31babfae8759c213488c88024beaa286f64adeaa63a932064e8f5d7496dc263136422b694ee130481c2a1fde4
7
- data.tar.gz: 446c5607d7eb1f96803318cfca0c460147e45fce68ba0b243f52c91913211f3c1df98a5d0a8a087269ccecd45bf67f882955d46b658e954e9cd240bc0e16f284
6
+ metadata.gz: e09ede9673ea8c30618eeffb12b169920705b4f54376e091141008303c060a6071ec627eec576724901f046d3c697e30c0519235a22175ec100ce58286188c97
7
+ data.tar.gz: b0383068465c7ebb1e4beedd46c9f26801fcd2fdae8f0b591be3a4967bb72bb94f13a6a62a3c35290c3385f187ec917cafd3ea5add28386afa2c44bda9a6d6de
data/README.md CHANGED
@@ -177,6 +177,7 @@ The following services are currently supported:
177
177
  * Resque
178
178
  * Delayed Job
179
179
  * Solr
180
+ * FileAbsence
180
181
 
181
182
  ## Configuration
182
183
 
@@ -316,6 +317,13 @@ Please note that `url` or `connection` can't be used at the same time.
316
317
  ### Solr
317
318
 
318
319
  * `url`: the URL used to connect to your Solr instance - must be a string. You can also use `url` to explicitly configure authentication (e.g., `'https://user:pass@example.solr.com:8983/'`)
320
+ * `collection`: An optional parameter used to connect to your specific Solr collection - must be a string. By setting this parameter the code will check the status of this individual collection in your Solr instance instead of just the status of the overall Solr instance
321
+
322
+ ### FileAbsence
323
+
324
+ This check allows you to create a file on your server when you would like to force the check to fail. For example if you are utilizing the `health.json` as you health check page for your load balancer and would like to force a machine offline.
325
+
326
+ * `filename`: the file relative to the rails root that must remain absent for the health check to remain passing. For example: `public/remove-from-nginx`
319
327
 
320
328
  ### Adding a Custom Provider
321
329
 
@@ -440,9 +448,11 @@ nicolas@desktop:$ echo $?
440
448
  ```
441
449
 
442
450
  ## Development
451
+
443
452
  In order to work on development on the gem itself
444
453
 
445
454
  ### Installing the gems
455
+
446
456
  Use the [appraisal gem](https://github.com/thoughtbot/appraisal) to install the bundles for different rails versions:
447
457
 
448
458
  ```bash
@@ -452,7 +462,9 @@ appraisal install
452
462
  ```
453
463
 
454
464
  ### Running the tests
465
+
455
466
  Use appraisal to run the tests using rake
467
+
456
468
  ```bash
457
469
  appraisal rake
458
470
  ```
@@ -2,7 +2,7 @@
2
2
 
3
3
  module HealthMonitor
4
4
  class Configuration
5
- PROVIDERS = %i[cache database delayed_job redis resque sidekiq solr].freeze
5
+ PROVIDERS = %i[cache database delayed_job file_absence redis resque sidekiq solr].freeze
6
6
 
7
7
  attr_accessor :basic_auth_credentials,
8
8
  :environment_variables,
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'health_monitor/providers/base'
4
+
5
+ module HealthMonitor
6
+ module Providers
7
+ class FileAbsenceException < StandardError; end
8
+
9
+ class FileAbsence < Base
10
+ class Configuration < Base::Configuration
11
+ DEFAULT_FILENAME = nil
12
+ attr_accessor :filename
13
+
14
+ def initialize(provider)
15
+ super(provider)
16
+
17
+ @filename = DEFAULT_FILENAME
18
+ end
19
+ end
20
+
21
+ def check!
22
+ return unless File.exist?(configuration.filename)
23
+
24
+ raise FileAbsenceException.new("Unwanted file #{configuration.filename} exists!")
25
+ end
26
+
27
+ private
28
+
29
+ def configuration_class
30
+ ::HealthMonitor::Providers::FileAbsence::Configuration
31
+ end
32
+ end
33
+ end
34
+ end
@@ -9,12 +9,14 @@ module HealthMonitor
9
9
  class Solr < Base
10
10
  class Configuration < Base::Configuration
11
11
  DEFAULT_URL = nil
12
- attr_accessor :url
12
+ DEFAULT_COLLECTION = nil
13
+ attr_accessor :url, :collection
13
14
 
14
15
  def initialize(provider)
15
16
  super(provider)
16
17
 
17
18
  @url = DEFAULT_URL
19
+ @collection = DEFAULT_COLLECTION
18
20
  end
19
21
  end
20
22
 
@@ -31,6 +33,22 @@ module HealthMonitor
31
33
  end
32
34
 
33
35
  def check_solr_connection!
36
+ if configuration.collection
37
+ check_solr_collection!
38
+ else
39
+ check_solr_uri!
40
+ end
41
+ end
42
+
43
+ def check_solr_collection!
44
+ response = solr_response(uri: collection_uri)
45
+ json = JSON.parse(response.body) if response.code == '200'
46
+ return if response.is_a?(Net::HTTPSuccess) && json['status'].casecmp?('OK')
47
+
48
+ raise "The Solr collection has an invalid status #{collection_uri}"
49
+ end
50
+
51
+ def check_solr_uri!
34
52
  json = JSON.parse(solr_response.body)
35
53
  raise "The solr has an invalid status #{status_uri}" if json['responseHeader']['status'] != 0
36
54
  end
@@ -44,16 +62,24 @@ module HealthMonitor
44
62
  end
45
63
  end
46
64
 
47
- def solr_request
65
+ def collection_uri
66
+ @collection_uri ||= begin
67
+ uri = URI(configuration.url)
68
+ uri.path = "/solr/#{configuration.collection}/admin/ping"
69
+ uri
70
+ end
71
+ end
72
+
73
+ def solr_request(uri: status_uri)
48
74
  @solr_request ||= begin
49
- req = Net::HTTP::Get.new(status_uri)
50
- req.basic_auth(status_uri.user, status_uri.password) if status_uri.user && status_uri.password
75
+ req = Net::HTTP::Get.new(uri)
76
+ req.basic_auth(uri.user, uri.password) if uri.user && uri.password
51
77
  req
52
78
  end
53
79
  end
54
80
 
55
- def solr_response
56
- Net::HTTP.start(status_uri.hostname, status_uri.port) { |http| http.request(solr_request) }
81
+ def solr_response(uri: status_uri)
82
+ Net::HTTP.start(status_uri.hostname, status_uri.port) { |http| http.request(solr_request(uri: uri)) }
57
83
  end
58
84
  end
59
85
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HealthMonitor
4
- VERSION = '12.2.0'
4
+ VERSION = '12.4.0'
5
5
  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: 12.2.0
4
+ version: 12.4.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: 2024-07-26 00:00:00.000000000 Z
11
+ date: 2024-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -45,6 +45,7 @@ files:
45
45
  - lib/health_monitor/providers/cache.rb
46
46
  - lib/health_monitor/providers/database.rb
47
47
  - lib/health_monitor/providers/delayed_job.rb
48
+ - lib/health_monitor/providers/file_absence.rb
48
49
  - lib/health_monitor/providers/redis.rb
49
50
  - lib/health_monitor/providers/resque.rb
50
51
  - lib/health_monitor/providers/sidekiq.rb