# -*- 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 # # ***************************************************************************** """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 seaweb restart seaweb stop %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) args = {} guessed_args = [] extra = [] arg_is = { 'action': lambda arg: hasattr(serv, 'do_' + arg), 'ins': lambda arg: arg in serv.info or arg == 'all' or serv.wildcard(arg), 'service': lambda arg: arg in serv.services, } for kind in 'action', 'ins', 'service': if arglist and arg_is[kind](arglist[0]): # arg is of expected kind args[kind] = arglist.pop(0) continue if guessed_args and guessed_args[-1][0] == kind: # last arg was skipped args[kind] = guessed_args.pop()[1] continue if not arglist: break arg = arglist.pop(0) for kind, is_kind in arg_is.items(): if is_kind(arg): guessed_args.append((kind, arg)) break else: extra.append(arg) args.update(guessed_args) args.setdefault('action', 'gui') if serv.main_ins: args.setdefault('ins', serv.main_ins) if guessed_args: args.setdefault('action', 'gui') 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 + arglist)) except AttributeError: raise except UsageError as e: serv.do_help() print('ERROR:', str(e))