Server Check.in was built to be a simple, inexpensive website and server monitor. You can monitor up to five sites and servers using HTTP status checks (making sure your web server is responding with a '200 OK' when someone requests a page) or simple pings (to make sure a server is online).
When your site goes down, you can choose to be notified by email or SMS messages (which always come from a real phone number).
You can also monitor your website or server's latency (responsiveness—or lack thereof) over time. This data is helpful in determining if your site performs well consistently over time, and not experiencing any untimely slowdowns.
Drupal provides an extremely robust and flexible platform for building websites. Server Check.in was built to be simple, inexpensive, and easy to use. More than half of the site's features were simply pieced together using modules already built by others. Missing parts—most of the backend of the service, along with payment and notification integration—were easy to add through a few custom modules.
Server Check.in was built using Drupal 7, and the responsive theme was built using a Zen sub-theme. Drush powers most of the backend functionality of the service (server checks, queue consumption, notification handling). Some parts of the service are provided through third party services: Stripe powers payments, and Twilio powers SMS notifications.
Third-party Services and Code used by Server Check.in
Server Check.in uses a few third party services to handle payment and messaging, and other aspects of the service. The main services are:
- Stripe: PayPal and some other credit card processing services were considered for Server Check.in, but Stripe offers an extremely simple API with a great PHP library, and their processing fees are very competitive. Since the existing Stripe integrations for Drupal are mostly centered around Drupal Commerce or Übercart, we decided to write our own small integration, which simply adds a Stripe payment form to the site's User Registration form, and allows users to view their billing information on their account pages.
- Twilio: Twilio is a very simple voice and SMS communications service that allows simple integration for phone calls and notifications. We liked their low price for reserving a phone number and for sending and receiving texts. Twilio also works with many international phone networks, so some users outside the US and Canada are able to receive text message notifications when their servers are down.
- Flot: Flot is an excellent jQuery plugin that enables rich and detailed charts and graphs to be drawn using HTML5's canvas abilities. This means that charts for latency and uptime graphing look beautiful and work perfectly across a wide variety of devices (like tablets, mobile phones, and desktop computers), and don't require any special plugins for viewing. See some examples of the graphs produced by Flot on the About page.
- MailChimp HTML Email Templates: Instead of sending a boring and frustrating text email when your site is down, we decided to adapt MailChimp's excellent (and free!) email templates to our site design and send those using our own implementation of Drupal's
DefaultMailSystem(a basic example for this: How to send HTML mail [Drupal Answers]).
Since many users are on smartphones and tablets, Server Check.in was built with a mobile-first theme, using a simple fluid-width theme and some responsive styling. The design has been well-tested on iPads, iPhones, Android phones, and all the major desktop browsers.
The central conceptual unit on Server Check.in is a 'server' node; these nodes use Field API fields to define what kind of check is to be performed, the server URL or IP address which will be checked, and what kind of notifications will be sent when the server goes down or recovers from an outage. Views and some custom glue code helps build out outage listings and latency graphs for each server.
Keeping the design and the structure of the site extremely simple makes it easier for users to use the service. Registering, adding or managing servers, and checking the status of your servers is extremely simple, and all that was required was a little work with some hook_form_alters, and some jQuery to tweak the interface a slight bit here and there.
One of the main goals of Server Check.in is to be able to scale as more users come on board—performing thousands of HTTP requests and pings per hour can be quite taxing, and one server won't be enough. Therefore, the system is built in a decoupled manner. Drupal's Queue API is used to find servers that need checking, and then pass those servers to other processes that then report back whether the server is up or down.
We are also using the Boost module (as of this writing) to help the server handle bursts of traffic; the site ran admirably during a sudden onslaught of traffic from a Hacker News post that stayed on the HN frontpage for almost two hours.
Our custom code uses SimpleTest to ensure that things that work don't get broken due to changes and bugfixes. Just as with Drupal core, we've found that having reliable tests for all the major functionality of a site makes for a much more reliable end result, and cuts down on the number of bugs.
You can find even more information about the motivation behind building the site and some particular features in the following posts: