Skip to main content

Django app to show system status

Project description

statusboard

Build Status Pypi codecov Documentation Status

Status page application with browser and REST API interface.

screenshot

Installation

Install the package

pip install django-statusboard

Add the following applications to your Django projects

INSTALLED_APPS += [
    'django.contrib.humanize',
    'django.contrib.staticfiles',
    'rest_framework',
    'statusboard',
]

Update your urlconf:

# myproject/urls.py
urlpatterns += [
    url(r'^statusboard/$', include('statusboard.urls')),
]

Update your database

./manage migrate

Configuration

You can configure the app using the dict STATUSBOARD in settings.py:

from django.templatetags.static import static

STATUSBOARD = {
    "INCIDENT_DAYS_IN_INDEX": 7,
    "OPEN_INCIDENT_IN_INDEX": True,
    "AUTO_REFRESH_INDEX_SECONDS": 0,
    "FAVICON_DEFAULT": static('statusboard/images/statusboard-icon-default.png'),
    "FAVICON_INDEX_DICT": {
        0: static('statusboard/images/statusboard-icon-operational.png'),
        1: static('statusboard/images/statusboard-icon-performance.png'),
        2: static('statusboard/images/statusboard-icon-partial.png'),
        3: static('statusboard/images/statusboard-icon-major.png'),
    },
}
  • INCIDENT_DAYS_IN_INDEX: number of days to show in index (1 = today).
  • OPEN_INCIDENT_IN_INDEX: show not fixed incidents in index, whether or not the incident is older than INCIDENT_DAYS_IN_INDEX.
  • AUTO_REFRESH_INDEX_SECONDS: auto refresh home page every N seconds (0 = disabled).
  • FAVICON_DEFAULT: default favicon.
  • FAVICON_INDEX_DICT: favicon for index, based on the worst status (default: FAVICON_DEFAULT). The keys (0, 1, 2, 3) are the status values (see SERVICE_STATUSES in statusboard/models.py).

Internationalization and localization

django-statusboard supports the following languages:

  • English
  • Italian

Customize pages

The following blocks are customizable in statusboard/base.html:

  • title: title of the page
  • branding: branding in fixed navbar
  • bootstrap_theme: bootstrap theme
  • header: header of the page
  • userlinks: links in the header
  • footer: footer div
  • style: CSS files
  • script: JavaScript files

To customize the default style, create the file statusboard/base.html that extends the original base template and customize some blocks, e.g.:

{% extends "statusboard/base.html" %}

{% load static %}

{% block title %}
A.C.M.E. statuspage
{% endblock %}

{% block branding %}
<a class="navbar-brand" href="{% url 'statusboard:index' %}"><img src="{% static "/images/logo.png" %}"></a>
{% endblock %}

{% block bootstrap_theme %}
<link rel="stylesheet" href="{% static "/statusboard/css/spacelab-bootstrap.min.css" %}" />
<link rel="stylesheet" href="{% static "/css/mystyle.css" %}" />
{% endblock %}

Example: change branding and title

Create a statusboard/base.html in one of your templates dir:

{% extends `statusboard/base.html %}

{% block title %}
ACME, Inc.
{% endblock %}

{% block branding %}
<a class="navbar-brand" href="{% url 'statusboard:index' %}">ACME status</a>
{% endblock %}

Notifications

django-statusboard doesn't provide an out-of-the-box notification system, but it's easy to implement using django signals or you can use django-statusboard-notify that provides some builtin notifications (e.g. email, Telegram).

Moreover, django-statusboard tracks the previous status of a service (Service._status).

from django.dispatch import receiver
from django.db.models.signals import post_save
from django.core.mail import mail_admins

from statusboard import Service

@receiver(post_save, sender=Service)
def notify_service_update(sender, instance, **kwargs):
    # Send an email to admins if the service is getting worse, otherwise do nothing.
    if instance.status > instance._status:
        mail_admins("Alert", "Service {} is {}".format(instance.name, instance.get_status_display()))

REST API

django-statusboard comes with a set of REST API to manage its models, based on Django REST Framework ModelViewSet:

  • /api/v0.1/servicegroup/
  • /api/v0.1/service/
  • /api/v0.1/incident/
  • /api/v0.1/incidentupdate/
  • /api/v0.1/maintenance/

Development

Running tests

$ DJANGO_SETTINGS_MODULE=tests.test_settings python manage.py test

Update i18n

$ cd statusboard && django-admin makemessages -l LOCALE

Contact and copyright information

Copyright (C) 2019-2023 Emanuele Di Giacomo emanuele@digiacomo.cc

django-statusboard is licensed under GPLv2+.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_statusboard-0.15.0.tar.gz (494.9 kB view details)

Uploaded Source

Built Distribution

django_statusboard-0.15.0-py3-none-any.whl (520.2 kB view details)

Uploaded Python 3

File details

Details for the file django_statusboard-0.15.0.tar.gz.

File metadata

  • Download URL: django_statusboard-0.15.0.tar.gz
  • Upload date:
  • Size: 494.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for django_statusboard-0.15.0.tar.gz
Algorithm Hash digest
SHA256 f5bb8fa7d94029336fd5f8ff569ff515234493760e005a01b40d12de8aca00e0
MD5 305be7e487558f03111639bfe642e00a
BLAKE2b-256 f31e2243618a861efa5918bd0ed1105d73390590592c092022fddd4c1632bad2

See more details on using hashes here.

File details

Details for the file django_statusboard-0.15.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_statusboard-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e71d827ae226cecb395f14069e32de785adbf5eee94fa710499858d7653db90a
MD5 caf864ce07f41f08328ba447da3a55b2
BLAKE2b-256 6ba91b030667f5c4115c502f777d1e15610a6aad22da95cda31fe62a33d91a5a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page