rack-ecg 0.2.0 → 0.3.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: 83d08e1fb5c31c7f5883cbf1b698b207ce837980d511f35f7d7c32300067d5c4
4
- data.tar.gz: 88688776e3d95f7b040b0701d9955830bfa833c6ec44e8bcf6a1ce647a30d7a7
3
+ metadata.gz: d9102753e910fc1dc1008ff19d2a1d3bd23db4fdb6f0ac24f322d0750294b429
4
+ data.tar.gz: 189b4f010c85128da3d317b813ab829023b2db2793e1df4ce01bfbd9d6b67bfb
5
5
  SHA512:
6
- metadata.gz: d5c0db20e6bf5cfab2e64252ecce8d6f38a240d6356813929a134c8b1dc7fec25cb663b756230b9b81087fef1cef05c196be31258b699181b210a0c75877651b
7
- data.tar.gz: e77ddb23c3b406fb3e51621364a38be99e3ef5fdb3a0fb91fb850fa21add92415a0e1e47539619fa5c148701eb076782d3de555ef63de15ec7286e48388e983e
6
+ metadata.gz: 6c7698889a12a7c2263b4f70c366423691d5d4a3cd7f9d74bbb94a3e974087143f2c9906bc9cdf0e234d3dc2ece5ea840458b0f60d2f94cb250288b1a86f6073
7
+ data.tar.gz: 96fc9feb30b537fccf7cd377716078c9bfd6a9c33f33f1ac9d9cf1375863e6b751f48ea2670ee7c1d4b03b9ddf4be9f4d1e63be258fe7936b70824bf59b16c0b
@@ -5,3 +5,5 @@ updates:
5
5
  schedule:
6
6
  interval: daily
7
7
  time: "19:00"
8
+ ignore:
9
+ - dependency-name: "rubocop-*"
@@ -6,17 +6,16 @@ jobs:
6
6
  test:
7
7
  strategy:
8
8
  matrix:
9
- ruby: ["2.6", "2.7", "3.0", "3.1"]
9
+ ruby: ["2.7", "3.0", "3.1", "3.2"]
10
10
  runs-on: ubuntu-latest
11
11
  name: Test (Ruby ${{ matrix.ruby }})
12
12
  steps:
13
- - uses: actions/checkout@v2
13
+ - uses: actions/checkout@v3
14
14
  - name: Set up Ruby
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
17
17
  ruby-version: ${{ matrix.ruby }}
18
18
  - name: Run the default task
19
19
  run: |
20
- gem install bundler -v 2.3.7
21
20
  bundle install
22
21
  bundle exec rake
data/.rubocop.yml CHANGED
@@ -13,6 +13,8 @@ inherit_gem:
13
13
  rubocop-shopify: rubocop.yml
14
14
 
15
15
  AllCops:
16
+ SuggestExtensions: false
17
+ NewCops: disable
16
18
  Exclude:
17
19
  - 'vendor/**/*'
18
20
 
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.9
1
+ 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,10 +1,21 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
6
 
6
7
  ## [Unreleased]
7
8
 
