health-monitor-rails 12.2.0 → 12.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
  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