Since the holiday break, I’ve been working on this little Raspberry Pi project. It’s dubbed the Website Uptime Monitor.
I use several uptime monitors including pingdom and Jetpack (used on this site). And I typically use the Free version because I am okay with being offline for a few hours if it comes to it. But then I thought, I can create my own uptime monitor that works just as well as the paid versions and I’ll have full control!
Of course I don’t have the skills or time to do what these paid monitors do but thought I’d try anyway. I also wanted some kind of visual indicator if any of my sites go down. And in comes the Raspberry Pi. I love the Pi. If you know me in person, you know that I have a dozen different Raspberry Pis around the house doing different things, such as control my lights, act as PiHole, PiVPN, etc.
You can watch the quick demo of the software here:
If you prefer to read about it over watching a demo video, keep reading!
The idea I had was to have three lights, like a traffic light: red, yellow, and green. I’m still working on the rules for when the lights come in, but they’re as follows: – Only Red – either everything is down or my internet is down – Only Green – everything is good! – Yellow – this light can be on in conjunction with the green light. This will come on if 1-3 sites are down. And if Green is on along with yellow, it means at least some sites are loading.
Pretty simple rules but I still think I can do better. That’s why this is still in beta! Current version at the time of writing this post is 0.3.0-b01.
The application will check sites every 15 minutes (this is configurable) and record all activity in a database. If a site is reported down three times in a row, the app will send an email with an outage report. The Email notifications are also stored in the database so you can look up whether or not an email was successfully sent out. Failure to send an email would typically mean that your internet was down.
Since everything is stored in the database, everything is reportable! For this, I created a Flask app with a bunch of API endpoints that can be accessed by any web application. These endpoints will output data from the MySQL table into neat JSON. You can also write to the databases using POST and PUT API calls.