mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
deluge: Manage starting/stoping deluged
- run deluged daemon with default configuration location - deluge-web: autoconnect to the deluged daemon - functional tests: assert deluge-web is connected to the deluged daemon Signed-off-by: Veiko Aasa <veiko17@disroot.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
7d2c57bbf5
commit
ff27f1d21b
@ -20,10 +20,18 @@ Configuration helper for BitTorrent web client.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import fileinput
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service'
|
||||
SYSTEMD_SERVICE = '''
|
||||
import augeas
|
||||
from plinth import action_utils
|
||||
|
||||
DELUGED_DEFAULT_FILE = '/etc/default/deluged'
|
||||
DELUGE_WEB_CONFIG_FILE = '/var/lib/deluged/.config/deluge/web.conf'
|
||||
|
||||
DELUGE_WEB_SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service'
|
||||
DELUGE_WEB_SYSTEMD_SERVICE = '''
|
||||
#
|
||||
# This file is managed and overwritten by Plinth. If you wish to edit
|
||||
# it, disable Deluge in Plinth, remove this file and manage it manually.
|
||||
@ -69,12 +77,61 @@ def parse_arguments():
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def _set_configuration(filename, parameter, value):
|
||||
"""Set the configuration parameter."""
|
||||
deluged_is_running = action_utils.service_is_running('deluged')
|
||||
if deluged_is_running:
|
||||
action_utils.service_stop('deluged')
|
||||
deluge_web_is_running = action_utils.service_is_running('deluge-web')
|
||||
if deluge_web_is_running:
|
||||
action_utils.service_stop('deluge-web')
|
||||
|
||||
for line in fileinput.FileInput(filename, inplace=True):
|
||||
if '"{0}"'.format(parameter) in line:
|
||||
print(' "{0}": "{1}", '.format(parameter, value))
|
||||
else:
|
||||
print(line, end='')
|
||||
|
||||
if deluged_is_running:
|
||||
action_utils.service_start('deluged')
|
||||
if deluge_web_is_running:
|
||||
action_utils.service_start('deluge-web')
|
||||
|
||||
|
||||
def _set_deluged_daemon_options():
|
||||
"""Set deluged daemon options."""
|
||||
aug = augeas.Augeas(
|
||||
flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.set('/augeas/load/Shellvars/lens', 'Shellvars.lns')
|
||||
aug.set('/augeas/load/Shellvars/incl[last() + 1]', DELUGED_DEFAULT_FILE)
|
||||
aug.load()
|
||||
aug.set('/files' + DELUGED_DEFAULT_FILE + '/ENABLE_DELUGED', '1')
|
||||
# overwrite daemon args, use default config directory (same as deluge-web)
|
||||
aug.set('/files' + DELUGED_DEFAULT_FILE + '/DAEMON_ARGS',
|
||||
'"-d -l /var/log/deluged/daemon.log -L info"')
|
||||
aug.save()
|
||||
|
||||
|
||||
def subcommand_setup(_):
|
||||
"""Perform initial setup for deluge-web."""
|
||||
with open(SYSTEMD_SERVICE_PATH, 'w') as file_handle:
|
||||
file_handle.write(SYSTEMD_SERVICE)
|
||||
"""Perform initial setup for deluge."""
|
||||
|
||||
with open(DELUGE_WEB_SYSTEMD_SERVICE_PATH, 'w') as file_handle:
|
||||
file_handle.write(DELUGE_WEB_SYSTEMD_SERVICE)
|
||||
|
||||
_set_deluged_daemon_options()
|
||||
|
||||
subprocess.check_call(['systemctl', 'daemon-reload'])
|
||||
# restarting deluge-web service stops also possible deluged process
|
||||
# that was started from the web interface
|
||||
action_utils.service_restart('deluge-web')
|
||||
action_utils.service_restart('deluged')
|
||||
# wait processes to start
|
||||
time.sleep(5)
|
||||
|
||||
# configure deluge-web to autoconnect to the default deluged daemon, also
|
||||
# restarts deluged and deluge-web services again to create config files
|
||||
_set_configuration(DELUGE_WEB_CONFIG_FILE, 'default_daemon',
|
||||
'127.0.0.1:58846')
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@ -346,22 +346,6 @@ def _deluge_open_connection_manager(browser):
|
||||
eventually(lambda: _deluge_get_active_window_title(browser) == title)
|
||||
|
||||
|
||||
def _deluge_ensure_daemon_started(browser):
|
||||
"""Start the deluge daemon if it is not started."""
|
||||
_deluge_open_connection_manager(browser)
|
||||
|
||||
browser.find_by_xpath(
|
||||
'//em[contains(text(),"127.0.0.1:58846")]').first.click()
|
||||
|
||||
if browser.is_element_present_by_xpath('//button[text()="Stop Daemon"]'):
|
||||
return
|
||||
|
||||
browser.find_by_xpath('//button[text()="Start Daemon"]').first.click()
|
||||
|
||||
assert eventually(browser.is_element_present_by_xpath,
|
||||
args=['//button[text()="Stop Daemon"]'])
|
||||
|
||||
|
||||
def _deluge_ensure_connected(browser):
|
||||
"""Type the connection password if required and start Deluge daemon."""
|
||||
_deluge_ensure_logged_in(browser)
|
||||
@ -370,17 +354,6 @@ def _deluge_ensure_connected(browser):
|
||||
if _deluge_get_active_window_title(browser) == 'Change Default Password':
|
||||
_deluge_click_active_window_button(browser, 'No')
|
||||
|
||||
# If the add button is enabled, we are already connected
|
||||
if not browser.is_element_present_by_css('#add.x-item-disabled'):
|
||||
return
|
||||
|
||||
_deluge_ensure_daemon_started(browser)
|
||||
|
||||
if browser.is_element_present_by_xpath('//button[text()="Disconnect"]'):
|
||||
_deluge_click_active_window_button(browser, 'Close')
|
||||
else:
|
||||
_deluge_click_active_window_button(browser, 'Connect')
|
||||
|
||||
assert eventually(browser.is_element_not_present_by_css,
|
||||
args=['#add.x-item-disabled'])
|
||||
|
||||
|
||||
@ -30,9 +30,9 @@ from plinth.modules.users import register_group
|
||||
|
||||
from .manifest import backup, clients # noqa, pylint: disable=unused-import
|
||||
|
||||
version = 4
|
||||
version = 5
|
||||
|
||||
managed_services = ['deluge-web']
|
||||
managed_services = ['deluged', 'deluge-web']
|
||||
|
||||
managed_packages = ['deluged', 'deluge-web']
|
||||
|
||||
@ -71,11 +71,10 @@ class DelugeApp(app_module.App):
|
||||
'deluge:index', parent_url_name='apps')
|
||||
self.add(menu_item)
|
||||
|
||||
shortcut = frontpage.Shortcut('shortcut-deluge', name,
|
||||
short_description=short_description,
|
||||
url='/deluge', icon=icon_filename,
|
||||
clients=clients, login_required=True,
|
||||
allowed_groups=[group[0]])
|
||||
shortcut = frontpage.Shortcut(
|
||||
'shortcut-deluge', name, short_description=short_description,
|
||||
url='/deluge', icon=icon_filename, clients=clients,
|
||||
login_required=True, allowed_groups=[group[0]])
|
||||
self.add(shortcut)
|
||||
|
||||
firewall = Firewall('firewall-deluge', name, ports=['http', 'https'],
|
||||
@ -86,10 +85,14 @@ class DelugeApp(app_module.App):
|
||||
urls=['https://{host}/deluge'])
|
||||
self.add(webserver)
|
||||
|
||||
daemon = Daemon('daemon-deluge', managed_services[0],
|
||||
listen_ports=[(8112, 'tcp4')])
|
||||
daemon = Daemon('daemon-deluged', managed_services[0],
|
||||
listen_ports=[(58846, 'tcp4')])
|
||||
self.add(daemon)
|
||||
|
||||
daemon_web = Daemon('daemon-deluge-web', managed_services[1],
|
||||
listen_ports=[(8112, 'tcp4')])
|
||||
self.add(daemon_web)
|
||||
|
||||
|
||||
def init():
|
||||
"""Initialize the Deluge module."""
|
||||
|
||||
@ -31,7 +31,7 @@ clients = validate([{
|
||||
|
||||
backup = validate_backup({
|
||||
'config': {
|
||||
'directories': ['/var/lib/deluged/.config', '/var/lib/deluged/config']
|
||||
'directories': ['/var/lib/deluged/.config']
|
||||
},
|
||||
'services': ['deluge-web']
|
||||
'services': ['deluged', 'deluge-web']
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user