mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
diagnostics: Rename views modules, move utilities to main module
Tests performed: - Visit diagnostics app. - Run diagnostics for all apps. - Go to privoxy app and run diagnostics. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: Veiko Aasa <veiko17@disroot.org>
This commit is contained in:
parent
cfc3b1924f
commit
d8e5d63616
@ -3,6 +3,11 @@
|
|||||||
FreedomBox app for system diagnostics.
|
FreedomBox app for system diagnostics.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import collections
|
||||||
|
import importlib
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from plinth import app as app_module
|
from plinth import app as app_module
|
||||||
@ -23,6 +28,12 @@ _description = [
|
|||||||
|
|
||||||
app = None
|
app = None
|
||||||
|
|
||||||
|
logger = logging.Logger(__name__)
|
||||||
|
|
||||||
|
running_task = None
|
||||||
|
|
||||||
|
current_results = {}
|
||||||
|
|
||||||
|
|
||||||
class DiagnosticsApp(app_module.App):
|
class DiagnosticsApp(app_module.App):
|
||||||
"""FreedomBox app for diagnostics."""
|
"""FreedomBox app for diagnostics."""
|
||||||
@ -59,3 +70,59 @@ def init():
|
|||||||
global app
|
global app
|
||||||
app = DiagnosticsApp()
|
app = DiagnosticsApp()
|
||||||
app.set_enabled(True)
|
app.set_enabled(True)
|
||||||
|
|
||||||
|
|
||||||
|
def start_task():
|
||||||
|
"""Start the run task in a separate thread."""
|
||||||
|
global running_task
|
||||||
|
if running_task:
|
||||||
|
raise Exception('Task already running')
|
||||||
|
|
||||||
|
running_task = threading.Thread(target=_run_on_all_enabled_modules_wrapper)
|
||||||
|
running_task.start()
|
||||||
|
|
||||||
|
|
||||||
|
def _run_on_all_enabled_modules_wrapper():
|
||||||
|
"""Wrapper over actual task to catch exceptions."""
|
||||||
|
try:
|
||||||
|
run_on_all_enabled_modules()
|
||||||
|
except Exception as exception:
|
||||||
|
logger.exception('Error running diagnostics - %s', exception)
|
||||||
|
current_results['error'] = str(exception)
|
||||||
|
|
||||||
|
global running_task
|
||||||
|
running_task = None
|
||||||
|
|
||||||
|
|
||||||
|
def run_on_all_enabled_modules():
|
||||||
|
"""Run diagnostics on all the enabled modules and store the result."""
|
||||||
|
global current_results
|
||||||
|
current_results = {
|
||||||
|
'apps': [],
|
||||||
|
'results': collections.OrderedDict(),
|
||||||
|
'progress_percentage': 0
|
||||||
|
}
|
||||||
|
|
||||||
|
apps = []
|
||||||
|
for app in app_module.App.list():
|
||||||
|
# XXX: Implement more cleanly.
|
||||||
|
# Don't run diagnostics on apps have not been setup yet.
|
||||||
|
# However, run on apps that need an upgrade.
|
||||||
|
module = importlib.import_module(app.__class__.__module__)
|
||||||
|
if module.setup_helper.get_state() == 'needs-setup':
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not app.is_enabled():
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not app.has_diagnostics():
|
||||||
|
continue
|
||||||
|
|
||||||
|
apps.append((app.app_id, app))
|
||||||
|
current_results['results'][app.app_id] = None
|
||||||
|
|
||||||
|
current_results['apps'] = apps
|
||||||
|
for current_index, (app_id, app) in enumerate(apps):
|
||||||
|
current_results['results'][app_id] = app.diagnose()
|
||||||
|
current_results['progress_percentage'] = \
|
||||||
|
int((current_index + 1) * 100 / len(apps))
|
||||||
|
|||||||
@ -1,108 +0,0 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
"""
|
|
||||||
FreedomBox app for running diagnostics.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import collections
|
|
||||||
import importlib
|
|
||||||
import logging
|
|
||||||
import threading
|
|
||||||
|
|
||||||
from django.http import Http404
|
|
||||||
from django.template.response import TemplateResponse
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from django.views.decorators.http import require_POST
|
|
||||||
|
|
||||||
from plinth.app import App
|
|
||||||
from plinth.modules import diagnostics
|
|
||||||
|
|
||||||
logger = logging.Logger(__name__)
|
|
||||||
|
|
||||||
current_results = {}
|
|
||||||
|
|
||||||
_running_task = None
|
|
||||||
|
|
||||||
|
|
||||||
def index(request):
|
|
||||||
"""Serve the index page"""
|
|
||||||
if request.method == 'POST' and not _running_task:
|
|
||||||
_start_task()
|
|
||||||
|
|
||||||
return TemplateResponse(
|
|
||||||
request, 'diagnostics.html', {
|
|
||||||
'app_info': diagnostics.app.info,
|
|
||||||
'is_running': _running_task is not None,
|
|
||||||
'results': current_results
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
@require_POST
|
|
||||||
def diagnose_app(request, app_id):
|
|
||||||
"""Return diagnostics for a particular app."""
|
|
||||||
try:
|
|
||||||
app = App.get(app_id)
|
|
||||||
except KeyError:
|
|
||||||
raise Http404('App does not exist')
|
|
||||||
|
|
||||||
return TemplateResponse(request, 'diagnostics_app.html', {
|
|
||||||
'title': _('Diagnostic Test'),
|
|
||||||
'app_id': app_id,
|
|
||||||
'results': app.diagnose()
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
def _start_task():
|
|
||||||
"""Start the run task in a separate thread."""
|
|
||||||
global _running_task
|
|
||||||
if _running_task:
|
|
||||||
raise Exception('Task already running')
|
|
||||||
|
|
||||||
_running_task = threading.Thread(
|
|
||||||
target=_run_on_all_enabled_modules_wrapper)
|
|
||||||
_running_task.start()
|
|
||||||
|
|
||||||
|
|
||||||
def _run_on_all_enabled_modules_wrapper():
|
|
||||||
"""Wrapper over actual task to catch exceptions."""
|
|
||||||
try:
|
|
||||||
run_on_all_enabled_modules()
|
|
||||||
except Exception as exception:
|
|
||||||
logger.exception('Error running diagnostics - %s', exception)
|
|
||||||
current_results['error'] = str(exception)
|
|
||||||
|
|
||||||
global _running_task
|
|
||||||
_running_task = None
|
|
||||||
|
|
||||||
|
|
||||||
def run_on_all_enabled_modules():
|
|
||||||
"""Run diagnostics on all the enabled modules and store the result."""
|
|
||||||
global current_results
|
|
||||||
current_results = {
|
|
||||||
'apps': [],
|
|
||||||
'results': collections.OrderedDict(),
|
|
||||||
'progress_percentage': 0
|
|
||||||
}
|
|
||||||
|
|
||||||
apps = []
|
|
||||||
for app in App.list():
|
|
||||||
# XXX: Implement more cleanly.
|
|
||||||
# Don't run diagnostics on apps have not been setup yet.
|
|
||||||
# However, run on apps that need an upgrade.
|
|
||||||
module = importlib.import_module(app.__class__.__module__)
|
|
||||||
if module.setup_helper.get_state() == 'needs-setup':
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not app.is_enabled():
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not app.has_diagnostics():
|
|
||||||
continue
|
|
||||||
|
|
||||||
apps.append((app.app_id, app))
|
|
||||||
current_results['results'][app.app_id] = None
|
|
||||||
|
|
||||||
current_results['apps'] = apps
|
|
||||||
for current_index, (app_id, app) in enumerate(apps):
|
|
||||||
current_results['results'][app_id] = app.diagnose()
|
|
||||||
current_results['progress_percentage'] = \
|
|
||||||
int((current_index + 1) * 100 / len(apps))
|
|
||||||
@ -5,7 +5,7 @@ URLs for the Diagnostics module
|
|||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from . import diagnostics as views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^sys/diagnostics/$', views.index, name='index'),
|
url(r'^sys/diagnostics/$', views.index, name='index'),
|
||||||
|
|||||||
40
plinth/modules/diagnostics/views.py
Normal file
40
plinth/modules/diagnostics/views.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""
|
||||||
|
FreedomBox app for running diagnostics.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.http import Http404
|
||||||
|
from django.template.response import TemplateResponse
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.views.decorators.http import require_POST
|
||||||
|
|
||||||
|
from plinth.app import App
|
||||||
|
from plinth.modules import diagnostics
|
||||||
|
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
"""Serve the index page"""
|
||||||
|
if request.method == 'POST' and not diagnostics.running_task:
|
||||||
|
diagnostics.start_task()
|
||||||
|
|
||||||
|
return TemplateResponse(
|
||||||
|
request, 'diagnostics.html', {
|
||||||
|
'app_info': diagnostics.app.info,
|
||||||
|
'is_running': diagnostics.running_task is not None,
|
||||||
|
'results': diagnostics.current_results
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@require_POST
|
||||||
|
def diagnose_app(request, app_id):
|
||||||
|
"""Return diagnostics for a particular app."""
|
||||||
|
try:
|
||||||
|
app = App.get(app_id)
|
||||||
|
except KeyError:
|
||||||
|
raise Http404('App does not exist')
|
||||||
|
|
||||||
|
return TemplateResponse(request, 'diagnostics_app.html', {
|
||||||
|
'title': _('Diagnostic Test'),
|
||||||
|
'app_id': app_id,
|
||||||
|
'results': app.diagnose()
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user