# 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')