servicemanager/__init__.py
hrpt 4e58fb463f fix issues with auto detection args
+ treat develop cfg correctly
2022-04-20 16:09:37 +02:00

98 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
# *****************************************************************************
#
# 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 <markus.zolliker@psi.ch>
#
# *****************************************************************************
"""start/stop/list of services
this code is currently used:
- from NICOS to start and stop frappy servers
- from a script allowing to start/stop/list (and more) multiple frappy and nicos servers
"""
from servicemanager.base import ServiceManager, ServiceDown, UsageError, get_config
from servicemanager.nicosman import NicosManager
from servicemanager.seaman import SeaManager
from servicemanager.frappyman import FrappyManager
class SewebManager(ServiceManager):
group = 'seweb'
services = ('',)
USAGE = """
Usage:
seaweb list [<instance>]
seaweb start <instance>
seaweb restart <instance>
seaweb stop <instance>
<instance> is one of %s
"""
all = NicosManager, FrappyManager, SeaManager, SewebManager
def run(group, arglist):
try:
parser = get_config()
defaults = parser['DEFAULT']
managers = {cls.group: cls() for cls in all if cls.group + '_command' in defaults}
serv = managers[group]
args = dict(action='gui', ins=serv.main_ins)
ACTION = 1
INS = 2
SERVICE = 2 if serv.main_ins else 3
extra = []
pos = 0
unorder = False
for arg in arglist:
if hasattr(serv, 'do_' + arg):
args['action'] = arg
if pos >= ACTION:
unorder = True
pos = ACTION
elif arg in serv.services:
args['service'] = arg
if pos >= SERVICE:
unorder = True
pos = SERVICE
elif arg in serv.info or arg == 'all' or serv.wildcard(arg):
args['ins'] = arg
if pos >= INS:
unorder = True
pos = INS
else:
extra.append(arg)
if unorder:
print('do you mean:\n %s %s %s %s %s' %
(group, args.get('action', ''), args.get('ins', ''), args.get('service', ''), ' '.join(extra)))
else:
try:
serv.action(args['action'], *serv.treat_args(args, extra))
except AttributeError:
raise
except UsageError as e:
serv.do_help()
print('ERROR:', str(e))