Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/noteed/sentry
Simple process monitoring
https://github.com/noteed/sentry
Last synced: about 2 months ago
JSON representation
Simple process monitoring
- Host: GitHub
- URL: https://github.com/noteed/sentry
- Owner: noteed
- License: other
- Created: 2012-04-04T18:20:37.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2013-06-03T21:30:07.000Z (over 11 years ago)
- Last Synced: 2024-10-28T14:19:47.273Z (2 months ago)
- Language: Haskell
- Homepage: http://noteed.com/sentry/
- Size: 151 KB
- Stars: 8
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sentry - Simple process monitoring
This project is in early stage.
Sentry is a process monitoring tool written and configured in Haskell. Its aim
is to keep running programs. For each configured program (called an entry in
its configuration) , multiple processes can be started.Currently Sentry runs on Linux only.
## Install
The development version can be installed by cloning the Git repository and
using cabal:> git clone git://github.com/noteed/sentry.git
> cd sentry && cabal install## Usage
Sentry is written in Haskell and is also configured in Haskell. The principle
is to write a short script in `~/.sentry/conf/`. For instance a `sample.hs`
configuration would look like the following:import Sentry.Server
main :: IO ()
main = sentry
[ entry "dummy" "sleep" ["4"] 1000 1
]`"dummy"` is the entry name, also called the process type. `"sleep"` and
`["4"]` is the command that need to be run (and kept running), together with
its arguments. The `1000` value specifies how long in milliseconds Sentry has
to wait before restarting the command when it dies. Finally `1` is the number
of processes you want to run that particular process type. You can then compile
`sample.hs` and obtain a `sample` binary like this:> ghc --make -threaded sample.hs
Start your Sentry with:
> ~/.sentry/conf/sample start
Sentry will save its PID to `sample.pid` and start running the "dummy" entry:
Sentry started (PID: 1511s aved in /home/thu/.sentry/conf/sample.pid).
20:17:51 dummy.1514 Started at 1334081871.
20:17:55 dummy.1514 Exited at 1334081875 with ExitSuccess.
20:17:56 dummy.1516 Started at 1334081876.
20:18:00 dummy.1516 Exited at 1334081880 with ExitSuccess.
^CBye.
>Whenever `sleep` exits, Sentry will run it again, and again.
Recompiling a configuration (i.e. `sample.hs` in the example) can be done while
Sentry is running. A SIGHUP will instruct Sentry to re-exec itself, using the
new configuration. The command (while Sentry is already running)> ~/.sentry/conf/sample reload
will just do that:
> .sentry/conf/sample start
Sentry started (PID: 1530saved in /home/thu/.sentry/conf/sample.pid).
20:32:01 dummy.1536 Started at 1334082721.
20:32:05 dummy.1536 Exited at 1334082725 with ExitSuccess.
/home/thu/.sentry/conf/sample.hs successfully compiled.
Sentry reexec'd. Initially started at 1334082711 (Previously reexec'd at 1334082711).
20:32:08 dummy.1550 Started at 1334082728.
20:32:12 dummy.1550 Exited at 1334082732 with ExitSuccess.
^CBye.
>## HTTP interface
Sentry has an embedded web server to exposes its state over HTTP. It is also
used to accept reconfiguration commands (e.g. scale a given process type).## Documentation
This `README.md` file should be a good starting point. Additional information
can be found in the Haddock pages. Those pages are currently available from
http://hypered.be/haddock/sentry.## Design
Sentry is configured with a list of process specifications. For each
specification, multiple processes can be spawn and monitored.Sentry spawns a process by forking itself and then exec'ing the process'
command. Waiting for the process to complete is done in a lightweight thread.
Forking and waiting a child process is a more accurate way to know when the
process dies than polling. (Another good way to do that is to use netlink with
the process events connector.)A main thread reads commands from a concurrent queue (a `Chan` in Haskell).
Commands are pushed by signal handlers and monitoring threads to instruct the
main thread to act on its configuration (and thus change its set of monitored
processes).## TODO
- Dynamically resize the number of processes for a specific entry.
- Let Sentry start a configuration instead of manually run it. I.e.
`sentryd start -c sample` instead of `~/.sentry/conf/sample`. Default
configuration could be `sentry.hs`.
- Separate data types for save/restore (i.e. with SafeCopy instances) and
data types actually used at runtime.
- Build on 7.0 and 7.4 (was tested only on 7.0.3 so far).