9
+ ## [0.3.0] - 2023-09-08
10
+
11
+ ### Added
12
+
13
+ - (#53) Add a configuration option for the unhealthy status code - thanks @floere!
14
+
15
+ ### Removed
16
+
17
+ - **Breaking:** Dropped support for Ruby versions < 2.7.0
18
+
8
19
  ## [0.2.0] - 2022-02-21
9
20
 
10
21
  ### Added
@@ -74,7 +85,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
74
85
  - `git_revision` check to return the current git revision
75
86
  - `migration_version` check to return the current ActiveRecord migration version
76
87
 
77
- [Unreleased]: https://github.com/envato/rack-ecg/compare/v0.2.0...HEAD
88
+ [Unreleased]: https://github.com/envato/rack-ecg/compare/v0.3.0...HEAD
89
+ [0.3.0]: https://github.com/envato/rack-ecg/compare/v0.2.0...v0.3.0
78
90
  [0.2.0]: https://github.com/envato/rack-ecg/compare/v0.1.0...v0.2.0
79
91
  [0.1.0]: https://github.com/envato/rack-ecg/compare/v0.0.5...v0.1.0
80
92
  [0.0.5]: https://github.com/envato/rack-ecg/compare/v0.0.4...v0.0.5
data/README.md CHANGED
@@ -28,7 +28,7 @@ APIs and features are almost certain to be in flux.
28
28
  Add this to your application's `Gemfile`:
29
29
 
30
30
  ```ruby
31
- gem 'rack-ecg', '~> 0.2.0`
31
+ gem 'rack-ecg', '~> 0.3.0`
32
32
  ```
33
33
 
34
34
  Then run `bundle install`.
@@ -241,7 +241,14 @@ use Rack::ECG, hook: Proc.new { |success, _checks| puts "Is healthy? #{success}"
241
241
  - `success`: whether the response will indicate success
242
242
  - `checks`: an array of the check names and values
243
243
 
244
- More examples are provided in [/examples](https://github.com/envato/rack-ecg/tree/main/examples)
244
+ ### `failure_status`
245
+
246
+ By default, check failures result in a HTTP status code `500` (Internal Server
247
+ Error). You can change this code by setting the `failure_status` option. e.g.
248
+
249
+ ```ruby
250
+ use Rack::ECG, checks: [:error], failure_status: 503
251
+ ```
245
252
 
246
253
  ## Requirements
247
254
 
@@ -252,6 +259,10 @@ More examples are provided in [/examples](https://github.com/envato/rack-ecg/tre
252
259
  - To use optional `migration_version` check, you must be using ActiveRecord and
253
260
  migrations stored in `schema_versions` table
254
261
 
262
+ ## Examples
263
+
264
+ Some configuration examples are provided in [/examples](https://github.com/envato/rack-ecg/tree/main/examples).
265
+
255
266
  ## Contact
256
267
 
257
268
  - [github project](https://github.com/envato/rack-ecg)
@@ -262,6 +273,7 @@ migrations stored in `schema_versions` table
262
273
  ## Maintainers
263
274
 
264
275
  - [Liam Dawson](https://github.com/liamdawson)
276
+ - [Andrew Davis](https://github.com/andyjdavis)
265
277
 
266
278
  ## Contributors
267
279
 
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
3
+ begin
4
+ require "bundler/gem_tasks"
5
+ rescue LoadError
6
+ # not a significant issue
7
+ end
4
8
 
5
9
  require "rspec/core/rake_task"
6
10
  require "rubocop/rake_task"
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rack/ecg"
4
+
5
+ use(
6
+ Rack::ECG,
7
+ checks: [:error],
8
+ failure_status: 503,
9
+ )
10
+
11
+ run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -23,6 +23,6 @@ def git_revision
23
23
  { name: :git_revision, status: status, value: value }
24
24
  end
25
25
 
26
- use(Rack::ECG, { checks: [[:static, git_revision]] })
26
+ use(Rack::ECG, checks: [[:static, git_revision]])
27
27
 
28
28
  run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./static"
3
+ require_relative "static"
4
4
 
5
5
  module Rack
6
6
  class ECG
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./static"
3
+ require_relative "static"
4
4
 
5
5
  module Rack
6
6
  class ECG
@@ -3,14 +3,13 @@
3
3
  module Rack
4
4
  class ECG
5
5
  module Check
6
- # @!method initialize
7
- # Checks whether the given Redis client is currently connected to the
8
- # database as identified by the ++instance++ option.
9
- #
10
- # @option parameters instance [Redis] The Redis client
11
6
  class RedisConnection
12
7
  attr_reader :redis_instance
13
8
 
9
+ # Checks whether the given Redis client is currently connected to the
10
+ # database as identified by the ++instance++ option.
11
+ #
12
+ # @option parameters instance [Redis] The Redis client
14
13
  def initialize(parameters = {})
15
14
  @redis_instance = parameters[:instance]
16
15
  end
@@ -30,14 +30,16 @@ module Rack
30
30
  @registry.fetch(name) { raise CheckNotRegistered, "Check '#{name}' is not registered" }
31
31
  end
32
32
 
33
- # (see #lookup)
34
- def self.lookup(name)
35
- instance.lookup(name)
36
- end
33
+ class << self
34
+ # (see #lookup)
35
+ def lookup(name)
36
+ instance.lookup(name)
37
+ end
37
38
 
38
- # (see #register)
39
- def self.register(name, check_class)
40
- instance.register(name, check_class)
39
+ # (see #register)
40
+ def register(name, check_class)
41
+ instance.register(name, check_class)
42
+ end
41
43
  end
42
44
  end
43
45
  end
@@ -3,6 +3,6 @@
3
3
  module Rack
4
4
  class ECG
5
5
  # Library version.
6
- VERSION = "0.2.0"
6
+ VERSION = "0.3.0"
7
7
  end
8
8
  end
data/lib/rack/ecg.rb CHANGED
@@ -11,6 +11,8 @@ module Rack
11
11
  DEFAULT_MOUNT_AT = "/_ecg"
12
12
  # Checks enabled by default.
13
13
  DEFAULT_CHECKS = [:http]
14
+ # Default failure response status.
15
+ DEFAULT_FAILURE_STATUS = 500
14
16
 
15
17
  # Constructs an instance of ECG Rack middleware with the specified
16
18
  # options.
@@ -22,7 +24,9 @@ module Rack
22
24
  # @param at [String, nil] Path which this ECG instance handles.
23
25
  # @param hook [#call, nil] Callable which receives the success status and
24
26
  # check results
25
- def initialize(app = nil, checks: DEFAULT_CHECKS, at: DEFAULT_MOUNT_AT, hook: nil)
27
+ # @param failure_status [Integer] Status code to return on check failure
28
+ def initialize(app = nil, checks: DEFAULT_CHECKS, at: DEFAULT_MOUNT_AT, hook: nil,
29
+ failure_status: DEFAULT_FAILURE_STATUS)
26
30
  @app = app
27
31
 
28
32
  check_configuration = checks || []
@@ -30,6 +34,8 @@ module Rack
30
34
  @mount_at = at || DEFAULT_MOUNT_AT
31
35
 
32
36
  @result_hook = hook
37
+
38
+ @failure_response_status = failure_status
33
39
  end
34
40
 
35
41
  # Rack compatible call method. Not intended for direct usage.
@@ -41,13 +47,13 @@ module Rack
41
47
 
42
48
  success = check_results.none? { |check| check[1][:status] == Check::Status::ERROR }
43
49
 
44
- response_status = success ? 200 : 500
50
+ response_status = success ? 200 : @failure_response_status
45
51
 
46
52
  @result_hook&.call(success, check_results)
47
53
 
48
54
  response_headers = {
49
- "X-Rack-ECG-Version" => Rack::ECG::VERSION,
50
- "Content-Type" => "application/json",
55
+ "x-rack-ecg-version" => Rack::ECG::VERSION,
56
+ "content-type" => "application/json",
51
57
  }
52
58
 
53
59
  response_body = JSON.pretty_generate(check_results)
data/rack-ecg.gemspec CHANGED
@@ -30,18 +30,16 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
33
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
34
34
 
35
35
  spec.add_runtime_dependency("rack")
36
36
 
37
- spec.add_development_dependency("bundler", "~> 2.3.7")
38
- spec.add_development_dependency("pry", "~> 0.14.1")
39
- spec.add_development_dependency("rack-test", "~> 1.1.0")
37
+ spec.add_development_dependency("pry", "~> 0.14.2")
38
+ spec.add_development_dependency("rack-test", "~> 2.1.0")
39
+ spec.add_development_dependency("rackup", "~> 2.1.0")
40
40
  spec.add_development_dependency("rake", "~> 13.0")
41
- spec.add_development_dependency("redcarpet", "~> 3.5.0")
42
- spec.add_development_dependency("rspec", "~> 3.11.0")
43
- spec.add_development_dependency("rubocop-rake", "> 0")
44
- spec.add_development_dependency("rubocop-rspec", "> 0")
45
- spec.add_development_dependency("rubocop-shopify", "~> 2.4.0")
46
- spec.add_development_dependency("yard", "~> 0.9.24")
41
+ spec.add_development_dependency("redcarpet", "~> 3.6.0")
42
+ spec.add_development_dependency("rspec", "~> 3.12.0")
43
+ spec.add_development_dependency("rubocop-shopify", "~> 2.14")
44
+ spec.add_development_dependency("yard", "~> 0.9.34")
47
45
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-ecg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Envato
8
8
  - Julian Doherty
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-02-21 00:00:00.000000000 Z
12
+ date: 2023-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -26,47 +26,47 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: bundler
29
+ name: pry
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 2.3.7
34
+ version: 0.14.2
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 2.3.7
41
+ version: 0.14.2
42
42
  - !ruby/object:Gem::Dependency
43
- name: pry
43
+ name: rack-test
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 0.14.1
48
+ version: 2.1.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 0.14.1
55
+ version: 2.1.0
56
56
  - !ruby/object:Gem::Dependency
57
- name: rack-test
57
+ name: rackup
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 1.1.0
62
+ version: 2.1.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 1.1.0
69
+ version: 2.1.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -87,84 +87,56 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 3.5.0
90
+ version: 3.6.0
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 3.5.0
97
+ version: 3.6.0
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rspec
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 3.11.0
104
+ version: 3.12.0
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 3.11.0
112
- - !ruby/object:Gem::Dependency
113
- name: rubocop-rake
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">"
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">"
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: rubocop-rspec
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">"
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">"
138
- - !ruby/object:Gem::Version
139
- version: '0'
111
+ version: 3.12.0
140
112
  - !ruby/object:Gem::Dependency
141
113
  name: rubocop-shopify
142
114
  requirement: !ruby/object:Gem::Requirement
143
115
  requirements:
144
116
  - - "~>"
145
117
  - !ruby/object:Gem::Version
146
- version: 2.4.0
118
+ version: '2.14'
147
119
  type: :development
148
120
  prerelease: false
149
121
  version_requirements: !ruby/object:Gem::Requirement
150
122
  requirements:
151
123
  - - "~>"
152
124
  - !ruby/object:Gem::Version
153
- version: 2.4.0
125
+ version: '2.14'
154
126
  - !ruby/object:Gem::Dependency
155
127
  name: yard
156
128
  requirement: !ruby/object:Gem::Requirement
157
129
  requirements:
158
130
  - - "~>"
159
131
  - !ruby/object:Gem::Version
160
- version: 0.9.24
132
+ version: 0.9.34
161
133
  type: :development
162
134
  prerelease: false
163
135
  version_requirements: !ruby/object:Gem::Requirement
164
136
  requirements:
165
137
  - - "~>"
166
138
  - !ruby/object:Gem::Version
167
- version: 0.9.24
139
+ version: 0.9.34
168
140
  description: |2
169
141
  rack-ecg allows you to serve a page that shows you facts about your deployed
170
142
  app to allow you to check that everything is running as it should: git
@@ -193,6 +165,7 @@ files:
193
165
  - docker-compose.yml
194
166
  - examples/basic.ru
195
167
  - examples/checks.ru
168
+ - examples/custom_failure_status.ru
196
169
  - examples/git_revision_check_replacement.ru
197
170
  - examples/hook.ru
198
171
  - examples/mounted_path.ru
@@ -220,7 +193,7 @@ metadata:
220
193
  homepage_uri: https://github.com/envato/rack-ecg
221
194
  source_code_uri: https://github.com/envato/rack-ecg
222
195
  changelog_uri: https://github.com/envato/rack-ecg/blob/main/CHANGELOG.md
223
- post_install_message:
196
+ post_install_message:
224
197
  rdoc_options: []
225
198
  require_paths:
226
199
  - lib
@@ -228,15 +201,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
201
  requirements:
229
202
  - - ">="
230
203
  - !ruby/object:Gem::Version
231
- version: 2.6.0
204
+ version: 2.7.0
232
205
  required_rubygems_version: !ruby/object:Gem::Requirement
233
206
  requirements:
234
207
  - - ">="
235
208
  - !ruby/object:Gem::Version
236
209
  version: '0'
237
210
  requirements: []
238
- rubygems_version: 3.0.3.1
239
- signing_key:
211
+ rubygems_version: 3.4.10
212
+ signing_key:
240
213
  specification_version: 4
241
214
  summary: Rack middleware serving a health check page
242
215
  test_files: []