# -*- 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 [] seaweb start seaweb restart seaweb stop 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))