diff --git a/__init__.py b/__init__.py index 958ffc9..e77ec4d 100644 --- a/__init__.py +++ b/__init__.py @@ -31,8 +31,7 @@ from servicemanager.base import ServiceManager, ServiceDown, UsageError, get_con from servicemanager.nicosman import NicosManager from servicemanager.seaman import SeaManager from servicemanager.frappyman import FrappyManager, Reconnect, Keep -from servicemanager.sewebman import SewebManager -from servicemanager.feederman import FeederManager +from servicemanager.single import SewebManager, FeederManager #from servicemanager.racks import RackConfig diff --git a/cfg/feeder@.service b/cfg/feeder@.service new file mode 100644 index 0000000..f04b194 --- /dev/null +++ b/cfg/feeder@.service @@ -0,0 +1,11 @@ +[Unit] +Description=sehistory feeder process + +[Service] +Type=simple +WorkingDirectory=/home/l_samenv/sehistory +ExecStart=/usr/bin/python feeder.py -d %i +Restart=always + +[Install] +WantedBy=default.target diff --git a/cfg/servicemanager.cfg b/cfg/servicemanager.cfg index 4cff355..1afc377 100644 --- a/cfg/servicemanager.cfg +++ b/cfg/servicemanager.cfg @@ -19,11 +19,11 @@ sea_command = ./SeaServer %(serv)s.tcl SEWEB_ROOT = ~/seweb SEWEB_PORT = 8941 -seweb_command = ~/sevenv/bin/python secop-webserver %(port)s +seweb_command = ~/sevenv/bin/python secop-webserver %(port)s -i %(ins)s FEEDER_ROOT = ~/sehistory FEEDER_PORT = 0 -feeder_command = ~/sevenv/bin/python feeder.py %(serv)s +feeder_command = ~/sevenv/bin/python feeder.py -d %(serv)s PYTHONPATH = ~:~/frappy diff --git a/cfg/seweb@.service b/cfg/seweb@.service new file mode 100644 index 0000000..ac4fe9d --- /dev/null +++ b/cfg/seweb@.service @@ -0,0 +1,11 @@ +[Unit] +Description=SE web server + +[Service] +Type=simple +WorkingDirectory=/home/l_samenv/seweb +ExecStart=/usr/bin/python secop-webserver -i %i +Restart=always + +[Install] +WantedBy=default.target diff --git a/sewebman.py b/sewebman.py deleted file mode 100644 index fbeeb4f..0000000 --- a/sewebman.py +++ /dev/null @@ -1,38 +0,0 @@ -# ***************************************************************************** -# -# 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 -# -# ***************************************************************************** - -from servicemanager.base import ServiceManager - - -class SewebManager(ServiceManager): - group = 'seweb' - services = ('',) - USAGE = """ - Usage: - - seweb start - seweb restart - seweb stop - seweb list [] - - %s - """ - diff --git a/feederman.py b/single.py similarity index 53% rename from feederman.py rename to single.py index d68a35e..8c57455 100644 --- a/feederman.py +++ b/single.py @@ -19,12 +19,49 @@ # # ***************************************************************************** +import os from os.path import expanduser from configparser import ConfigParser from servicemanager.base import ServiceManager -class FeederManager(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.group}@{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, 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 = """ @@ -45,7 +82,23 @@ class FeederManager(ServiceManager): self.services = services super().__init__() - 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_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}'