Adds framework for "server health" display

- Adds global context object "system_healthy" (boolean)
- Framework for running system health checks
- Updated system info forms
- Displays warning next to user menu if system health errors exist

(cherry picked from commit ce6d626ab39147fc389de90815ca8baae2385d82)
This commit is contained in:
Oliver Walters 2020-11-19 12:35:09 +11:00
parent e55f4a2798
commit 4049c8e915
7 changed files with 90 additions and 8 deletions

View File

@ -7,9 +7,18 @@ Provides extra global data to all templates.
from InvenTree.status_codes import SalesOrderStatus, PurchaseOrderStatus
from InvenTree.status_codes import BuildStatus, StockStatus
import InvenTree.status
from users.models import RuleSet
def health_status(request):
return {
"system_healthy": InvenTree.status.check_system_health(),
}
def status_codes(request):
return {

View File

@ -227,6 +227,7 @@ TEMPLATES = [
'django.template.context_processors.i18n',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'InvenTree.context.health_status',
'InvenTree.context.status_codes',
'InvenTree.context.user_roles',
],

View File

@ -0,0 +1,39 @@
"""
Provides system status functionality checks.
"""
from django.utils.translation import ugettext as _
import logging
logger = logging.getLogger(__name__)
def check_system_health(**kwargs):
"""
Check that the InvenTree system is running OK.
Returns True if all system checks pass.
"""
result = True
if not check_celery_worker(**kwargs):
result = False
logger.warning(_("Celery worker check failed"))
if not result:
logger.warning(_("InvenTree system health checks failed"))
return result
def check_celery_worker(**kwargs):
"""
Check that a celery worker is running.
"""
# TODO - Checks that the configured celery worker thing is running
return True

View File

@ -792,7 +792,7 @@ class DatabaseStatsView(AjaxView):
""" View for displaying database statistics """
ajax_template_name = "stats.html"
ajax_form_title = _("Database Statistics")
ajax_form_title = _("System Information")
def get_context_data(self, **kwargs):

View File

@ -16,11 +16,6 @@
<div>
<table class='table table-striped table-condensed'>
<col width='25'>
<tr>
<td></td>
<td>{% trans "Instance Name" %}</td>
<td>{% inventree_instance_name %}</td>
</tr>
<tr>
<td><span class='fas fa-hashtag'></span></td>
<td>{% trans "InvenTree Version" %}</td><td><a href="https://github.com/inventree/InvenTree/releases">{% inventree_version %}</a></td>

View File

@ -52,7 +52,11 @@
</button>
</li>
<li class='dropdown'>
<a class='dropdown-toggle' data-toggle='dropdown' href="#"><span class="fas fa-user"></span> <b>{{ user.get_username }}</b></a>
<a class='dropdown-toggle' data-toggle='dropdown' href="#">
{% if not system_healthy %}
<span title='{% trans "InvenTree server issues detected" %}' class='fas fa-exclamation-triangle icon-red'></span>
{% endif %}
<span class="fas fa-user"></span> <b>{{ user.get_username }}</b></a>
<ul class='dropdown-menu'>
{% if user.is_authenticated %}
{% if user.is_staff %}
@ -65,8 +69,15 @@
<li><a href="{% url 'login' %}"><span class="fas fa-sign-in-alt"></span> {% trans "Login" %}</a></li>
{% endif %}
<hr>
<li id='launch-stats'><a href='#'>
{% if system_healthy %}
<span class='fas fa-server'>
{% else %}
<span class='fas fa-exclamation-triangle icon-red'>
{% endif %}
</span> {% trans "System Information" %}
</a></li>
<li id='launch-about'><a href='#'><span class="fas fa-info-circle"></span> {% trans "About InvenTree" %}</a></li>
<li id='launch-stats'><a href='#'><span class='fas fa-chart-pie'></span> {% trans "Statistics" %}</a></li>
</ul>
</li>
</ul>

View File

@ -4,6 +4,33 @@
<table class='table table-striped table-condensed'>
<col width='25'>
<tr>
<td colspan="3"><b>{% trans "Server" %}</b></td>
</tr>
<tr>
<td><span class='fas fa-server'></span></td>
<td>{% trans "Instance Name" %}</td>
<td>{% inventree_instance_name %}</td>
</tr>
<tr>
<td><span class='fas fa-exclamation-triangle'></span></td>
<td>{% trans "Server status" %}</td>
<td>
{% if system_healthy %}
<span class='label label-green'>{% trans "Healthy" %}</span>
{% else %}
<span class='label label-red'>{% trans "Issues detected" %}</span>
{% endif %}
</td>
</tr>
{% if not system_healthy %}
{% for issue in system_issues %}
<!-- TODO - Enumerate system issues here! -->
{% endfor %}
{% endif %}
<tr>
<td colspan='3'><b>{% trans "Parts" %}</b></td>
</tr>