Avatar of Pēteris Caune

Decision at SIA Monkey See Monkey Do about jQuery, Bootstrap, PostgreSQL, Django, Python

Avatar of cuu508

Python Django PostgreSQL Bootstrap jQuery

Healthchecks.io is a SaaS cron monitoring service. I needed a tool to monitor my cron jobs. I was not happy with the existing options, so I wrote one. The initial goal was to get to a MVP state, and use it myself. The followup goals were to add functionality and polish the user interface, while keeping the UI and the under the hood stuff as simple and clean as possible.

Python and DJango were obvious choices as I was already familiar with them, and knew that many of Django's built-in features would come handy in this project: ORM, testing infrastructure, user authentication, templates, form handling.

On the UI side, instead of doing the trendy "React JS app talking to API endpoints" thing, I went with the traditional HTML forms, and full page reloads. I was aiming for the max simplicity. Paraphrasing Kevin from The Office, why waste time write lot JS when form submit do trick. The frontend does however use some JS, for example, to support live-updating dashboards.

The backend is also aiming for max simplicity, and I've tried to keep the number of components to the minimum. For example, a message broker or a key-value store could be handy, but so far I'm getting away with storing everything in the Postgres database.

The deployment and hosting setup is also rather primitive by today's standards. uWSGI runs the Django app, with a nginx reverse proxy in front. uWSGI and nginx are run as systemd services on bare metal servers. Traffic is proxied through Cloudflare Load Balancer, which allows for relatively easy rolling code upgrades. I use Fabric for automating server maintenance. I did use Ansible for a while but moved back to Fabric: my Ansible playbooks were slower, and I could not get used to mixing YAML and Jinja templating.

Healthchecks.io tech decisions in one word: KISS. Use boring tools that get the job done.

9 upvotes·1 comment·30.8K views

Decision about Fabric

Avatar of cuu508

We use Fabric for automating deployment and maintenance tasks: bootstrapping and updating application servers (using the "rolling update" pattern), pulling logs from the servers, running manage.py maintenance commands. Fabric

1 upvote·1.4K views

Decision about Braintree

Avatar of cuu508

Braintree handles recurring credit card and Paypal payments for healthchecks.io. We liked the extensive developer documentation, the language-specific libraries and the friendly, timely communication from Braintree. Braintree

1 upvote·1.3K views

Decision about Sentry

Avatar of cuu508

Sentry has been an indispensable tool for finding out about application level errors. We also admire its UI for its design and attention to details. Sentry

1 upvote·60 views

Decision about GitHub

Avatar of cuu508

healthchecks.io is an open source project, and its source is available on GitHub. We use GitHub issues to track bugs and feature requests. We have received some substantial pull requests and are happy for that. GitHub

1 upvote·24 views

Decision about Sublime Text

Avatar of cuu508

Armed with Anaconda plugin and Seti theme, Sublime Text is a great environment to work on Python projects. Sublime Text

1 upvote·20 views

Decision about PostgreSQL

Avatar of cuu508

PostgreSQL is the "pragmatic" choice, and, unsurprisingly, is serving us well!

Being a Django project, healthchecks.io also works with MySQL. PostgreSQL

1 upvote·20 views

Decision about nginx

Avatar of cuu508

We use NGINX both as reverse HTTP proxy and also as a SMTP proxy, to handle incoming email.

We previously handled incoming email with Mandrill, and then later with AWS SES. Handling incoming email yourself is not that much more difficult and saves quite a bit on operational costs. nginx

1 upvote·9 views

Decision about Django

Avatar of cuu508

Django (and Python in general) lets us write concise, readable, and reasonably high-level code. Django

1 upvote·6 views

Decision about Travis CI

Avatar of cuu508

While we usually run tests before commits, Travis goes further and tests with different Python versions and different database backends. It works great, and, best of all, it is free for open source projects. Travis CI

1 upvote·4 views