diff --git a/actions/help b/actions/help new file mode 100755 index 000000000..b4ff0556f --- /dev/null +++ b/actions/help @@ -0,0 +1,55 @@ +#!/usr/bin/python3 +# +# This file is part of FreedomBox. +# +# 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 . +# +""" +Actions for help module. +""" + +import argparse +import subprocess + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + subparsers.add_parser('get-logs', help='Get latest FreedomBox logs') + + subparsers.required = True + return parser.parse_args() + + +def subcommand_get_logs(_): + """Get latest FreedomBox logs.""" + command = ['journalctl', '--no-pager', '-n', '100', '-u', 'plinth'] + process = subprocess.run(command, stdout=subprocess.PIPE, check=True) + data = process.stdout.decode() + print(data) + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff --git a/plinth/modules/help/help.py b/plinth/modules/help/help.py index 1c10920a4..99eb73e48 100644 --- a/plinth/modules/help/help.py +++ b/plinth/modules/help/help.py @@ -20,7 +20,6 @@ Help app for FreedomBox. import mimetypes import os -import subprocess from apt.cache import Cache from django.core.files.base import File @@ -29,7 +28,7 @@ from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy -from plinth import __version__, cfg +from plinth import __version__, actions, cfg from plinth.menu import main_menu @@ -105,15 +104,8 @@ def download_manual(request): def status_log(request): """Serve the last 100 lines of plinth's status log""" - num_lines = 100 - command = [ - 'journalctl', '--no-pager', '-n', - str(num_lines), '-u', 'plinth' - ] - process = subprocess.run(command, stdout=subprocess.PIPE, check=True) - data = process.stdout.decode() - - context = {'num_lines': num_lines, 'data': data} + output = actions.superuser_run('help', ['get-logs']) + context = {'num_lines': 100, 'data': output} return TemplateResponse(request, 'statuslog.html', context)