rack-ecg 0.1.0 → 0.2.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: daea3d8ff855b734db9fc65f7ed6859114f1a89e095d06f7c26f907d011b65e9
4
- data.tar.gz: b311a75d0c8555c21e9db5633bbbf3dc7304fd8dc42497dfeb9957edeb1f9233
3
+ metadata.gz: 83d08e1fb5c31c7f5883cbf1b698b207ce837980d511f35f7d7c32300067d5c4
4
+ data.tar.gz: 88688776e3d95f7b040b0701d9955830bfa833c6ec44e8bcf6a1ce647a30d7a7
5
5
  SHA512:
6
- metadata.gz: 2cd8743e07657aaaf35ff83fde2d38d3ba836b0b2a2b439260f0547c6ce173d065e9812f46d1915811fc6bf41eb2ec2c30285d492639f5d75970167d36078b8e
7
- data.tar.gz: f52644422ecd24cf6e072b4ddd5bd8edcc1de2a8653f65d2d0e230f9bea91fd5dfe18a1b96a035aa86aec61a125440d4a94125fc0b7c9a33c0e2665231ec4bd6
6
+ metadata.gz: d5c0db20e6bf5cfab2e64252ecce8d6f38a240d6356813929a134c8b1dc7fec25cb663b756230b9b81087fef1cef05c196be31258b699181b210a0c75877651b
7
+ data.tar.gz: e77ddb23c3b406fb3e51621364a38be99e3ef5fdb3a0fb91fb850fa21add92415a0e1e47539619fa5c148701eb076782d3de555ef63de15ec7286e48388e983e
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "19:00"
@@ -1,4 +1,4 @@
1
- name: Ruby
1
+ name: test
2
2
 
3
3
  on: [push,pull_request]
4
4
 
@@ -6,7 +6,7 @@ jobs:
6
6
  test:
7
7
  strategy:
8
8
  matrix:
9
- ruby: [2.5, 2.6, 2.7]
9
+ ruby: ["2.6", "2.7", "3.0", "3.1"]
10
10
  runs-on: ubuntu-latest
11
11
  name: Test (Ruby ${{ matrix.ruby }})
12
12
  steps:
@@ -17,6 +17,6 @@ jobs:
17
17
  ruby-version: ${{ matrix.ruby }}
18
18
  - name: Run the default task
19
19
  run: |
20
- gem install bundler -v 2.2.1
20
+ gem install bundler -v 2.3.7
21
21
  bundle install
22
22
  bundle exec rake
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.8
1
+ 2.6.9
data/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.2.0] - 2022-02-21
9
+
10
+ ### Added
11
+
12
+ - The `static` check, which uses the provided check parameters to return the same result every time.
13
+
14
+ ### Changed
15
+
16
+ - **Breaking**: The Redis check now requires being configured with an instance of the Redis client, via the named `instance` parameter
17
+ - **Deprecated**: The `git_revision` check will be removed in rack-ecg version 1.0.0. For a suggested replacement, [see the GitRevision Check Replacement example](./examples/gitrevision_check_replacement.ru), which uses the `static` check to memoize the value.
18
+
19
+ ### Removed
20
+
21
+ - **Breaking:** Dropped support for Ruby versions < 2.6.0
22
+
8
23
  ## [0.1.0] - 2020-12-16
9
24
 
10
25
  ### Added
@@ -59,11 +74,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
59
74
  - `git_revision` check to return the current git revision
60
75
  - `migration_version` check to return the current ActiveRecord migration version
61
76
 
62
- [Unreleased]: https://github.com/envato/rack-ecg/compare/v0.1.0...HEAD
63
- [0.1.0]: https://github.com/envato/rack-ecg/compare/v0.0.5...v0.1.0
77
+ [Unreleased]: https://github.com/envato/rack-ecg/compare/v0.2.0...HEAD
78
+ [0.2.0]: https://github.com/envato/rack-ecg/compare/v0.1.0...v0.2.0
79
+ [0.1.0]: https://github.com/envato/rack-ecg/compare/v0.0.5...v0.1.0
64
80
  [0.0.5]: https://github.com/envato/rack-ecg/compare/v0.0.4...v0.0.5
65
81
  [0.0.4]: https://github.com/envato/rack-ecg/compare/v0.0.3...v0.0.4
66
82
  [0.0.3]: https://github.com/envato/rack-ecg/compare/v0.0.2...v0.0.3
