HeyDoctor - doc c'mon man!
This is a simple stack health check for rails based applications, it mounts a endpoint with the current status of database, application and redis.
Usage
After installing this gem it will mount a endpoint in /_ah/health
, this will bring a response like this:
curl localhost:8000/_ah/health
{
"app":{
"message":"Application is running",
"success":true
},
"database":{
"message":"Database is connected",
"success":true
},
"redis":{
"message":"Redis is connected",
"success":true
}
}
Installation
- If you have a redis instance in you application add the following initializer to create a
Redis.current
, so it don't need to use global vars, or create a new connection each request:
# config/initializers/redis.rb
Redis.current ||= Redis.new(url: ENV['REDIS_URL'])
It is very important to use the env REDIS_URL
, because it will be used to check whether or not to render the redis response.
Add a env var
RAILS_PORT
with the current application port, it will also work with the envPORT
for backward compatibility with GAE applications.Add this line to your application's Gemfile:
gem 'hey_doctor'
- And then execute:
bundle install
- After installing the gem, mount the HealthCheck endpoint inside config.ru:
# config.ru
# bunch of requires here
require 'hey_doctor'
map '/_ah/health' do
run HeyDoctor::Rack::HealthCheck.new
end
...
- The last step is to mount the engine into your application, so if the application is down the middleware will notice:
Rails.application.routes.draw do
mount HeyDoctor::Engine, at: '/_ah/app_health'
...
end
Developing
docker network create dev-net # only the fist time you run this project
docker-compose build && docker-compose up
docker-compose exec web bash
bundle exec rake db:setup
rubocop -A && rspec
Minimum coverage is set to 95%.
Releasing
Change the tag in lib/hey_doctor/version.rb
each release using SEMVER.
# After merging the PR checkout to master branch and update it.
git checkout master
git pull
# build gem in pkg/hey_doctor-TAG.gem (Also changes Gemfile.lock)
bundle exec rake build
# Add the changed files
git add Gemfile.lock lib/hey_doctor/version.rb
git commit -m "v0.0.0"
# Create a new git tag
git tag -a v0.0.0 -m "Description here."
bundle exec rake release
# Ask for rubygems credentials and makes the release, push the commit and the tag
Contributing
Fell free to send a PR.
License
The gem is available as open source under the terms of the MIT License.