Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 08:39:01

0001 import logging
0002 import os
0003 import signal
0004 import sys
0005 
0006 from pandaserver.config import daemon_config
0007 from pandaserver.daemons.utils import END_SIGNALS, DaemonMaster
0008 
0009 
0010 # get the logger
0011 def get_logger():
0012     my_logger = logging.getLogger("PanDA-Daemon-Master")
0013     # remove existing handlers
0014     while my_logger.hasHandlers():
0015         my_logger.removeHandler(my_logger.handlers[0])
0016     # make new handler
0017     _log_handler = logging.StreamHandler(sys.stdout)
0018     _log_formatter = logging.Formatter("%(asctime)s %(name)-12s: %(levelname)-8s %(message)s")
0019     _log_handler.setFormatter(_log_formatter)
0020     # add new handler
0021     my_logger.addHandler(_log_handler)
0022     # debug log level
0023     my_logger.setLevel(logging.DEBUG)
0024     # return logger
0025     return my_logger
0026 
0027 
0028 # kill the whole process group
0029 def kill_whole():
0030     os.killpg(os.getpgrp(), signal.SIGKILL)
0031 
0032 
0033 # main function
0034 def main():
0035     # whether to run daemons
0036     if not getattr(daemon_config, "enable", False):
0037         return
0038 
0039     # get logger
0040     main_log = get_logger()
0041 
0042     n_workers = getattr(daemon_config, "n_proc", 1)
0043     n_dbconn = getattr(daemon_config, "n_dbconn", 1)
0044     worker_lifetime = getattr(daemon_config, "proc_lifetime", 28800)
0045     use_tbif = getattr(daemon_config, "use_tbif", False)
0046 
0047     main_log.info("main start")
0048 
0049     # get logger inside daemon context
0050     tmp_log = get_logger()
0051 
0052     # master object
0053     master = DaemonMaster(
0054         logger=tmp_log,
0055         n_workers=n_workers,
0056         n_dbconn=n_dbconn,
0057         worker_lifetime=worker_lifetime,
0058         use_tbif=use_tbif,
0059     )
0060 
0061     # function to end master when end signal caught
0062     def end_master(sig, frame):
0063         tmp_log.info(f"got end signal: {sig}")
0064         master.stop()
0065         kill_whole()
0066 
0067     # set signal handler
0068     for sig in END_SIGNALS:
0069         signal.signal(sig, end_master)
0070 
0071     # start master
0072     master.run()
0073 
0074     main_log.info("main end")
0075 
0076 
0077 # run
0078 if __name__ == "__main__":
0079     main()