# ***************************************************************************** # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 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 General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Module authors: # Markus Zolliker # # ***************************************************************************** import os from os.path import expanduser from configparser import ConfigParser from servicemanager.base import ServiceManager class SingleManager(ServiceManager): """service to be started with systemd, only one per computer running as systemd (user level) """ def systemd_service(self, service): """return the name of the systemd service""" raise NotImplementedError def treat_args(self, argdict, unknown=(), extra=()): if not argdict.get('ins'): argdict['ins'] = self.single_ins return super().treat_args(argdict, unknown, extra) def systemd_action(self, service, action): service_ports = self.get_ins_info(self.single_ins) services = list(service_ports) if service is None else [service] for service in services: print(f'systemctl --user {action} {self.systemd_service(service)}') os.system(f'systemctl --user {action} {self.systemd_service(service)}') def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None, opts=''): if wait: super().do_start(ins, service, cfg, False, True, logger, opts) return if restart: action = 'restart' else: action = 'start' self.systemd_action(service, action) def do_stop(self, ins, service=None, *args): self.systemd_action(service, 'stop') class FeederManager(SingleManager): group = 'feeder' services = ('central', 'local') USAGE = """ Usage: feeder start feeder restart feeder stop feeder list [] %s """ def __init__(self): parser = ConfigParser() parser.read(expanduser('~/.config/sehistory')) services = tuple(s for s in self.services if s in parser.sections()) self.services = services super().__init__() def systemd_service(self, service): return f'{self.group}@{service}' class SewebManager(SingleManager): group = 'seweb' services = ('',) USAGE = """ Usage: seweb start seweb restart seweb stop seweb list [] %s """ def systemd_service(self, service): return f'{self.group}@{self.single_ins}'