July 16, 2020
Olifant is a web service that enables you to monitor websites or web services. If a monitor fails a check you will be notified via a communication channel such as email or IRC.
Olifant was built from the ground up with Go and no external libraries (minus a PostgreSQL driver). No JavaScript libraries or CSS frameworks were used. Pages are rendered server side via Go templates.
I currently use Olifant to monitor a number of my own websites (such as prophitt.me). The service was built with my own use cases in mind but you may find the service useful as well.
The short answer: I was unable to find a simple monitoring service that supported notification channels I care about such as IRC. Furthermore, my issues with Ruby on Rails have been growing as of Rails 6. A simple monitoring service seemed like a great way to test building a complete web service entirely in Go. Why did I use Go? Well, read on.
I have dabbled with Go in the past, mainly for micro services and command line tools that needed to crunch a lot of data. My goto for building complete web services has always been Ruby on Rails. I currently have two successful products running on Rails 5 and I continue to maintain those products today. When I started Olifant I had originally used Rails 6, however some of the changes from Rails 5 irked me.
Rails 6 now uses webpacker instead of the old asset pipeline. That on its own isn't a bad thing, but I generally don't enjoy the Node ecosystem.
The first impression I had with Rails 6 wasn't a great one. Not long after I ran rails news I started seeing a large number of yellow warnings-- all from yarn. Not really something I want to see the moment I start a new project. I can't imagine what a large project maintained over a long period of time would be like.
From there things got more weird. I wanted to give Stimulus a try and I set up Bootstrap for Rails 6. The instructions were convoluted and I ended up with style packs in my app/javascript/packs folder. Ummm, ok. Hopefully this experience has been cleaned up since the initial release and I hope people have found better ways to integrate Bootstrap and other JavaScript frameworks. My overall experience with the new asset manager left me feeling a bit bummed out.
I thought about going back to Rails 5 which is more familiar to me and feels more Railsy. However, I started to doubt the future of Rails. Who knows what Rails 7 would bring, or 8. I knew some day I would need to upgrade from Rails 5 and I was not confident Rails would be a good fit for me anymore.
After careful consideration I decided to give Go a test drive. I chose Go for a few reasons:
Olifant is released and available to the public but a number of features I would like are still missing. I will be releasing frequent updates to the service while I use the service and find more features I need.