
Security News
Follow-up and Clarification on Recent Malicious Ruby Gems Campaign
A clarification on our recent research investigating 60 malicious Ruby gems.
Inspired by the ease of installing and setting up fitter-happier as a Rails application's health check, but frustrated by its lack of flexibility, OK Computer was born. It provides a robust endpoint to perform server health checks with a set of built-in plugins, as well as a simple interface to add your own custom checks.
For more insight into why we built this, check out our blog post introducing OK Computer.
OkComputer currently supports the following Rails versions:
If you use Grape instead of Rails, check out okcomputer-grape.
Add this line to your application's Gemfile:
gem 'okcomputer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install okcomputer
To perform the default checks (application running and ActiveRecord database connection), do nothing other than adding to your application's Gemfile.
We also include a MongoidCheck, but do not register it. If you use Mongoid, replace the default ActiveRecord check like so:
OkComputer::Registry.register "database", OkComputer::MongoidCheck.new
If you use another database adapter, see Registering Custom Checks below to
build your own database check and register it with the name "database" to
replace the built-in check, or use OkComputer::Registry.deregister "database"
to stop checking your database altogether.
Optionally require HTTP Basic authentication to view the results of checks in an initializer, like so:
# config/initializers/okcomputer.rb
OkComputer.require_authentication("username", "password")
To allow access to specific checks without a password, optionally specify the names of the checks:
# config/initializers/okcomputer.rb
OkComputer.require_authentication("username", "password", except: %w(default nonsecret))
By default, OkComputer routes are mounted at /okcomputer
. If you'd like to use an alternate route,
you can configure it with:
# config/initializers/okcomputer.rb
OkComputer.mount_at = 'health_checks' # mounts at /health_checks
For more control of adding OkComputer to your routes, set OkComputer.mount_at = false
to disable automatic mounting, and you can manually mount the engine
in your routes.rb
.
# config/initializers/okcomputer.rb
OkComputer.mount_at = false
# config/routes.rb, at any priority that suits you
mount OkComputer::Engine, at: "/custom_path"
Log check results by setting OkComputer.logger
. Note: results will be logged at the info
level.
OkComputer.logger = Rails.logger
[okcomputer] mycheck: PASSED mymessage (0s)
Register additional checks in an initializer, like so:
# config/initializers/okcomputer.rb
OkComputer::Registry.register "resque_down", OkComputer::ResqueDownCheck.new
OkComputer::Registry.register "resque_backed_up", OkComputer::ResqueBackedUpCheck.new("critical", 100)
# This check works on 2.4.0 and above versions of resque-scheduler
OkComputer::Registry.register "resque_scheduler_down", OkComputer::ResqueSchedulerCheck.new
The simplest way to register a check unique to your application is to subclass
OkComputer::Check and implement your own #check
method, which sets the
display message with mark_message
, and calls mark_failure
if anything is
wrong.
# config/initializers/okcomputer.rb
class MyCustomCheck < OkComputer::Check
def check
if rand(10).even?
mark_message "Even is great!"
else
mark_failure
mark_message "We don't like odd numbers"
end
end
end
OkComputer::Registry.register "check_for_odds", MyCustomCheck.new
Register an optional check like so:
# ...
OkComputer::Registry.register "some_optional_check", OkComputer::ResqueBackedUpCheck.new("critical", 100)
# ...
OkComputer.make_optional %w(some_optional_check another_optional_check)
This check will run and report its status, but will not affect the HTTP status code returned.
The plain-text output flows through Rails' internationalization framework.
Adjust the output as necessary by defining okcomputer.check.passed
and
okcomputer.check.failed
keys in your setup. The default values are available
in okcomputer.en.yml
.
By default, OkComputer runs checks in sequence. If you'd like to run them in parallel, you can configure it with:
# config/initializers/okcomputer.rb
OkComputer.check_in_parallel = true
Checks are available as plain text (by default) or JSON by appending .json, e.g.:
If NewRelic is installed, OkComputer automatically disables NewRelic monitoring for uptime checks, as it will start to artificially bring your request time down.
If you'd like to intentionally count OkComputer requests in your NewRelic analytics, set:
# config/initializers/okcomputer.rb
OkComputer.analytics_ignore = false
$ bundle install
OkComputer tests are written with RSpec.
To run the full test suite:
$ rake spec
You may also use the environment variable RAILS_VERSION
with one
of the supported versions of Rails (found at the top of this file) to
bundle and run the tests with a specific version of Rails.
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)FAQs
Unknown package
We found that okcomputer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.
Security News
ESLint now supports parallel linting with a new --concurrency flag, delivering major speed gains and closing a 10-year-old feature request.
Research
/Security News
A malicious Go module posing as an SSH brute forcer exfiltrates stolen credentials to a Telegram bot controlled by a Russian-speaking threat actor.