health_check_rb 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/linters.yml +27 -0
  3. data/.github/workflows/tests.yml +50 -0
  4. data/.gitignore +33 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +110 -0
  7. data/CHANGELOG +122 -0
  8. data/Gemfile +23 -0
  9. data/MIT-LICENSE +23 -0
  10. data/README.md +392 -0
  11. data/Rakefile +27 -0
  12. data/config/routes.rb +7 -0
  13. data/health_check_rb.gemspec +26 -0
  14. data/init.rb +3 -0
  15. data/lib/health_check_rb/base_health_check.rb +7 -0
  16. data/lib/health_check_rb/check/elasticsearch.rb +18 -0
  17. data/lib/health_check_rb/check/rabbitmq.rb +19 -0
  18. data/lib/health_check_rb/check/redis.rb +30 -0
  19. data/lib/health_check_rb/check/resque.rb +18 -0
  20. data/lib/health_check_rb/check/s3.rb +62 -0
  21. data/lib/health_check_rb/check/sidekiq.rb +20 -0
  22. data/lib/health_check_rb/health_check_controller.rb +80 -0
  23. data/lib/health_check_rb/health_check_routes.rb +18 -0
  24. data/lib/health_check_rb/middleware_health_check.rb +108 -0
  25. data/lib/health_check_rb/utils.rb +194 -0
  26. data/lib/health_check_rb/version.rb +5 -0
  27. data/lib/health_check_rb.rb +129 -0
  28. data/spec/dummy/Rakefile +8 -0
  29. data/spec/dummy/app/assets/config/manifest.js +1 -0
  30. data/spec/dummy/app/controllers/example_controller.rb +7 -0
  31. data/spec/dummy/config/database.yml +10 -0
  32. data/spec/dummy/config/initializers/health_check.rb +18 -0
  33. data/spec/dummy/config/initializers/middleware.rb +3 -0
  34. data/spec/dummy/config/routes.rb +5 -0
  35. data/spec/dummy/db/migrate/.keep +0 -0
  36. data/spec/dummy/fake_app.rb +18 -0
  37. data/spec/dummy/tmp/.keep +0 -0
  38. data/spec/fixtures/migrate/9_create_countries.rb +9 -0
  39. data/spec/health_check_rb_spec.rb +300 -0
  40. data/spec/spec_helper.rb +36 -0
  41. metadata +101 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 14630b876905fff84a2437a751baf3373d8086dc0a21fdce0489830bdcfe3b92
