mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +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 argparse
|
||||||
|
import fileinput
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service'
|
import augeas
|
||||||
SYSTEMD_SERVICE = '''
|
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
|
# 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.
|
# it, disable Deluge in Plinth, remove this file and manage it manually.
|
||||||
@ -69,12 +77,61 @@ def parse_arguments():
|
|||||||
return parser.parse_args()
|
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(_):
|
def subcommand_setup(_):
|
||||||
"""Perform initial setup for deluge-web."""
|
"""Perform initial setup for deluge."""
|
||||||
with open(SYSTEMD_SERVICE_PATH, 'w') as file_handle:
|
|
||||||
file_handle.write(SYSTEMD_SERVICE)
|
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'])
|
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():
|
def main():
|
||||||
|
|||||||
@ -346,22 +346,6 @@ def _deluge_open_connection_manager(browser):
|
|||||||
eventually(lambda: _deluge_get_active_window_title(browser) == title)
|
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):
|
def _deluge_ensure_connected(browser):
|
||||||
"""Type the connection password if required and start Deluge daemon."""
|
"""Type the connection password if required and start Deluge daemon."""
|
||||||
_deluge_ensure_logged_in(browser)
|
_deluge_ensure_logged_in(browser)
|
||||||
@ -370,17 +354,6 @@ def _deluge_ensure_connected(browser):
|
|||||||
if _deluge_get_active_window_title(browser) == 'Change Default Password':
|
if _deluge_get_active_window_title(browser) == 'Change Default Password':
|
||||||
_deluge_click_active_window_button(browser, 'No')
|
_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,
|
assert eventually(browser.is_element_not_present_by_css,
|
||||||
args=['#add.x-item-disabled'])
|
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
|
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']
|
managed_packages = ['deluged', 'deluge-web']
|
||||||
|
|
||||||
@ -71,11 +71,10 @@ class DelugeApp(app_module.App):
|
|||||||
'deluge:index', parent_url_name='apps')
|
'deluge:index', parent_url_name='apps')
|
||||||
self.add(menu_item)
|
self.add(menu_item)
|
||||||
|
|
||||||
shortcut = frontpage.Shortcut('shortcut-deluge', name,
|
shortcut = frontpage.Shortcut(
|
||||||
short_description=short_description,
|
'shortcut-deluge', name, short_description=short_description,
|
||||||
url='/deluge', icon=icon_filename,
|
url='/deluge', icon=icon_filename, clients=clients,
|
||||||
clients=clients, login_required=True,
|
login_required=True, allowed_groups=[group[0]])
|
||||||
allowed_groups=[group[0]])
|
|
||||||
self.add(shortcut)
|
self.add(shortcut)
|
||||||
|
|
||||||
firewall = Firewall('firewall-deluge', name, ports=['http', 'https'],
|
firewall = Firewall('firewall-deluge', name, ports=['http', 'https'],
|
||||||
@ -86,10 +85,14 @@ class DelugeApp(app_module.App):
|
|||||||
urls=['https://{host}/deluge'])
|
urls=['https://{host}/deluge'])
|
||||||
self.add(webserver)
|
self.add(webserver)
|
||||||
|
|
||||||
daemon = Daemon('daemon-deluge', managed_services[0],
|
daemon = Daemon('daemon-deluged', managed_services[0],
|
||||||
listen_ports=[(8112, 'tcp4')])
|
listen_ports=[(58846, 'tcp4')])
|
||||||
self.add(daemon)
|
self.add(daemon)
|
||||||
|
|
||||||
|
daemon_web = Daemon('daemon-deluge-web', managed_services[1],
|
||||||
|
listen_ports=[(8112, 'tcp4')])
|
||||||
|
self.add(daemon_web)
|
||||||
|
|
||||||
|
|
||||||
def init():
|
def init():
|
||||||
"""Initialize the Deluge module."""
|
"""Initialize the Deluge module."""
|
||||||
|
|||||||
@ -31,7 +31,7 @@ clients = validate([{
|
|||||||
|
|
||||||
backup = validate_backup({
|
backup = validate_backup({
|
||||||
'config': {
|
'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