diff --git a/plinth/modules/diagnostics/diagnostics.py b/plinth/modules/diagnostics/diagnostics.py index 01d487d0f..ab9f8b303 100644 --- a/plinth/modules/diagnostics/diagnostics.py +++ b/plinth/modules/diagnostics/diagnostics.py @@ -19,11 +19,14 @@ Plinth module for running diagnostics """ +from django.http import Http404 from django.template.response import TemplateResponse from gettext import gettext as _ +import importlib from plinth import actions from plinth import cfg +from plinth import module_loader from plinth.errors import ActionError @@ -55,3 +58,24 @@ def test(request): {'title': _('Diagnostic Test'), 'diagnostics_output': output, 'diagnostics_error': error}) + +def module(request, module_name): + """Return diagnostics for a particular module.""" + found = False + for module_import_path in module_loader.loaded_modules: + if module_name == module_import_path.split('.')[-1]: + found = True + break + + if not found: + raise Http404('Module does not exist or not loaded') + + loaded_module = importlib.import_module(module_import_path) + results = [] + if hasattr(loaded_module, 'diagnose'): + results = loaded_module.diagnose() + + return TemplateResponse(request, 'diagnostics_module.html', + {'title': _('Diagnostic Test'), + 'module_name': module_name, + 'results': results}) diff --git a/plinth/modules/diagnostics/templates/diagnostics_module.html b/plinth/modules/diagnostics/templates/diagnostics_module.html new file mode 100644 index 000000000..8e9ac2462 --- /dev/null +++ b/plinth/modules/diagnostics/templates/diagnostics_module.html @@ -0,0 +1,52 @@ +{% extends 'base.html' %} +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% block content %} + +

Diagnostic Results

+ +

Module: {{ module_name }}

+ +{% if results %} +
+
+ + + + + + + + + {% for test, result in results %} + + + + + {% endfor %} + +
TestResult
{{ test }}{{ result }}
+
+
+{% else %} +

This module does not support diagnostics

+{% endif %} + +{% endblock %} diff --git a/plinth/modules/diagnostics/urls.py b/plinth/modules/diagnostics/urls.py index c1797c716..afb7025e5 100644 --- a/plinth/modules/diagnostics/urls.py +++ b/plinth/modules/diagnostics/urls.py @@ -26,4 +26,6 @@ urlpatterns = patterns( # pylint: disable-msg=C0103 'plinth.modules.diagnostics.diagnostics', url(r'^sys/diagnostics/$', 'index', name='index'), url(r'^sys/diagnostics/test/$', 'test', name='test'), + url(r'^sys/diagnostics/module/(?P[a-z\-]+)/$', 'module', + name='module'), )