I’ve been working on building a simple systems monitoring tool over the past few weeks. The aim of this system is to capture events from various streams, provide a visualisation of how things are ‘now’ and (going forward) provide more intelligent error reporting. We’ve been using it to track success/error request rates and will be looking to fold in more event streams from inside our systems.
There’s a little info in the project’s README.md and some more in the tests, but here’s a high-level example from our monitoring app.
Esper events are modeled in
clj-esper as regular maps (albeit with some metadata), and can be created with the
defevent macro. The
new-event function constructs a map with all fields defined (and with their values coerced- although these mappings are a little incomplete currently, they do enough for me :).
I had originally started an implementation based around
defrecord and building classes but this started to become increasingly more complex so this seemed like a reasonable compromise. It’s probably not the cleanest but works ok for now.
I’m writing this (and publishing the code) because I’d really like to do a couple of things:
- Esper allows events to contain other maps and complex types. It’d be great to add support for this.
- Try an alternate modeling of the output event stream as a Clojure sequence (rather than the current callback function).
I’m sure there’s also a fair bit of the code that could be tidied and improved. I’d welcome any forks and pull requests of the clj-esper GitHub repository.