Sensucronic
sensucronic is a wrapper for your cron jobs to integrate with the sensu client input socket.
it's written in ruby using mixlib::cli to fit in with the rest of the sensu ecosystem
Installation
Add this line to your application's Gemfile:
gem 'sensucronic'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sensucronic
Usage
sensucronic [ OPTIONS ] [ -- ] COMMAND [ ARGS ]
sensucronic [ OPTIONS ] [ -- ] 'COMMAND [ ARGS ]'
sensucronic runs COMMAND with ARGS it generates a json report and submits it to the sensu-client input socket
use --help to view options
prompt% sensucronic --help
s@otfess-3-1645% bundle exec exe/sensucronic --help
Usage: sensucronic (options)
-d, --dry-run output result to stdout only
-f, --field "key: value" add a field to the json report
-h, --help print this message
-p, --port PORT the port number for the sensu client input socket
-s, --source SOURCE set the source attribute on the sensu result
the OPTION --dryrun causes sensucronic to issue it's report to stdout instead of the sensu client input socket.
prompt% sensucronic --dry-run true
{
"command": "true",
"output": "",
"status": 0,
"exitcode": 0,
"agent": "sensucronic"
}
exitcodes are propogated to sensu's status field, 0 ok, 1 warn, 2 crit, 3 unknown but anything > 3 sets status to 3.
TODO: add options to configure this.
prompt% sensucronic --dry-run 'echo hi; exit 20'
{
"command": "echo\\ hi\\;\\ exit\\ 20",
"output": "hi\n",
"status": 3,
"exitcode": 20,
"agent": "sensucronic"
}
given a single quoted argument it will be parsed with a shell otherwise it tries to exec it as command followed by arguments
prompt% sensucronic --dry-run exit 3
{
"command": "exit 3",
"output": "Errno::ENOENT\nNo such file or directory - exit",
"status": 3,
"exitcode": 127,
"agent": "sensucronic"
}
prompt% sensucronic --dry-run 'exit 3'
{
"command": "exit\\ 3",
"output": "",
"status": 3,
"exitcode": 3,
"agent": "sensucronic"
}
the option --field allows you to add arbitrary attributes to the json report. you can repeat it as often as you need. note that you can't override the built in fields.
prompt% sensucronic --field 'team: blah' --field foo:bar --field output:blah --dry-run 'echo hi; exit 20'
{
"command": "echo\\ hi\\;\\ exit\\ 20",
"output": "hi\n",
"status": 3,
"exitcode": 20,
"agent": "sensucronic",
"team": "blah",
"foo": "bar"
}
TODO
- accept options to configure the status in response to the exitcodes. (always warn, always crit )
- allow specifying alternate host, currently the sensu agent must be running on the local box.
- maybe submit via http to client http api on another host
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/opentable/sensucronic
License
The gem is available as open source under the terms of the MIT License.