def set_logger(self) -> None: """Sets global logger for stdout and file logging. Changes logger aquired by LOGGER_NAME. Raises: ValueError: Unable to open logger """ self.log_path = SppUtils.filename_of_config(OPTIONS.confFileJSON, ".log") try: file_handler = logging.FileHandler(self.log_path) except Exception as error: # TODO here: Right exception, how to print this error? print("unable to open logger") raise ValueError("Unable to open Logger") from error file_handler_fmt = logging.Formatter( '%(asctime)s:[PID %(process)d]:%(levelname)s:%(module)s.%(funcName)s> %(message)s' ) file_handler.setFormatter(file_handler_fmt) if (OPTIONS.debug): file_handler.setLevel(logging.DEBUG) else: file_handler.setLevel(logging.ERROR) stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.INFO) logger = logging.getLogger(LOGGER_NAME) logger.setLevel(logging.DEBUG) logger.addHandler(file_handler) logger.addHandler(stream_handler)
def check_pid_file(self) -> bool: if (OPTIONS.verbose): LOGGER.info("Checking for other SPPMon instances") self.pid_file_path = SppUtils.filename_of_config( OPTIONS.confFileJSON, ".pid_file") try: try: file = open(self.pid_file_path, "rt") match_list = re.findall(r"(\d+) " + str(OPTIONS), file.read()) file.close() deleted_processes: List[str] = [] for match in match_list: # add spaces to make clear the whole number is matched match = f' {match} ' try: if (os.name == 'nt'): args = ['ps', '-W'] else: args = ['ps', '-p', match] result = subprocess.run(args, check=True, capture_output=True) if (re.search(match, str(result.stdout))): return False # not in there -> delete entry deleted_processes.append(match) except CalledProcessError as error: deleted_processes.append(match) # delete processes which did get killed, not often called if (deleted_processes): file = open(self.pid_file_path, "rt") file_str = file.read() file.close() options = str(OPTIONS) for pid in deleted_processes: file_str = file_str.replace(f"{pid} {options}", "") # do not delete if empty since we will use it below file = open(self.pid_file_path, "wt") file.write(file_str.strip()) file.close() except FileNotFoundError: pass # no file created yet # always write your own pid into it file = open(self.pid_file_path, "at") file.write(f"{os.getpid()} {str(OPTIONS)}") file.close() return True except Exception as error: ExceptionUtils.exception_info(error) raise ValueError("Error when checking pid file")