diff --git a/supervisorvms/supervisord.py b/supervisorvms/supervisord.py index 4479c7dd2219373173beba41733c02c96b848af2_c3VwZXJ2aXNvcnZtcy9zdXBlcnZpc29yZC5weQ==..bbc34a7795e4ca8acebca18b775875b9bab71196_c3VwZXJ2aXNvcnZtcy9zdXBlcnZpc29yZC5weQ== 100644 --- a/supervisorvms/supervisord.py +++ b/supervisorvms/supervisord.py @@ -35,5 +35,5 @@ from ovms.rtl import lib logger: logging.Logger -logger = logging.getLogger('supervisord') +logger = logging.getLogger("supervisord") @@ -39,3 +39,3 @@ -supervisord_table_name = b'SUPERVISORD_TABLE' +supervisord_table_name = b"SUPERVISORD_TABLE" current_tick: int = 0 @@ -41,3 +41,3 @@ current_tick: int = 0 -timer_queue: queue.PriorityQueue['PrioritizedItem'] = queue.PriorityQueue() +timer_queue: queue.PriorityQueue["PrioritizedItem"] = queue.PriorityQueue() @@ -43,3 +43,3 @@ -supervisorctl_pwd = '' +supervisorctl_pwd = "" @@ -45,4 +45,4 @@ -TRUTHY_STRINGS = ('yes', 'true', 'on', '1') -FALSY_STRINGS = ('no', 'false', 'off', '0') +TRUTHY_STRINGS = ("yes", "true", "on", "1") +FALSY_STRINGS = ("no", "false", "off", "0") @@ -48,6 +48,6 @@ -timer_delay = starlet.bintim('0 0:00:01.00')[1] +timer_delay = starlet.bintim("0 0:00:01.00")[1] timer_astctx = vmsast.AstContext(vmsast.M_WAKE | vmsast.M_QUEUE) # Define a new type called "PrvMask", which is internally an `int` @@ -50,6 +50,6 @@ timer_astctx = vmsast.AstContext(vmsast.M_WAKE | vmsast.M_QUEUE) # Define a new type called "PrvMask", which is internally an `int` -PrvMask = NewType('PrvMask', int) +PrvMask = NewType("PrvMask", int) # Ditto for "PidType" @@ -55,4 +55,4 @@ # Ditto for "PidType" -PidType = NewType('PidType', int) +PidType = NewType("PidType", int) privileges: Dict[str, PrvMask] = { @@ -57,46 +57,46 @@ privileges: Dict[str, PrvMask] = { - 'NOSAME': PrvMask(0), - 'ACNT': PrvMask(prvdef.PRV_M_ACNT), - 'ALLSPOOL': PrvMask(prvdef.PRV_M_ALLSPOOL), - 'ALTPRI': PrvMask(prvdef.PRV_M_ALTPRI), - 'AUDIT': PrvMask(prvdef.PRV_M_AUDIT), - 'BUGCHK': PrvMask(prvdef.PRV_M_BUGCHK), - 'BYPASS': PrvMask(prvdef.PRV_M_BYPASS), - 'CMEXEC': PrvMask(prvdef.PRV_M_CMEXEC), - 'CMKRNL': PrvMask(prvdef.PRV_M_CMKRNL), - 'DIAGNOSE': PrvMask(prvdef.PRV_M_DIAGNOSE), - 'DOWNGRADE': PrvMask(prvdef.PRV_M_DOWNGRADE), - 'EXQUOTA': PrvMask(prvdef.PRV_M_EXQUOTA), - 'GROUP': PrvMask(prvdef.PRV_M_GROUP), - 'GRPNAM': PrvMask(prvdef.PRV_M_GRPNAM), - 'GRPPRV': PrvMask(prvdef.PRV_M_GRPPRV), - 'IMPERSONATE': PrvMask(prvdef.PRV_M_IMPERSONATE), - 'IMPORT': PrvMask(prvdef.PRV_M_IMPORT), - 'LOG_IO': PrvMask(prvdef.PRV_M_LOG_IO), - 'MOUNT': PrvMask(prvdef.PRV_M_MOUNT), - 'NETMBX': PrvMask(prvdef.PRV_M_NETMBX), - 'OPER': PrvMask(prvdef.PRV_M_OPER), - 'PFNMAP': PrvMask(prvdef.PRV_M_PFNMAP), - 'PHY_IO': PrvMask(prvdef.PRV_M_PHY_IO), - 'PRMCEB': PrvMask(prvdef.PRV_M_PRMCEB), - 'PRMGBL': PrvMask(prvdef.PRV_M_SYSGBL), - 'PRMMBX': PrvMask(prvdef.PRV_M_PRMMBX), - 'PSWAPM': PrvMask(prvdef.PRV_M_PSWAPM), - 'READALL': PrvMask(prvdef.PRV_M_READALL), - 'SECURITY': PrvMask(prvdef.PRV_M_SECURITY), - 'SETPRV': PrvMask(prvdef.PRV_M_SETPRV), - 'SHARE': PrvMask(prvdef.PRV_M_SHARE), - 'SHMEM': PrvMask(prvdef.PRV_M_SHMEM), - 'SYSGBL': PrvMask(prvdef.PRV_M_SYSGBL), - 'SYSLCK': PrvMask(prvdef.PRV_M_SYSLCK), - 'SYSNAM': PrvMask(prvdef.PRV_M_SYSNAM), - 'SYSPRV': PrvMask(prvdef.PRV_M_SYSPRV), - 'TMPMBX': PrvMask(prvdef.PRV_M_TMPMBX), - 'UPGRADE': PrvMask(prvdef.PRV_M_UPGRADE), - 'VOLPRO': PrvMask(prvdef.PRV_M_VOLPRO), - 'WORLD': PrvMask(prvdef.PRV_M_WORLD), + "NOSAME": PrvMask(0), + "ACNT": PrvMask(prvdef.PRV_M_ACNT), + "ALLSPOOL": PrvMask(prvdef.PRV_M_ALLSPOOL), + "ALTPRI": PrvMask(prvdef.PRV_M_ALTPRI), + "AUDIT": PrvMask(prvdef.PRV_M_AUDIT), + "BUGCHK": PrvMask(prvdef.PRV_M_BUGCHK), + "BYPASS": PrvMask(prvdef.PRV_M_BYPASS), + "CMEXEC": PrvMask(prvdef.PRV_M_CMEXEC), + "CMKRNL": PrvMask(prvdef.PRV_M_CMKRNL), + "DIAGNOSE": PrvMask(prvdef.PRV_M_DIAGNOSE), + "DOWNGRADE": PrvMask(prvdef.PRV_M_DOWNGRADE), + "EXQUOTA": PrvMask(prvdef.PRV_M_EXQUOTA), + "GROUP": PrvMask(prvdef.PRV_M_GROUP), + "GRPNAM": PrvMask(prvdef.PRV_M_GRPNAM), + "GRPPRV": PrvMask(prvdef.PRV_M_GRPPRV), + "IMPERSONATE": PrvMask(prvdef.PRV_M_IMPERSONATE), + "IMPORT": PrvMask(prvdef.PRV_M_IMPORT), + "LOG_IO": PrvMask(prvdef.PRV_M_LOG_IO), + "MOUNT": PrvMask(prvdef.PRV_M_MOUNT), + "NETMBX": PrvMask(prvdef.PRV_M_NETMBX), + "OPER": PrvMask(prvdef.PRV_M_OPER), + "PFNMAP": PrvMask(prvdef.PRV_M_PFNMAP), + "PHY_IO": PrvMask(prvdef.PRV_M_PHY_IO), + "PRMCEB": PrvMask(prvdef.PRV_M_PRMCEB), + "PRMGBL": PrvMask(prvdef.PRV_M_SYSGBL), + "PRMMBX": PrvMask(prvdef.PRV_M_PRMMBX), + "PSWAPM": PrvMask(prvdef.PRV_M_PSWAPM), + "READALL": PrvMask(prvdef.PRV_M_READALL), + "SECURITY": PrvMask(prvdef.PRV_M_SECURITY), + "SETPRV": PrvMask(prvdef.PRV_M_SETPRV), + "SHARE": PrvMask(prvdef.PRV_M_SHARE), + "SHMEM": PrvMask(prvdef.PRV_M_SHMEM), + "SYSGBL": PrvMask(prvdef.PRV_M_SYSGBL), + "SYSLCK": PrvMask(prvdef.PRV_M_SYSLCK), + "SYSNAM": PrvMask(prvdef.PRV_M_SYSNAM), + "SYSPRV": PrvMask(prvdef.PRV_M_SYSPRV), + "TMPMBX": PrvMask(prvdef.PRV_M_TMPMBX), + "UPGRADE": PrvMask(prvdef.PRV_M_UPGRADE), + "VOLPRO": PrvMask(prvdef.PRV_M_VOLPRO), + "WORLD": PrvMask(prvdef.PRV_M_WORLD), } quotas: Dict[str, int] = { @@ -99,21 +99,21 @@ } quotas: Dict[str, int] = { - 'ASTLM': pqldef.PQL__ASTLM, - 'BIOLM': pqldef.PQL__BIOLM, - 'BYTLM': pqldef.PQL__BYTLM, - 'CPULM': pqldef.PQL__CPULM, - 'DIOLM': pqldef.PQL__DIOLM, - 'ENQLM': pqldef.PQL__ENQLM, - 'FILLM': pqldef.PQL__FILLM, - 'JTQUOTA': pqldef.PQL__JTQUOTA, - 'PGFLQUOTA': pqldef.PQL__PGFLQUOTA, - 'PRCLM': pqldef.PQL__PRCLM, - 'TQELM': pqldef.PQL__TQELM, - 'WSDEFAULT': pqldef.PQL__WSDEFAULT, - 'WSEXTENT': pqldef.PQL__WSEXTENT, - 'WSQUOTA': pqldef.PQL__WSQUOTA, + "ASTLM": pqldef.PQL__ASTLM, + "BIOLM": pqldef.PQL__BIOLM, + "BYTLM": pqldef.PQL__BYTLM, + "CPULM": pqldef.PQL__CPULM, + "DIOLM": pqldef.PQL__DIOLM, + "ENQLM": pqldef.PQL__ENQLM, + "FILLM": pqldef.PQL__FILLM, + "JTQUOTA": pqldef.PQL__JTQUOTA, + "PGFLQUOTA": pqldef.PQL__PGFLQUOTA, + "PRCLM": pqldef.PQL__PRCLM, + "TQELM": pqldef.PQL__TQELM, + "WSDEFAULT": pqldef.PQL__WSDEFAULT, + "WSEXTENT": pqldef.PQL__WSEXTENT, + "WSQUOTA": pqldef.PQL__WSQUOTA, } @@ -133,14 +133,10 @@ def auto_restart( value: str, -) -> ( - Type[RestartUnconditionally] - | Type[RestartWhenExitUnexpected] - | Literal[False] -): +) -> Type[RestartUnconditionally] | Type[RestartWhenExitUnexpected] | Literal[False]: value = str(value.lower()) computed_value = value if value in TRUTHY_STRINGS: computed_value = RestartUnconditionally elif value in FALSY_STRINGS: computed_value = False @@ -141,10 +137,10 @@ value = str(value.lower()) computed_value = value if value in TRUTHY_STRINGS: computed_value = RestartUnconditionally elif value in FALSY_STRINGS: computed_value = False - elif value == 'unexpected': + elif value == "unexpected": computed_value = RestartWhenExitUnexpected if computed_value not in ( RestartWhenExitUnexpected, @@ -243,5 +239,5 @@ prv: PrvMask | None user: bytes process: ProcessInfo - running_processes: Dict[PidType, 'Program'] + running_processes: Dict[PidType, "Program"] running_processes = dict() @@ -247,7 +243,7 @@ running_processes = dict() - programs: Dict[str, 'Program'] + programs: Dict[str, "Program"] programs = dict() remain_startretries: int timer_item = TimerItem | None kill_request: bool autorestart: ( @@ -249,11 +245,9 @@ programs = dict() remain_startretries: int timer_item = TimerItem | None kill_request: bool autorestart: ( - Type[RestartUnconditionally] - | Type[RestartWhenExitUnexpected] - | Literal[False] + Type[RestartUnconditionally] | Type[RestartWhenExitUnexpected] | Literal[False] ) exitcodes: List[int] @@ -350,7 +344,7 @@ try: v = lib.get_logical( - self.process_name + b'_PID', + self.process_name + b"_PID", supervisord_table_name, )[1] pid = PidType(int(v, 16)) @@ -456,8 +450,8 @@ f"Can' create process {self.process_name}, error {error}" ) lib.set_logical( - self.process_name + b'_PID', + self.process_name + b"_PID", hex(pid)[2:].upper(), supervisord_table_name, ) lib.set_logical( @@ -460,9 +454,9 @@ hex(pid)[2:].upper(), supervisord_table_name, ) lib.set_logical( - self.process_name + b'_RUN', - b'1', + self.process_name + b"_RUN", + b"1", supervisord_table_name, ) @@ -478,9 +472,9 @@ ) Program.running_processes[PidType(pid)] = self lib.set_logical( - self.process_name + b'_BEG', + self.process_name + b"_BEG", str(self.process.start_time)[:19], supervisord_table_name, ) try: lib.delete_logical( @@ -482,12 +476,12 @@ str(self.process.start_time)[:19], supervisord_table_name, ) try: lib.delete_logical( - self.process_name + b'_END', + self.process_name + b"_END", supervisord_table_name, ) except OSError: pass logging.info( @@ -488,10 +482,10 @@ supervisord_table_name, ) except OSError: pass logging.info( - f'Process {self.process_name.decode()} created {hex(pid)[2:].upper()}' + f"Process {self.process_name.decode()} created {hex(pid)[2:].upper()}" ) def kill(self): @@ -536,8 +530,7 @@ # Bits 0--2 contain the severity level of the message. # Bits 3--15 contain the number of the corresponding message. # Bits 16--27 contain a number for the software component, or facility, that generated the message. - # Bits 28--31 contain internal control flags. - + # Bits 28--31 contain internal control flags. finalsts = finalsts & 0xFFFF self.process.finalsts = finalsts @@ -547,8 +540,8 @@ self.timer_item.cancel = True self.timer_item = None lib.set_logical( - self.process_name + b'_RUN', - b'0', + self.process_name + b"_RUN", + b"0", supervisord_table_name, ) lib.set_logical( @@ -552,7 +545,7 @@ supervisord_table_name, ) lib.set_logical( - self.process_name + b'_END', + self.process_name + b"_END", str(end_time)[:22], supervisord_table_name, ) @@ -561,13 +554,9 @@ self.timer_item = TimerItem(TimerItemType.PROC_BACKOFF, self) timer_queue.put( PrioritizedItem( - 5 - + current_tick - + self.startretries - - self.remain_startretries - + 1, + 5 + current_tick + self.startretries - self.remain_startretries + 1, self.timer_item, ) ) else: self.process.state = ( @@ -569,11 +558,9 @@ self.timer_item, ) ) else: self.process.state = ( - ProcessStates.STOPPED - if self.kill_request - else ProcessStates.EXITED + ProcessStates.STOPPED if self.kill_request else ProcessStates.EXITED ) @@ -583,7 +570,7 @@ attr=lnmdef.LNM_M_CREATE_IF, promsk=0xE000, tabnam=supervisord_table_name, - partab=b'LNM$SYSTEM_DIRECTORY', + partab=b"LNM$SYSTEM_DIRECTORY", acmode=psldef.PSL_C_SUPER, ) lib.set_logical( @@ -587,5 +574,5 @@ acmode=psldef.PSL_C_SUPER, ) lib.set_logical( - b'LNM$PERMANENT_MAILBOX', + b"LNM$PERMANENT_MAILBOX", supervisord_table_name, @@ -591,7 +578,7 @@ supervisord_table_name, - b'LNM$PROCESS_DIRECTORY', + b"LNM$PROCESS_DIRECTORY", ) def mbx_init() -> Tuple[int, int, int]: global logger @@ -593,8 +580,8 @@ ) def mbx_init() -> Tuple[int, int, int]: global logger - logger.info('Creating mailbox') + logger.info("Creating mailbox") s, chan = starlet.crembx( prmflg=1, @@ -599,6 +586,6 @@ s, chan = starlet.crembx( prmflg=1, - lognam='SUPERVISORD_MBX', + lognam="SUPERVISORD_MBX", maxmsg=accdef.ACC_K_TERMLEN, bufquo=1024 * 64, promsk=0x0000FF00, @@ -610,10 +597,10 @@ s, chancmd = starlet.crembx( prmflg=1, - lognam='SUPERVISORD_CMD', + lognam="SUPERVISORD_CMD", maxmsg=2048, bufquo=8192, promsk=0x0000FF00, acmode=psldef.PSL_C_USER, flags=cmbdef.CMB_M_READONLY, ) @@ -614,11 +601,11 @@ maxmsg=2048, bufquo=8192, promsk=0x0000FF00, acmode=psldef.PSL_C_USER, flags=cmbdef.CMB_M_READONLY, ) - logger.info(f'Mailbox created {mbxunt}') - return chan, mbxunt, chancmd # , chancmd_r + logger.info(f"Mailbox created {mbxunt}") + return chan, mbxunt, chancmd # , chancmd_r class AstParam(object): @@ -656,7 +643,7 @@ jscmd = json.dumps(cmdreply) try: fcmd_r.write( - jscmd.encode('ascii'), + jscmd.encode("ascii"), iodef.IO_M_READERCHECK | iodef.IO_M_NOW, ) except OSError: @@ -666,7 +653,7 @@ def dispatch_cmd(res: bytes): global supervisorctl_pwd jscmd = json.loads(res) - pwd = jscmd['pwd'] - jscmd['pwd'] = '*****' - fcmd_r = jscmd['mbxreply'] + pwd = jscmd["pwd"] + jscmd["pwd"] = "*****" + fcmd_r = jscmd["mbxreply"] if pwd != supervisorctl_pwd: @@ -672,5 +659,5 @@ if pwd != supervisorctl_pwd: - logging.info('Invalid password') - send_cmd_reply(fcmd_r, {'error': 'Invalid password'}) + logging.info("Invalid password") + send_cmd_reply(fcmd_r, {"error": "Invalid password"}) return @@ -675,6 +662,6 @@ return - match jscmd['cmd'].lower(): - case 'shutdown': - send_cmd_reply(fcmd_r, {'result': None}) + match jscmd["cmd"].lower(): + case "shutdown": + send_cmd_reply(fcmd_r, {"result": None}) exit(1) @@ -680,7 +667,7 @@ exit(1) - case 'start': - pgmnames = set([name.upper() for name in jscmd['programs']]) - if 'ALL' in pgmnames: + case "start": + pgmnames = set([name.upper() for name in jscmd["programs"]]) + if "ALL" in pgmnames: for pgm in Program.programs.values(): if pgm.process.state == ProcessStates.FATAL: pgm.process.state = ProcessStates.STOPPED @@ -693,13 +680,13 @@ pgm.process.state = ProcessStates.STOPPED pgm.remain_startretries = pgm.startretries + 1 pgm.create_process(False) - send_cmd_reply(fcmd_r, {'result': None}) - case 'stop': - pgmnames = set([name.upper() for name in jscmd['programs']]) - if 'ALL' in pgmnames: + send_cmd_reply(fcmd_r, {"result": None}) + case "stop": + pgmnames = set([name.upper() for name in jscmd["programs"]]) + if "ALL" in pgmnames: for pgm in Program.programs.values(): pgm.kill() else: for pgm in Program.programs.values(): if pgm.name in pgmnames: pgm.kill() @@ -700,15 +687,15 @@ for pgm in Program.programs.values(): pgm.kill() else: for pgm in Program.programs.values(): if pgm.name in pgmnames: pgm.kill() - send_cmd_reply(fcmd_r, {'result': None}) - case 'status': - pgmnames = set([name.upper() for name in jscmd['programs']]) + send_cmd_reply(fcmd_r, {"result": None}) + case "status": + pgmnames = set([name.upper() for name in jscmd["programs"]]) lst = [] for pgm in Program.programs.values(): if pgmnames and pgm.name not in pgmnames: continue lst.append( [ @@ -709,10 +696,10 @@ lst = [] for pgm in Program.programs.values(): if pgmnames and pgm.name not in pgmnames: continue lst.append( [ - pgm.process_name.decode('ascii'), + pgm.process_name.decode("ascii"), hex(pgm.process.pid)[2:].upper(), str(pgm.process.start_time)[:19], pgm.process.state, @@ -727,7 +714,7 @@ lst[-1].append(str(pgm.process.end_time)[:19]) lst[-1].append(pgm.process.finalsts) - send_cmd_reply(fcmd_r, {'result': lst}) + send_cmd_reply(fcmd_r, {"result": lst}) def dispatch_ast(astparam: AstParam): @@ -745,9 +732,9 @@ acc = accdef.ACCDEF.parse(res) print(acc) logging.info( - f'Program {pgm.name} ' - f'terminated {hex(pid)[2:].upper()}, ' - f'{acc.acc_l_finalsts & 0xEFFFFFFF}' + f"Program {pgm.name} " + f"terminated {hex(pid)[2:].upper()}, " + f"{acc.acc_l_finalsts & 0xEFFFFFFF}" ) pgm.set_terminated(acc.acc_l_finalsts, acc.acc_q_termtime) # if not stsdef.vms_status_success(acc.acc_l_finalsts): @@ -794,9 +781,7 @@ t_astctxt = qio_procterm(fterm) # noqa: F841 c_astctxt = qio_cmd(fcmd) # noqa: F841 - for pgm in sorted( - Program.programs.values(), key=lambda pgm: pgm.priority - ): + for pgm in sorted(Program.programs.values(), key=lambda pgm: pgm.priority): if pgm.autostart: pgm.create_process(False) @@ -807,8 +792,8 @@ while True: ret_ast_context: vmsast.AstContext - ret_ast_context = vmsast.get_completed(True) # type:ignore - astparam = ret_ast_context.param # type: ignore + ret_ast_context = vmsast.get_completed(True) # type:ignore + astparam = ret_ast_context.param # type: ignore iosb = astparam.iosb if iosb and iosb.iosb_w_status == ssdef.SS__ENDOFFILE: if astparam.ptype == AstParamType.PROCTERM: @@ -834,7 +819,7 @@ def is_deamon() -> bool: try: pid = lib.get_logical( - b'SUPERVISORD' + b'_PID', + b"SUPERVISORD" + b"_PID", supervisord_table_name, )[1] cpid = lib.getjpi(jpidef.JPI__PID)[3] @@ -848,7 +833,7 @@ def daemon_is_running() -> bool: try: v = lib.get_logical( - b'SUPERVISORD' + b'_PID', + b"SUPERVISORD" + b"_PID", supervisord_table_name, )[1] pid = int(v, 16) @@ -877,6 +862,6 @@ pid = PidType( starlet.creprc( - image=b'SYS$SYSTEM:LOGINOUT.EXE', + image=b"SYS$SYSTEM:LOGINOUT.EXE", input=comdaemon.encode(), output=stdout_file.encode(), @@ -881,9 +866,9 @@ input=comdaemon.encode(), output=stdout_file.encode(), - prcnam=b'SUPERVISORD', + prcnam=b"SUPERVISORD", kt_limit=1, baspri=4, stsflg=stsflg, )[1] ) lib.set_logical( @@ -884,10 +869,10 @@ kt_limit=1, baspri=4, stsflg=stsflg, )[1] ) lib.set_logical( - b'SUPERVISORD' + b'_PID', + b"SUPERVISORD" + b"_PID", hex(pid)[2:].upper(), supervisord_table_name, ) @@ -917,5 +902,5 @@ | prvdef.PRV_M_WORLD, ) - parser = argparse.ArgumentParser(description='supervisord') + parser = argparse.ArgumentParser(description="supervisord") parser.add_argument( @@ -921,8 +906,8 @@ parser.add_argument( - '-c', - '--configuration', - type=argparse.FileType('r', encoding='latin1'), - default='./supervisord.conf', - help='Configuration file path (default ./supervisord.conf)', + "-c", + "--configuration", + type=argparse.FileType("r", encoding="latin1"), + default="./supervisord.conf", + help="Configuration file path (default ./supervisord.conf)", ) parser.add_argument( @@ -927,6 +912,6 @@ ) parser.add_argument( - '-p', - '--password', + "-p", + "--password", required=False, type=str, @@ -931,6 +916,6 @@ required=False, type=str, - default='', - help='Password for supervisord', + default="", + help="Password for supervisord", ) parser.add_argument( @@ -935,9 +920,9 @@ ) parser.add_argument( - '-n', - '--nodaemon', - action='store_true', - help='Run supervisord in the foreground', + "-n", + "--nodaemon", + action="store_true", + help="Run supervisord in the foreground", ) args = parser.parse_args() supervisorctl_pwd = args.password @@ -946,8 +931,6 @@ config.read_file(args.configuration) args.configuration.close() - nodaemon = ( - config['supervisord'].getboolean('nodaemon', False) or args.nodaemon - ) + nodaemon = config["supervisord"].getboolean("nodaemon", False) or args.nodaemon logicals_init() if not nodaemon and not is_deamon(): @@ -952,7 +935,7 @@ logicals_init() if not nodaemon and not is_deamon(): - usrdaemon = config['supervisord'].get('user', 'system') - stdout_file = config['supervisord'].get('stdout_file', 'NLA0:') - comdaemon = config['supervisord']['command'] + usrdaemon = config["supervisord"].get("user", "system") + stdout_file = config["supervisord"].get("stdout_file", "NLA0:") + comdaemon = config["supervisord"]["command"] pid = daemonize(usrdaemon, comdaemon, stdout_file) if pid is None: @@ -957,4 +940,4 @@ pid = daemonize(usrdaemon, comdaemon, stdout_file) if pid is None: - print('Unable to start supervisord daemon') + print("Unable to start supervisord daemon") else: @@ -960,4 +943,4 @@ else: - print(f'Daemon started {hex(pid)[2:].upper()}') + print(f"Daemon started {hex(pid)[2:].upper()}") exit(0) @@ -962,4 +945,4 @@ exit(0) - logfile = config['supervisord'].get('logfile', 'supervisord.log') + logfile = config["supervisord"].get("logfile", "supervisord.log") @@ -965,10 +948,8 @@ - logging_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' - logging.basicConfig( - filename='/dev/null', level=logging.INFO, format=logging_format - ) + logging_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + logging.basicConfig(filename="/dev/null", level=logging.INFO, format=logging_format) formatter = logging.Formatter(logging_format) main_log = logging.getLogger() # root handler main_log.setLevel(logging.INFO) logfn = crtl.from_vms(logfile) if logfn is None: @@ -970,8 +951,8 @@ formatter = logging.Formatter(logging_format) main_log = logging.getLogger() # root handler main_log.setLevel(logging.INFO) logfn = crtl.from_vms(logfile) if logfn is None: - print(f'{repr(logfile)} is invalid') + print(f"{repr(logfile)} is invalid") crtl.vms_exit(ssdef.SS__INVARG) handler = logging.handlers.TimedRotatingFileHandler( @@ -976,8 +957,8 @@ crtl.vms_exit(ssdef.SS__INVARG) handler = logging.handlers.TimedRotatingFileHandler( - logfn, 'midnight', backupCount=10 + logfn, "midnight", backupCount=10 ) handler.setFormatter(formatter) main_log.addHandler(handler) for sn in config.sections(): @@ -979,7 +960,7 @@ ) handler.setFormatter(formatter) main_log.addHandler(handler) for sn in config.sections(): - if sn.startswith('program:'): + if sn.startswith("program:"): quotaslst = [ @@ -985,8 +966,8 @@ quotaslst = [ - quota.strip().upper().split('=') - for quota in config[sn].get('quotas', '').split(',') - if quota != '' + quota.strip().upper().split("=") + for quota in config[sn].get("quotas", "").split(",") + if quota != "" ] prcquotas = [] for quotan, quotav in quotaslst: if quotan not in quotas: @@ -989,6 +970,6 @@ ] prcquotas = [] for quotan, quotav in quotaslst: if quotan not in quotas: - print(f'{sn}: {quotan}={quotav} not a valid quota') + print(f"{sn}: {quotan}={quotav} not a valid quota") crtl.vms_exit(ssdef.SS__INVARG) @@ -994,5 +975,5 @@ crtl.vms_exit(ssdef.SS__INVARG) - if quotan == 'CPULM': + if quotan == "CPULM": quotav = int(quotav) * 100 prcquotas.append((quotas[quotan], int(quotav))) if prcquotas == []: @@ -1000,10 +981,10 @@ prvnames = [ name.strip().upper() - for name in config[sn].get('privileges', '').split(',') - if name != '' + for name in config[sn].get("privileges", "").split(",") + if name != "" ] prv: PrvMask | None prv = None for prvnam in prvnames: if prvnam not in privileges: @@ -1005,9 +986,9 @@ ] prv: PrvMask | None prv = None for prvnam in prvnames: if prvnam not in privileges: - print(f'{sn}: {prvnam} not a valid privilege') + print(f"{sn}: {prvnam} not a valid privilege") crtl.vms_exit(ssdef.SS__INVARG) prv = ( privileges[prvnam] @@ -1015,25 +996,23 @@ else PrvMask(prv | privileges[prvnam]) ) - name = sn.split(':')[-1].upper() - process_name = config[sn].get('process_name', name) - autostart = config[sn].getboolean('autostart', True) - command = config[sn].get('command', 'NLA0:') - image = config[sn].get('image', 'SYS$SYSTEM:LOGINOUT.EXE') - stdout_file = config[sn].get('stdout_file', 'NLA0:') - stderr_file = config[sn].get('stderr_file', 'NLA0:') - priority = config[sn].getint('priority', 999) - baspri = config[sn].getint('baspri', 4) - nouaf = config[sn].getboolean('nouaf', False) - kt_limit = config[sn].getint('kt_limit', 0) - startsecs = config[sn].getint('startsecs', 10) - startretries = config[sn].getint('startretries', 3) - stopwaitsecs = config[sn].getint('stopwaitsescs', 10) - autorestart = auto_restart( - config[sn].get('autorestart', 'unexpected') - ) - exitcodes = config[sn].get('exitcodes', '1').split(',') - user = config[sn]['user'] + name = sn.split(":")[-1].upper() + process_name = config[sn].get("process_name", name) + autostart = config[sn].getboolean("autostart", True) + command = config[sn].get("command", "NLA0:") + image = config[sn].get("image", "SYS$SYSTEM:LOGINOUT.EXE") + stdout_file = config[sn].get("stdout_file", "NLA0:") + stderr_file = config[sn].get("stderr_file", "NLA0:") + priority = config[sn].getint("priority", 999) + baspri = config[sn].getint("baspri", 4) + nouaf = config[sn].getboolean("nouaf", False) + kt_limit = config[sn].getint("kt_limit", 0) + startsecs = config[sn].getint("startsecs", 10) + startretries = config[sn].getint("startretries", 3) + stopwaitsecs = config[sn].getint("stopwaitsescs", 10) + autorestart = auto_restart(config[sn].get("autorestart", "unexpected")) + exitcodes = config[sn].get("exitcodes", "1").split(",") + user = config[sn]["user"] if prv is not None or quotaslst is not None: nouaf = True p = Program( @@ -1055,9 +1034,7 @@ prv=prv, baspri=baspri, kt_limit=kt_limit, - exitcodes=[ - int(exitcode) for exitcode in exitcodes if exitcode != '' - ], + exitcodes=[int(exitcode) for exitcode in exitcodes if exitcode != ""], ) Program.programs[name] = p @@ -1065,5 +1042,5 @@ run(chan, chancmd) -if __name__ == '__main__': +if __name__ == "__main__": main()