# sensu-run
[](http://hackage.haskell.org/package/sensu-run)
[](http://packdeps.haskellers.com/feed?needle=sensu-run)
[](http://stackage.org/nightly/package/sensu-run)
[](https://travis-ci.org/maoe/sensu-run)
[](https://ci.appveyor.com/project/maoe/sensu-run/branch/master)
`sensu-run` runs a command and send its result to Sensu server using the [client socket input](https://sensuapp.org/docs/latest/reference/clients.html#client-socket-input) or via the Sensu API. It is useful to monitor cron jobs for example.
## Installation
Install [stack](https://docs.haskellstack.org/en/stable/README/).
```sh
stack install --resolver=nightly sensu-run
```
will install the `sensu-run` command in `~/.local/bin`.
## Usage
```console
% sensu-run --help
Usage: sensu-run ([-n|--name NAME] [--source SOURCE] [--ttl SECONDS]
[--timeout SECONDS] [--handler HANDLER] ([--port PORT] |
[--server URL]) [--dry|--dry-run] [-s|--shell] [COMMAND] |
[-v|--version])
Available options:
-h,--help Show this help text
-n,--name NAME The name of the check
--source SOURCE The check source, used to create a JIT Sensu client
for an external resource
--ttl SECONDS The time to live in seconds until check results are
considered stale
--timeout SECONDS The check executaion duration timeout in seconds
--handler HANDLER Sensu event handler(s) to use for events created by
the check
--port PORT Send results to the local sensu-client listening on
the specified port (default: 3030)
--server URL Send results to the specified Sensu server
-s,--shell Execute the command using the shell
```
`--dry-run` option is useful to check the JSON output:
```console
% sensu-run --name check-home-src-size --handler foo --dry-run -- du -s $HOME/src | jq .
{
"name": "check-home-src-size",
"command": "du -s /home/maoe/src",
"issued": 1496966954,
"executed": 1496966954,
"duration": 1.235584,
"status": 0,
"output": "44567740\t/home/maoe/src\n",
"handlers": [
"foo"
]
}
```
Without the `--dry-run` option, `sensu-run` sends the output to localhost:PORT, which is expected to be listened by `sensu-client`.
`sensu-run` sets the status field depending on the command exit code and timeout:
| command exit code | `status` field |
|-------------------|----------------|
| 0 | 0 (OK) |
| non-zero | 2 (CRITICAL) |
| command timed out | 3 (UNKNOWN) |
### Sensu API
`sensu-run` supports posting check results via Sensu API as well. Use `--server` option to specify Sensu server addresses. If multiple servers are specified, `sensu-run` tries them one by one until it succeeds.
```sh
sensu-run --name check-true --handler foo --server sensu1.example.com --server sensu2.example.com --dry-run -- du -s $HOME/src
```