Tiny app that can be used to monitor remote services
Ruby JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
config
db/migrate
public
test
views
.gitignore
README.textile
Rakefile
config.ru
jsmon.rb

README.textile

About

JsMon is a spy that waits for you to send a GET to it. It provides a simple dashboard so you can view the overall state of these services.

The dashboard is designed to show information in “dark and silent cockpit mode” — failure is highlighted, the rest is probably noise.

This project is just a weekend lolaround, but if you use something similar (that’s open source), or would like to contribute, please message me on GitHub.

Uses

You could use it to monitor:

  • Cron jobs failing (rather than the annoying emails, if you even get/want them)
  • The state of long-running processes
  • When a particular URL is hit in a web app

More Background: Monit, God, etc.

I use monit to monitor my servers, but sometimes a machine isn’t running monit, or making monit watch a particular thing would be awkward. Sometimes I just need to be able to call a URL when something happens. That’s what this project is all about.

I have so many cron jobs running on different servers and different clients that I want to stop situations where they quietly fail. I’m writing a little shell script to call JsMon like this:

0 4 * * * /opt/everycity/scripts/backups/backup.sh | /usr/bin/jsmon

That will use curl to fetch the relevant JsMon URL. The script sends the exit_code and determines the state based on it.

Meanwhile, I have a Jabber bot process elsewhere that keeps memory leaking and exploding. The weird thing is it stays connected even when it can’t respond, due to some quirk of the library or my code, and it also keeps the process running so monit can’t restart it. I think something weird is going on with threads. So I want to call JsMon when this happens so I can go and look at what the logs say and possibly restarts it.

API

Call /service/code/failure to report a failure. The code is a unique code created when you add a service through the web interface. Other parameters are available too: pass those as GET parameters.

  • exit_code: The process’s exit code
  • info: Any extra text about the event

Usage

This is a Sinatra application that can be run with Passenger, or through a proxy to a web server.

  • ruby jsmon.rb will let you try it out locally (port 4567)
  • rake db:migrate will set up the database
  • rake db:fixtures sets up sample data
  • rake --tasks shows other rake tasks
  • ActiveRecord and ActiveSupport are required

Todo

  • The exit_code script described above that I can shove into cron
  • RSS feeds: failure incidents, overall activity
  • Old data should be automatically cleared