# HG changeset patch # User jfp <jf.pieronne@laposte.net> # Date 1683644482 -7200 # Tue May 09 17:01:22 2023 +0200 # Node ID ff9bc7b1e6ce2f0808c9031941979c63b0926d9c # Parent 6c736ee87d45cec66fa7f645640cc563412f44bc supervisorctl check programs name, password argument for supervisord (not in configuration file) diff --git a/supervisorctl.py b/supervisorctl.py --- a/supervisorctl.py +++ b/supervisorctl.py @@ -1,12 +1,14 @@ import argparse import cmd +import configparser import json -from typing import Tuple, Any +from typing import Any, Tuple, Set from ovms import cmbdef, iodef, mbxqio, psldef, starlet supervisorctl_pwd = '' - +# programs_name: Set[str] = set(('ALL',)) +programs_name: Set[str] = set() def pstat2str(s: int) -> str: dstate = { @@ -63,10 +65,17 @@ return res = self.write_cmd({'cmd': 'shutdown'}) print(res) + # return True def do_status(self, arg): """Display status of programs""" + global programs_name lst = arg.split() + for name in lst: + name = name.upper() + if name not in programs_name: + print(f'Invalid program name {name}') + return jscmd = self.write_cmd({'cmd': 'status', 'programs': lst}) if 'error' in jscmd: print(jscmd['error']) @@ -76,18 +85,32 @@ print(pinfo) def do_start(self, arg): + global programs_name lst = arg.split() if len(lst) < 1: print('*** invalid number of arguments') return + lst = [name.upper() for name in lst] + if lst != ['ALL',]: + for name in lst: + if name not in programs_name: + print(f'Invalid program name {name}') + return res = self.write_cmd({'cmd': 'start', 'programs': lst}) print(res) def do_stop(self, arg): + global programs_name lst = arg.split() if len(lst) < 1: print('*** invalid number of arguments') return + lst = [name.upper() for name in lst] + if lst != ['ALL',]: + for name in lst: + if name not in programs_name: + print(f'Invalid program name {name}') + return res = self.write_cmd({'cmd': 'stop', 'programs': lst}) print(res) @@ -136,18 +159,34 @@ def main(): - global supervisorctl_pwd + global supervisorctl_pwd, programs_name parser = argparse.ArgumentParser(description='supervisorctl') parser.add_argument( '-p', '--password', required=False, - # type=str, + type=str, default='', help='password for supervisord', ) + parser.add_argument( + '-c', + '--configuration', + type=argparse.FileType('r', encoding='latin1'), + default='./supervisord.conf', + help='Configuration file path (default ./supervisord.conf)', + ) args, unknownargs = parser.parse_known_args() supervisorctl_pwd = args.password + config = configparser.ConfigParser() + config.read_file(args.configuration) + args.configuration.close() + + for sn in config.sections(): + if sn.startswith('program:'): + name = sn.split(':')[-1].upper() + programs_name.add(name) + chan, chan_r = mbx_init() with ( mbxqio.MBXQIO(channel=chan) as mcmd, diff --git a/supervisord.conf_template b/supervisord.conf_template --- a/supervisord.conf_template +++ b/supervisord.conf_template @@ -1,5 +1,3 @@ -[openvms] -password=xxxxxx [program:firstpgm] command=dev:[dir]PGM1.COM process_name=PGM1D diff --git a/supervisord.py b/supervisord.py --- a/supervisord.py +++ b/supervisord.py @@ -510,13 +510,13 @@ pid = iosb.iosb_r_devdepend.iosb_r_bcnt_16.iosb_l_dev_depend try: pgm = Program.running_processes[pid] + acc = accdef.ACCDEF.parse(res) + print(acc) logging.info( f'Program {pgm.name} ' f'terminated {hex(pid)[2:].upper()}, ' - f'{len(res)}' + f'{acc.acc_l_finalsts}' ) - acc = accdef.ACCDEF.parse(res) - print(acc) pgm.set_terminated(acc.acc_l_finalsts, acc.acc_q_termtime) if not stsdef.vms_status_success(acc.acc_l_finalsts): pgm.create_process() @@ -626,14 +626,21 @@ default='./supervisord.conf', help='Configuration file path (default ./supervisord.conf)', ) + parser.add_argument( + '-p', + '--password', + required=False, + type=str, + default='', + help='password for supervisord', + ) args = parser.parse_args() + supervisorctl_pwd = args.password config = configparser.ConfigParser() config.read_file(args.configuration) args.configuration.close() - supervisorctl_pwd = config['openvms'].get('password', '') - for sn in config.sections(): if sn.startswith('program:'): name = sn.split(':')[-1].upper() @@ -668,5 +675,3 @@ if __name__ == '__main__': main() -# rename x.x;v into x.x;1 -# os.replace('x.x', 'x.x')