4
+ data.tar.gz: c61410bfd2c72da1f93e0574b20d61d2f0fa1a7efd1dd16731bd2d4575bccaa4
5
+ SHA512:
6
+ metadata.gz: 750d39625f291cc6ceee874c76112a18143251dc8caa65770ab382188719fdd85123dea198abea62f27931c2e34aa26a8413bdc0b0ec86865f0cb0e623c53f64
7
+ data.tar.gz: 9f0f2be45d14264b56f1ee3c2e5943837b8616ee711728c85dee28819381a8ea5620e9c4dbdacff0ae776b56f64f512a49a89a2c15175ce26cc9fc02e9a60827
@@ -0,0 +1,27 @@
1
+ name: Run Linters
2
+ on:
3
+ push:
4
+ pull_request:
5
+
6
+ jobs:
7
+ test:
8
+ runs-on: ubuntu-latest
9
+
10
+ env:
11
+ RAILS_ENV: test
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Setup Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: 3.2
20
+
21
+ - name: Setup gems
22
+ run: |
23
+ bundle install --jobs 4 --retry 3
24
+
25
+ - name: Run RuboCop
26
+ run: |
27
+ bundle exec rubocop -S
@@ -0,0 +1,50 @@
1
+ name: Tests
2
+ on:
3
+ push:
4
+ pull_request:
5
+
6
+ jobs:
7
+ test:
8
+ runs-on: ubuntu-20.04
9
+
10
+ strategy:
11
+ matrix:
12
+ ruby: ['3.1', '3.2', '3.3', '3.4']
13
+ rails: ['7.2', '8.0', 'edge']
14
+ middleware: ['false', 'true']
15
+ exclude:
16
+ - ruby: '3.1'
17
+ rails: '8.0'
18
+ - ruby: '3.1'
19
+ rails: 'edge'
20
+ fail-fast: false
21
+
22
+ env:
23
+ RAILS_VERSION: ${{ matrix.rails }}
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: ${{ matrix.ruby }}
32
+ bundler-cache: true
33
+
34
+ - name: Test rails
35
+ run: |
36
+ bundle exec rails -v
37
+
38
+ - name: Setup smtp_mock for ruby
39
+ run: |
40
+ bundle exec smtp_mock -i ~
41
+
42
+ - name: Test smtp_mock for ruby
43
+ run: |
44
+ bundle exec smtp_mock --version
45
+
46
+ - name: Run tests
47
+ env:
48
+ MIDDLEWARE: ${{ matrix.middleware }}
49
+ RAILS_ENV: test
50
+ run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1,33 @@
1
+ # Suggested by bundler
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ spec/dummy/db/*.sqlite3*
17
+ spec/dummy/log/*
18
+ .ruby-version
19
+
20
+ ## PROJECT::SPECIFIC
21
+ bin/
22
+ railsapps/
23
+ gemfiles/*.gemfile.lock
24
+ ,*
25
+ .vagrant
26
+ ubuntu*console.log
27
+ tmp
28
+ # See: https://gist.github.com/ianheggie/9327010
29
+ # for Global git ignore for OS/IDE/temp/backup files
30
+
31
+ spec/dummy/tmp/*
32
+ !spec/dummy/tmp/.keep
33
+ spec/dummy/db/*.sqlite3
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,110 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rails
4
+ - rubocop-rspec
5
+
6
+ AllCops:
7
+ TargetRubyVersion: 3.1
8
+ TargetRailsVersion: 7.2
9
+ NewCops: enable
10
+ ActiveSupportExtensionsEnabled: true
11
+ Include:
12
+ - '**/*.rake'
13
+ - '**/*.rb'
14
+ - '**/Rakefile'
15
+ - '**/Gemfile'
16
+ - '**/*.gemfile'
17
+ Exclude:
18
+ - 'spec/dummy/**/*'
19
+ - 'vendor/**/*'
20
+
21
+ Rails:
22
+ Enabled: true
23
+
24
+ Rails/ApplicationController:
25
+ Enabled: false
26
+
27
+ RSpec/DescribedClass:
28
+ Enabled: false
29
+
30
+ RSpec/MultipleExpectations:
31
+ Max: 10
32
+
33
+ Lint/NonAtomicFileOperation:
34
+ Enabled: true
35
+ Exclude:
36
+ - 'spec/spec_helper.rb'
37
+ - 'spec/*_spec.rb'
38
+
39
+ RSpec/ExampleLength:
40
+ Max: 10
41
+
42
+ Metrics/AbcSize:
43
+ Enabled: false
44
+
45
+ Metrics/BlockLength:
46
+ Enabled: false
47
+
48
+ Metrics/ParameterLists:
49
+ Enabled: true
50
+ CountKeywordArgs: false
51
+
52
+ Metrics/ClassLength:
53
+ Enabled: false
54
+
55
+ Metrics/CyclomaticComplexity:
56
+ Enabled: false
57
+
58
+ Style/HashConversion:
59
+ Enabled: true
60
+
61
+ Layout/LineLength:
62
+ Max: 140
63
+
64
+ Metrics/MethodLength:
65
+ Enabled: false
66
+
67
+ Metrics/ModuleLength:
68
+ Enabled: false
69
+
70
+ Metrics/PerceivedComplexity:
71
+ Enabled: false
72
+
73
+ Lint/AmbiguousOperatorPrecedence:
74
+ Enabled: false
75
+
76
+ Rails/CreateTableWithTimestamps:
77
+ Enabled: false
78
+
79
+ Rails/HelperInstanceVariable:
80
+ Enabled: false
81
+
82
+ Rails/SkipsModelValidations:
83
+ Enabled: false
84
+
85
+ Performance/ChainArrayAllocation:
86
+ Enabled: true
87
+
88
+ Style/AutoResourceCleanup:
89
+ Enabled: true
90
+
91
+ Style/ExpandPathArguments:
92
+ Enabled: true
93
+
94
+ Style/ReturnNil:
95
+ Enabled: true
96
+
97
+ Style/UnlessLogicalOperators:
98
+ Enabled: true
99
+
100
+ Style/MethodCallWithArgsParentheses:
101
+ Enabled: true
102
+ AllowParenthesesInMultilineCall: true
103
+ AllowParenthesesInChaining: true
104
+ EnforcedStyle: omit_parentheses
105
+
106
+ Style/SuperWithArgsParentheses:
107
+ Enabled: false
108
+
109
+ Style/Documentation:
110
+ Enabled: false
data/CHANGELOG ADDED
@@ -0,0 +1,122 @@
1
+ = Change Log =
2
+
3
+ * 4.0.0 - main
4
+ * Support Rails 7.2 and 8.0 (support for older versions have been dropped)
5
+ * Support Ruby 3.1, 3.2, 3.3 and 3.4 (support for older versions have been dropped)
6
+ * GitHub tests have been added
7
+ * Rubocop linter has been added
8
+ * renamed to health_check_rb for own gem namespace
9
+
10
+ * 3.1.0 - 26 May 2021
11
+ * Updated README to clarify railsN branch status (they are intended to be stable, development to be a feature branch off them or master)
12
+ * Updated README with all the settings
13
+ * Updated all the branches to work with the latest travis and gem changes, as some gems needed to be locked down.
14
+ * Updated to test rails 6.0 and 6.1
15
+ * Got all travis tests passing
16
+ * Removed old, unused branches
17
+ * Merged PR Fix broken Cache-Control headers #93 from felixbuenemann
18
+ * Merged PR S3 should not depend on Rails secrets file #77 by natefaerber
19
+ * Merged PR RabbitMQ Health check #98 from rhuanbarreto
20
+ * Merged PR Use remote_ip to accept proxy-forwarded requests #102 by alessio-signorini but made it optional
21
+ * Fixed up failure setting to match previous output on error, and use it as a prefix when the error message is also output (not by default)
22
+ * Always log the error to rails log even if not including in html response
23
+ * Merged PR ensure REDIS connections are closed #88 from yld
24
+ * Merged PR more robust cache check #90 from masciugo
25
+ * Merged PR Add log_level config setting which defaults to 'info'. #97 from FloHeinle
26
+ * Merged PR get rid of old school hash rockets syntax #92 from DmytroStepaniuk
27
+ * Merged PR Converted whitelist testing to use IPAddr objects. #64 jordanyaker
28
+ * Added on_success and on_failure callbacks
29
+ * Makes sure errors are separated by a period and a space and a period always ends the list of errors
30
+
31
+ * 3.0.0
32
+ * First release on rails5 branch
33
+ * Depends on railties rather than rails so it can be used with trimmed down stacks
34
+ * Corrected ruby version required to match rails
35
+ * Cleaned up README
36
+ * redis_url now defaults to nil (url determined by redis gem)
37
+ * Cleaned out rails 4.0 dependent code
38
+ * Cleaned up test code and updated to rails 5 standards, uses smarter_bundler to handle gem ruby version issues
39
+ * Added rails 5.1 test
40
+ * Split all releases to this rails* branches - master is only for edge development
41
+
42
+ * 2.7.0
43
+ * Add ability to check health of redis when url is non-standard redis url
44
+
45
+ * 2.6.0
46
+ * Add named custom checks
47
+
48
+ * 2.5.0
49
+ * Added whitelist for IP# (Thanks Fernando Alvarez)
50
+ * reworked whitelist PR
51
+ * Expanded tests for whitelist and basic authentication
52
+ * reworked middleware, simplified error codes, added whitelist and basic authentication into middleware
53
+ * Removed unit tests as they where aonly applicable under rails 2.3 when installed in vendor/plugins
54
+ * #55 by mnoack - correct binstubs arg in test
55
+ * #54 by gkop - Lograge config snippet works with Rails 4.2.7.1, lograge 0.4.1
56
+ * Used ideas from #52 - use middleware to catch Rails stack exceptions
57
+ * #51 by tokenshift - Fixing NameError on `basic_auth_username`.
58
+ * Changes to address #50 by fillphafftek - allow standard check to be run from middleware if configured to do so, removed requirement for "middleware" to be passed in url for middleware tests
59
+
60
+ * 2.4.0
61
+ * Added tests for middleware
62
+ * Changed contributed middleware code to conform to existing url scheme
63
+ * Allow both GET and POST calls
64
+ * Prefer config.uri for changing route prefix
65
+
66
+ * 2.3.0
67
+ * Fix route reload issue
68
+ * Various fixes to get tests working with bundle/jruby and other gem issues
69
+ * Document additional branches
70
+ * Fix route reload issue (auto routing previously conflicted with devise)
71
+ * Removed ref to rails 2.3, 3.*
72
+
73
+ * 2.2.1
74
+ * Adjust private/public cache-control based on max_age set
75
+
76
+ * 2.2.0
77
+ * Add max_age so we can control the caching of responses, don't run tests if Last-modified still matches
78
+ * Added basic auth - Thanks omadahealth
79
+ * A few macinations due to gem changes and avoidning triggering deprecation notices
80
+ * Add single quote to README to make the configuration file valid - Thanks Ryan Selk <ryanselk@gmail.com>
81
+ * Fixed README formatting
82
+ * 2.1.0
83
+ * Updated contributed tests so there is both the forced check and a *-if-present check which tests if the gem's class is loaded
84
+ * Added resque-redis check - Thanks filiphaftek <filip.haftek@airhelp.com>
85
+ * In addition to adding a test file to S3, we will also try to delete it to confirm that delete operations are possible - Thanks Anton Dimitrov <dimitrov.anton@gmail.com>
86
+ * Added redis, sidekiq-redis and s3 health-checks - Thanks Filip <filip.haftek@airhelp.com>
87
+ * Fix render options - Thanks Yuji Hanamura <yuji.developer@gmail.com>
88
+ * Fix to always return a 200 status code on success rather than 304 (adds Last-Modified) - Thanks macgregordennis <macgregordennis@gmail.com>
89
+ * Added Rails 5.0 tests
90
+
91
+ * 2.0.0 - Removed silence - recommend to use a log filtering gem instead
92
+
93
+ * 1.4.1 - Rails 4 and route changes
94
+ * Now handles routes being generated multiple times by some gem / rails / ruby combinations - Previously multiple calls to health_check_routes where ignored, now explicit calls to health_check_route always adds the route but flags that it doesn't have to be added again on the end of the list
95
+ * Uses ActiveRecord::Migration.check_pending! if available and returns the message if an exception is raised (Rails 4.0+)
96
+ * Simplified routing rules down to one rule for Rails 3.0+
97
+ * Includes some changes for rails 4.1 (edge) - but still a work in progress
98
+
99
+ * 1.3.1 - Include changes from contributors:
100
+ * Migrations with dots are now handled
101
+ * the list of checks for "full" / "all" can be configured
102
+
103
+ * 1.2.0
104
+ * The gem can now be configured, including timeouts, status codes and text returned on success
105
+ * Custom checks can be added via initializer like config.add_custom_check { CustomCheckClass.a_custom_check }
106
+ * You can now request the response to be json or xml (via url or Content-accepted header)
107
+ * reduced tests to the versions of ruby recommended for the different versions of rails
108
+
109
+ * 1.1.2
110
+ * Change to bundler support for building gems, as jeweler gem was broken by v2.0.0 of rubygems
111
+
112
+ * 1.1.0
113
+ * Include cache check (Thanks to <https://github.com/mgomes1>) and some changes to test setup to workaround and diagnose test failures under rvm
114
+
115
+ * 1.0.2
116
+ * Included travis config and gemfiles used in travis tests in gem and changes to test setup so that gem test
117
+
118
+ * 1.x
119
+ * Includes Rails 3.x suppprt as an Engine
120
+
121
+ * 0.x
122
+ * Rails 2.3
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ if ENV['RAILS_VERSION'] == 'edge'
8
+ gem 'rails', git: 'https://github.com/rails/rails.git'
9
+ else
10
+ gem 'rails', "~> #{ENV['RAILS_VERSION'] || '7.2'}.0"
11
+ end
12
+
13
+ gem 'rake'
14
+ gem 'rspec-rails'
15
+
16
+ gem 'rubocop', require: false
17
+ gem 'rubocop-performance', require: false
18
+ gem 'rubocop-rails', require: false
19
+ gem 'rubocop-rspec', require: false
20
+
21
+ gem 'smtp_mock'
22
+
23
+ gem 'sqlite3', '~> 2.1'
data/MIT-LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2010-2013 Ian Heggie
2
+ Copyright (c) 2025 Alexander Meindl
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.