Hawk API server
My relationship with Go so far has been that it’s a language that I don’t love and don’t want to love, but which I find myself being effortlessly productive in, in a way that I haven’t experienced with a lot of other languages unless I have years of experience with them.
Instead of switching to Apache which would cause headaches since we’re also hosting Apache has a cluster service, I started playing around with writing a minimal web server in Go. At first my plan was to use some already existing web server like Caddy, but I basically had a fully functional implementation working already after my initial hack session.
Since then, the API server has gained a lot of interesting features. We use a
persistent connection to Pacemaker together with goroutines for each API call to
enable instant refresh of the web UI on cluster changes. I analyse the initial
bytes of the HTTP connection to see if it’s HTTP or HTTPS, and respond to HTTP
with a redirect to HTTPS: That way, someone can type in the
into the browser location bar without adding
https:// in front and it’ll still