Bidu House
This gem tries to make server monitoring easier and more reliable by adding an easly configurable report and making it avaliable in a controller
Getting started
-
Add House to your
Gemfile
andbundle install
:gem 'bidu-house'
-
Include in your health check controller passing the configuration to fetch your Documents with error and render the report
class HealthCheckController < ApplicationController
include Bidu::House
status_report :failures, clazz: Document
status_report :failures, clazz: Schedules, on: :schedules
status_report :delays, clazz: Schedules, scope: :late, on: :schedules
status_report :'documents.count', clazz: Document, scope: :active, type: House::Range, minimum: 100
status_report :'documents.errors', clazz: Document, scope: :'active.with_error', type: :range, maximum: 1000
def status
render_status
end
def late_status
render_status(:schedules)
end
end
- Add a route to your controller
scope path: 'health-check', controller: :health_check do
get '/status' => :status
get '/late-status' => :late_status
end
- Set the correct options on your status report to achieve a perfect report
- clazz: Class of the object that might contain error
- period: default search period (default: 1 day)
- on: report bucket (default: :default)
- type: report type (error, range or other custom report)
Remembering that each report may have its onw parameters
-
House::Error
- scope: scope to be fetched when trying to find objects with error (default: :with_error)
- external_key: column to be exposed as id for the objects with error
- threshold: default report threshold (default: 0.02)
- base_scope: scope to be universal sample
- uniq: when the output ids should not be repeated
- limit: limit of ids to be outputed
-
House::Range
- scope: scope of the query to be counted
- maximum: max value accepted in the range
- minimum: minimum value accepted in the range
- Run the server and hit the health-check routes
wget http://localhost:3000/health-check/status
wget http://localhost:3000/health-check/late-status
- Customize your request for multiple reports
wget http://localhost:3000/health-check/status?period=3.days&threshold=0.005
wget http://localhost:3000/health-check/late-status?period=1.hours&threshold=0.1
- Use the status json to understand what is wrong
{
"status": "error",
"failures": {
"ids": [10, 14],
"percentage": 0.5,
"status": "error"
},
"delays": {
"ids": [12],
"percentage": 0.001,
"status": "ok"
}
}