67
83
  [0.0.2]: https://github.com/envato/rack-ecg/compare/v0.0.1...v0.0.2
68
84
  [0.0.1]: https://github.com/envato/rack-ecg/releases/tag/v0.0.1
69
-
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- source 'https://rubygems.org'
2
+
3
+ source "https://rubygems.org"
3
4
 
4
5
  # Specify your gem's dependencies in rack-ecg.gemspec
5
6
  gemspec
data/README.md CHANGED
@@ -17,7 +17,7 @@ check endpoint, with minimal configuration.
17
17
 
18
18
  ## Development Status
19
19
 
20
- [![Build Status](https://github.com/envato/rack-ecg/workflows/build/badge.svg?branch=main)](https://github.com/envato/rack-ecg/actions)
20
+ [![Build Status](https://github.com/envato/rack-ecg/workflows/test/badge.svg?branch=main)](https://github.com/envato/rack-ecg/actions?query=branch%3Amain)
21
21
 
22
22
  `Rack::ECG` is extracted from production code in use at
23
23
  [Envato](http://envato.com). However, it is undergoing early development, and
@@ -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.0.5`
31
+ gem 'rack-ecg', '~> 0.2.0`
32
32
  ```
33
33
 
34
34
  Then run `bundle install`.
@@ -73,99 +73,149 @@ status if any of the checks fail.
73
73
 
74
74
  ## Configuration
75
75
 
76
- There are options that can be passed to `use Rack::ECG` to customise how it
77
- works.
76
+ There are options that can be passed to `use Rack::ECG` to customise how it works.
78
77
 
79
- ### `checks`
80
- Out of the box `Rack::ECG` doesn't do much and just checks that
81
- HTTP responses can be returned. There are a number of built in checks that
82
- `Rack::ECG` can be told to do (more to come)
83
- - `:git_revision` - this assumes your code is deployed via git and exists in a
84
- git repo, and that the `git` command can access it
85
- - `:migration_version` - this assumes you are using ActiveRecord migrations. It
86
- queries the `schema_versions` table and tells you what version the database is
87
- at.
88
- - `:active_record` - this checks if an ActiveRecord connection is active.
89
- - `:redis` - this checks if a Redis connection is active.
78
+ ### Checks
90
79
 
91
- So using `git_revision`, `migration_version`, `active_record`, and `redis` would look like:
80
+ By default, `Rack::ECG` indicates that the service is reponsive via a `http` check. Additional checks are included in this gem, and can be enabled by passing their configuration to the `checks` parameter. To enable a check, add its name, and optionally configuration, to the `checks` array:
92
81
 
93
82
  ```ruby
94
- use Rack::ECG, checks: [:git_revision, :migration_version, :active_record, :redis]
83
+ use Rack::ECG, checks: [
84
+ # no configuration required, or allowed
85
+ :http,
86
+ # passing configuration options
87
+ [:static, { name: "app", value: "my-cool-app" }],
88
+ # some checks can be used multiple times
89
+ [:static, { name: "env", value: Rails.env }],
90
+ ]
95
91
  ```
96
92
 
93
+ #### `active_record`
94
+
95
+ Requires a configured ActiveRecord connection. Does not support configuration. Indicates whether the connection to the default database is currently open. On success, returns something in the following format:
96
+
97
+ ```json
98
+ {
99
+ "active_record": {
100
+ "status": "ok",
101
+ "value": true
102
+ }
103
+ }
97
104
  ```
98
- $ curl http://localhost:9292/_ecg
105
+
106
+ #### `error`
107
+
108
+ Does not support configuration. Always returns the following:
109
+
110
+ ```json
111
+ {
112
+ "error": {
113
+ "status": "error",
114
+ "value": "PC LOAD ERROR"
115
+ }
116
+ }
117
+ ```
118
+
119
+ #### `git_revision`
120
+
121
+ **Deprecated**: will be removed in version 1.0.0. [See the GitRevision Check Replacement example](./examples/git_revision_check_replacement.ru), which uses the `static` check to memoize the value.
122
+
123
+ Requires the `git` executable on path, and that the application's working directory is within a Git repository. Does not support configuration. On success, returns something in the following format:
124
+
125
+ ```json
126
+ {
127
+ "git_revision": {
128
+ "status": "ok",
129
+ "value": "dc840f9d5563e6e5a8b34da29c298764e3046039"
130
+ }
131
+ }
132
+ ```
133
+
134
+ #### `http`
135
+
136
+ Automatically included, and does not support configuration. Always returns the following:
137
+
138
+ ```json
99
139
  {
100
140
  "http": {
101
141
  "status": "ok",
102
142
  "value": "online"
103
- },
104
- "git_revision": {
105
- "status": "ok",
106
- "value": "fb16e2c3b88af671c42880e6977bba34d7b05ba6\n"
107
- },
143
+ }
144
+ }
145
+ ```
146
+
147
+ #### `migration_version`
148
+
149
+ Requires a configured ActiveRecord connection, and that ActiveRecord migrations are in use. Does not support configuration. Queries the `schema_versions` table on the default database to report the current migration version. On success, returns something in the following format:
150
+
151
+ ```json
152
+ {
108
153
  "migration_version": {
109
154
  "status": "ok",
110
- "value": "20150319050250"
111
- },
112
- "active_record": {
113
- "status": "ok",
114
- "value": "true"
115
- },
155
+ "value": "20210506024055"
156
+ }
157
+ }
158
+ ```
159
+
160
+ #### `redis`
161
+
162
+ Requires the Redis gem. Requires configuration, an instance of a Redis client. Indicates whether the Redis client passed in is currently connected to the Redis database. On success, returns something in the following format:
163
+
164
+ ```json
165
+ {
116
166
  "redis": {
117
167
  "status": "ok",
118
- "value": "true"
168
+ "value": true
119
169
  }
120
170
  }
121
171
  ```
122
172
 
123
- #### Checks with parameters
124
- Some checks, such as the `sequel` check, require a parameter hash. In this case, you must provide the check as a tuple consisting of both the check name, and a hash of parameters:
173
+ #### `sequel`
174
+
175
+ Requires the Sequel gem. Requires configuration, and can be configured multiple times. Indicates whether a (new) connection can be established to the configured Sequel database.
176
+
177
+ Given the following configuration:
125
178
 
126
179
  ```ruby
127
- use Rack::ECG, checks: [:http, [:sequel, {connection: "sqlite://my-sqlite.db"}]]
180
+ {
181
+ connection: "sqlite://events.db",
182
+ name: "events", # must be unique per sequel check
183
+ }
128
184
  ```
129
185
 
130
- ```
131
- $ curl http://localhost:9292/_ecg
186
+ Returns the something in the following format on success:
187
+
188
+ ```json
132
189
  {
133
- "http": {
134
- "status": "ok",
135
- "value": "online"
136
- },
137
- "sequel": {
190
+ "sequel_events": {
138
191
  "status": "ok",
139
- "value": "true"
192
+ "value": true
140
193
  }
141
194
  }
142
195
  ```
143
196
 
144
- Because the `sequel` check operates on a per-connection basis, you can specify multiple Sequel databases to independently check, and provide a friendly name for disambiguation purposes:
197
+ #### `static`
198
+
199
+ Returns the same value every time. Requires configuration, and can be configured multiple times.
200
+
201
+ Given the following configuration:
145
202
 
146
203
  ```ruby
147
- use Rack::ECG, checks: [
148
- :http,
149
- [:sequel, {connection: 'sqlite://events.db', name: 'events'}],
150
- [:sequel, {connection: 'sqlite://projections.db', name: 'projections'}]
151
- ]
204
+ {
205
+ name: "image_build_url", # must be unique per static check
206
+ success: true, # default value
207
+ status: Rack::ECG::Check::Status::OK, # optional, overrides `success`
208
+ value: ENV["IMAGE_BUILD_URL"],
209
+ }
152
210
  ```
153
211
 
154
- ```
155
- $ curl http://localhost:9292/_ecg
212
+ Returns the something in the following format:
156
213
 
214
+ ```json
157
215
  {
158
- "http": {
159
- "status": "ok",
160
- "value": "online"
161
- },
162
- "sequel_events": {
163
- "status": "ok",
164
- "value": "true"
165
- },
166
- "sequel_projections": {
216
+ "image_build_url": {
167
217
  "status": "ok",
168
- "value": "true"
218
+ "value": "https://example.com/pipelines/my-cool-app/builds/1234"
169
219
  }
170
220
  }
171
221
  ```
@@ -195,7 +245,7 @@ More examples are provided in [/examples](https://github.com/envato/rack-ecg/tre
195
245
 
196
246
  ## Requirements
197
247
 
198
- - Ruby >= 2.5
248
+ - Ruby >= 2.6
199
249
  - Rack
200
250
  - To use optional `git_revision` check, your deployed code needs to be in a git repo, and
201
251
  `git` command must be accessible on the server
data/Rakefile CHANGED
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/gem_tasks"
3
4
 
4
- require 'rspec/core/rake_task'
5
- require 'rubocop/rake_task'
6
- require 'yard'
5
+ require "rspec/core/rake_task"
6
+ require "rubocop/rake_task"
7
+ require "yard"
7
8
 
8
9
  RSpec::Core::RakeTask.new(:spec)
9
10
  RuboCop::RakeTask.new(:rubocop)
@@ -0,0 +1,18 @@
1
+ # for running tests across different versions locally
2
+
3
+ version: "3"
4
+ services:
5
+ ruby30: &ruby30
6
+ image: ruby:3.0
7
+ volumes:
8
+ - ./:/app
9
+ command: bash -c 'gem update --system && cd /app && { ! [ -f Gemfile.lock ] || rm Gemfile.lock; } && bundle install && bundle exec rake'
10
+ ruby27:
11
+ <<: *ruby30
12
+ image: ruby:2.7
13
+ ruby26:
14
+ <<: *ruby30
15
+ image: ruby:2.6
16
+ ruby25:
17
+ <<: *ruby30
18
+ image: ruby:2.5
data/examples/basic.ru CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
2
+
3
+ require "rack/ecg"
3
4
 
4
5
  use(Rack::ECG)
5
6
 
6
- run(-> (_env) { [200, {}, ["Hello, World"]] })
7
+ run(->(_env) { [200, {}, ["Hello, World"]] })
data/examples/checks.ru CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
2
+
3
+ require "rack/ecg"
3
4
 
4
5
  use(Rack::ECG, checks: [:git_revision, :migration_version])
5
6
 
6
- run(-> (_env) { [200, {}, ["Hello, World"]] })
7
+ run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rack/ecg"
4
+
5
+ # This example behaves just like the deprecated GitRevision check, except that the value is memoized.
6
+ # i.e. "Fetching the git revision" shouldn't show up for every `GET /_ecg` request.
7
+ #
8
+ # Also consider writing the git revision to a file, or storing it in an environment variable, so it can found more
9
+ # efficiently and with fewer dependencies.
10
+
11
+ def git_revision
12
+ puts "Fetching the git revision"
13
+
14
+ _stdin, stdout, stderr, wait_thread = Open3.popen3("git rev-parse HEAD")
15
+
16
+ success = wait_thread.value.success?
17
+
18
+ status = success ? Rack::ECG::Check::Status::OK : Rack::ECG::Check::Status::ERROR
19
+
20
+ value = success ? stdout.read : stderr.read
21
+ value = value.strip
22
+
23
+ { name: :git_revision, status: status, value: value }
24
+ end
25
+
26
+ use(Rack::ECG, { checks: [[:static, git_revision]] })
27
+
28
+ run(->(_env) { [200, {}, ["Hello, World"]] })
data/examples/hook.ru CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rack/ecg'
3
+ require "rack/ecg"
4
4
 
5
5
  log_check_results = proc do |success, checks|
6
6
  next if success
7
7
 
8
8
  checks.each do |check_name, check_status|
9
- next unless check_status[:status] == 'error'
9
+ next unless check_status[:status] == "error"
10
10
 
11
11
  puts "Check #{check_name} failed: #{check_status[:value]}"
12
12
  end
@@ -14,4 +14,4 @@ end
14
14
 
15
15
  use(Rack::ECG, checks: [:git_revision, :migration_version], hook: log_check_results)
16
16
 
17
- run(->(_env) { [200, {}, ['Hello, World']] })
17
+ run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
2
+
3
+ require "rack/ecg"
3
4
 
4
5
  use(Rack::ECG, at: "/health_check")
5
6
 
6
- run(-> (_env) { [200, {}, ["Hello, World"]] })
7
+ run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
3
- require 'sequel'
4
- require 'sqlite3'
2
+
3
+ require "rack/ecg"
4
+ require "sequel"
5
+ require "sqlite3"
5
6
 
6
7
  use(Rack::ECG, checks: [
7
8
  :http,
8
- [:sequel, { connection: 'sqlite://events.db', name: 'events' }],
9
- [:sequel, { connection: 'sqlite://projections.db', name: 'projections' }],
9
+ [:sequel, { connection: "sqlite://events.db", name: "events" }],
10
+ [:sequel, { connection: "sqlite://projections.db", name: "projections" }],
10
11
  ])
11
12
 
12
- run(-> (_env) { [200, {}, ["Hello, World"]] })
13
+ run(->(_env) { [200, {}, ["Hello, World"]] })
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
2
+
3
+ require "rack/ecg"
3
4
 
4
5
  run(Rack::ECG.new)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  module Check
@@ -1,12 +1,21 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require_relative "./static"
4
+
2
5
  module Rack
3
6
  class ECG
4
7
  module Check
5
8
  # @!method initialize
6
9
  # Always returns a basic error for testing purposes.
7
- class Error
8
- def result
9
- Result.new(:error, Status::ERROR, "PC LOAD LETTER")
10
+ class Error < Static
11
+ STATIC_PARAMETERS = {
12
+ name: :error,
13
+ success: false,
14
+ value: "PC LOAD LETTER",
15
+ }.freeze
16
+
17
+ def initialize
18
+ super(STATIC_PARAMETERS)
10
19
  end
11
20
  end
12
21
 
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  module Check
6
+ # @deprecated This check requires the presence of the git executable, and executes it every time to determine the
7
+ # current revision. Consider checking the revision at initialization time, and returning it via a {Static} check
8
+ # instead.
9
+ #
5
10
  # @!method initialize
6
11
  # Returns the SHA1 of the current commit, as reported by the git
7
12
  # executable.
@@ -1,12 +1,21 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require_relative "./static"
4
+
2
5
  module Rack
3
6
  class ECG
4
7
  module Check
5
8
  # @!method initialize
6
9
  # Always returns a success.
7
- class Http
8
- def result
9
- Result.new(:http, Status::OK, "online")
10
+ class Http < Static
11
+ STATIC_PARAMETERS = {
12
+ name: :http,
13
+ success: true,
14
+ value: "online",
15
+ }.freeze
16
+
17
+ def initialize
18
+ super(STATIC_PARAMETERS)
10
19
  end
11
20
  end
12
21
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  module Check
@@ -1,19 +1,29 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  module Check
5
6
  # @!method initialize
6
- # Checks whether the global Redis client is currently connected to the
7
- # database.
7
+ # Checks whether the given Redis client is currently connected to the
8
+ # database as identified by the ++instance++ option.
8
9
  #
9
- # Does not take any options.
10
+ # @option parameters instance [Redis] The Redis client
10
11
  class RedisConnection
12
+ attr_reader :redis_instance
13
+
14
+ def initialize(parameters = {})
15
+ @redis_instance = parameters[:instance]
16
+ end
17
+
11
18
  def result
12
19
  value = ""
13
20
  status = Status::OK
14
21
  begin
15
- if defined?(::Redis)
16
- value = ::Redis.current.connected?
22
+ if redis_instance.nil?
23
+ status = Status::ERROR
24
+ value = "Redis instance parameters not found"
25
+ elsif defined?(::Redis)
26
+ value = redis_instance.connected?
17
27
  status = value ? Status::OK : Status::ERROR
18
28
  else
19
29
  status = Status::ERROR
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  module Check
@@ -41,7 +42,7 @@ module Rack
41
42
 
42
43
  def result_key
43
44
  if name
44
- "sequel #{name.downcase}".gsub(/\W+/, '_')
45
+ "sequel #{name.downcase}".gsub(/\W+/, "_")
45
46
  else
46
47
  "sequel"
47
48
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rack
4
+ class ECG
5
+ module Check
6
+ class Static
7
+ # Always returns the provided ++value++ under the ++name++ key, with the result set by ++status++.
8
+ #
9
+ # @example Return "Hello, world!" under ++static++
10
+ # use(Rack::ECG, { checks: [[:static, { value: "Hello, world!" }]] })
11
+ #
12
+ # @example Return "Paper jam in tray 2" as an error under ++printer_status++
13
+ # use(Rack::ECG, {
14
+ # checks: [
15
+ # [
16
+ # :static,
17
+ # {
18
+ # value: "Paper jam in tray 2",
19
+ # success: false, # or status: Rack::ECG::Check::Status::ERROR
20
+ # name: :printer_status,
21
+ # },
22
+ # ],
23
+ # ],
24
+ # })
25
+ #
26
+ # @option parameters value [Object] (nil) Result value
27
+ # @option parameters status [Status::ERROR, Status::OK, nil] (nil) Result status (takes precedence over
28
+ # ++success++)
29
+ # @option parameters success [Boolean] (true) Whether the result is successful
30
+ # @option parameters name [Symbol, #to_sym] (:static) Key for the check result in the response
31
+ def initialize(parameters)
32
+ parameters ||= {}
33
+
34
+ @name = parameters.fetch(:name, :static).to_sym
35
+ @value = parameters.fetch(:value, nil)
36
+
37
+ @status = if parameters.key?(:status)
38
+ parameters[:status]
39
+ else
40
+ parameters.fetch(:success, true) ? Status::OK : Status::ERROR
41
+ end
42
+ end
43
+
44
+ def result
45
+ Result.new(@name, @status, @value)
46
+ end
47
+ end
48
+
49
+ CheckRegistry.instance.register(:static, Static)
50
+ end
51
+ end
52
+ end
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rack/ecg/check_registry"
4
+ require "rack/ecg/check/active_record_connection"
3
5
  require "rack/ecg/check/error"
4
6
  require "rack/ecg/check/git_revision"
5
7
  require "rack/ecg/check/http"
6
8
  require "rack/ecg/check/migration_version"
7
- require "rack/ecg/check/active_record_connection"
8
9
  require "rack/ecg/check/redis_connection"
9
10
  require "rack/ecg/check/sequel_connection"
11
+ require "rack/ecg/check/static"
10
12
 
11
13
  module Rack
12
14
  class ECG
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rack/ecg/check"
3
4
 
4
5
  module Rack
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "singleton"
3
4
 
4
5
  module Rack
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Rack
3
4
  class ECG
4
5
  # Library version.
5
- VERSION = "0.1.0"
6
+ VERSION = "0.2.0"
6
7
  end
7
8
  end
data/lib/rack/ecg.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rack/ecg/version"
3
4
  require "json"
4
5
  require "open3"
data/lib/rack-ecg.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  # frozen_string_literal: true
2
- require 'rack/ecg'
2
+
3
+ require "rack/ecg"
data/rack-ecg.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Rack::ECG::VERSION
9
9
  spec.authors = ["Envato", "Julian Doherty"]
10
10
  spec.email = ["julian@envato.com"]
11
- spec.summary = 'Rack middleware serving a health check page'
11
+ spec.summary = "Rack middleware serving a health check page"
12
12
  spec.description = <<-EOF
13
13
  rack-ecg allows you to serve a page that shows you facts about your deployed
14
14
  app to allow you to check that everything is running as it should: git
@@ -30,16 +30,18 @@ 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.5.0")
33
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
34
34
 
35
35
  spec.add_runtime_dependency("rack")
36
36
 
37
- spec.add_development_dependency("rake", "~> 13.0")
38
- spec.add_development_dependency("bundler", "~> 2.2.1")
39
- spec.add_development_dependency("rspec", "~> 3.10.0")
37
+ spec.add_development_dependency("bundler", "~> 2.3.7")
38
+ spec.add_development_dependency("pry", "~> 0.14.1")
40
39
  spec.add_development_dependency("rack-test", "~> 1.1.0")
41
- spec.add_development_dependency("pry", "~> 0.13.0")
42
- spec.add_development_dependency("rubocop-shopify", "~> 1.0.0")
43
- spec.add_development_dependency("yard", "~> 0.9.24")
40
+ spec.add_development_dependency("rake", "~> 13.0")
44
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")
45
47
  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.1.0
4
+ version: 0.2.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: 2020-12-17 00:00:00.000000000 Z
12
+ date: 2022-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -26,117 +26,145 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: rake
29
+ name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '13.0'
34
+ version: 2.3.7
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: '13.0'
41
+ version: 2.3.7
42
42
  - !ruby/object:Gem::Dependency
43
- name: bundler
43
+ name: pry
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 2.2.1
48
+ version: 0.14.1
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: 2.2.1
55
+ version: 0.14.1
56
56
  - !ruby/object:Gem::Dependency
57
- name: rspec
57
+ name: rack-test
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 3.10.0
62
+ version: 1.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: 3.10.0
69
+ version: 1.1.0
70
70
  - !ruby/object:Gem::Dependency
71
- name: rack-test
71
+ name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 1.1.0
76
+ version: '13.0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 1.1.0
83
+ version: '13.0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: pry
85
+ name: redcarpet
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 0.13.0
90
+ version: 3.5.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: 0.13.0
97
+ version: 3.5.0
98
98
  - !ruby/object:Gem::Dependency
99
- name: rubocop-shopify
99
+ name: rspec
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 1.0.0
104
+ version: 3.11.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: 1.0.0
111
+ version: 3.11.0
112
112
  - !ruby/object:Gem::Dependency
113
- name: yard
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'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-shopify
114
142
  requirement: !ruby/object:Gem::Requirement
115
143
  requirements:
116
144
  - - "~>"
117
145
  - !ruby/object:Gem::Version
118
- version: 0.9.24
146
+ version: 2.4.0
119
147
  type: :development
120
148
  prerelease: false
121
149
  version_requirements: !ruby/object:Gem::Requirement
122
150
  requirements:
123
151
  - - "~>"
124
152
  - !ruby/object:Gem::Version
125
- version: 0.9.24
153
+ version: 2.4.0
126
154
  - !ruby/object:Gem::Dependency
127
- name: redcarpet
155
+ name: yard
128
156
  requirement: !ruby/object:Gem::Requirement
129
157
  requirements:
130
158
  - - "~>"
131
159
  - !ruby/object:Gem::Version
132
- version: 3.5.0
160
+ version: 0.9.24
133
161
  type: :development
134
162
  prerelease: false
135
163
  version_requirements: !ruby/object:Gem::Requirement
136
164
  requirements:
137
165
  - - "~>"
138
166
  - !ruby/object:Gem::Version
139
- version: 3.5.0
167
+ version: 0.9.24
140
168
  description: |2
141
169
  rack-ecg allows you to serve a page that shows you facts about your deployed
142
170
  app to allow you to check that everything is running as it should: git
@@ -147,7 +175,8 @@ executables: []
147
175
  extensions: []
148
176
  extra_rdoc_files: []
149
177
  files:
150
- - ".github/workflows/main.yml"
178
+ - ".github/dependabot.yml"
179
+ - ".github/workflows/test.yml"
151
180
  - ".gitignore"
152
181
  - ".rspec"
153
182
  - ".rubocop.yml"
@@ -161,8 +190,10 @@ files:
161
190
  - Rakefile
162
191
  - bin/console
163
192
  - bin/setup
193
+ - docker-compose.yml
164
194
  - examples/basic.ru
165
195
  - examples/checks.ru
196
+ - examples/git_revision_check_replacement.ru
166
197
  - examples/hook.ru
167
198
  - examples/mounted_path.ru
168
199
  - examples/parameters.ru
@@ -177,6 +208,7 @@ files:
177
208
  - lib/rack/ecg/check/migration_version.rb
178
209
  - lib/rack/ecg/check/redis_connection.rb
179
210
  - lib/rack/ecg/check/sequel_connection.rb
211
+ - lib/rack/ecg/check/static.rb
180
212
  - lib/rack/ecg/check_factory.rb
181
213
  - lib/rack/ecg/check_registry.rb
182
214
  - lib/rack/ecg/version.rb
@@ -188,7 +220,7 @@ metadata:
188
220
  homepage_uri: https://github.com/envato/rack-ecg
189
221
  source_code_uri: https://github.com/envato/rack-ecg
190
222
  changelog_uri: https://github.com/envato/rack-ecg/blob/main/CHANGELOG.md
191
- post_install_message:
223
+ post_install_message:
192
224
  rdoc_options: []
193
225
  require_paths:
194
226
  - lib
@@ -196,15 +228,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
228
  requirements:
197
229
  - - ">="
198
230
  - !ruby/object:Gem::Version
199
- version: 2.5.0
231
+ version: 2.6.0
200
232
  required_rubygems_version: !ruby/object:Gem::Requirement
201
233
  requirements:
202
234
  - - ">="
203
235
  - !ruby/object:Gem::Version
204
236
  version: '0'
205
237
  requirements: []
206
- rubygems_version: 3.2.2
207
- signing_key:
238
+ rubygems_version: 3.0.3.1
239
+ signing_key:
208
240
  specification_version: 4
209
241
  summary: Rack middleware serving a health check page
210
242
  test_files: []