statusboard
Status page application with browser and REST API interface.
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.contrib.staticfiles.templatetags.staticfiles import static
# for Django >= 3.0: 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 thanINCIDENT_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 (seeSERVICE_STATUSES
instatusboard/models.py
).
Customize pages
The following blocks are customizable in statusboard/base.html
:
title
: title of the pagebranding
: branding in fixed navbarbootstrap_theme
: bootstrap themeheader
: header of the pageuserlinks
: links in the headerfooter
: footer divstyle
:CSS
filesscript
: JavaScript files
Example: change branding and title
In Django >= 1.9, the templates can be extended recursively (see https://docs.djangoproject.com/en/1.9/releases/1.9/#templates).
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.
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
.
Contact and copyright information
Copyright (C) 2019 Emanuele Di Giacomo emanuele@digiacomo.cc
django-statusboard is licensed under GPLv2+.