3 @ingroup daq_metadaqifsim
4 @copyright 2021 ESO - European Southern Observatory
11 import elt.pymal
as pymal
13 from ModDaqsimif.Daqsimif.SimCtl
import SimCtlSyncService
15 from .
import __version__
16 from .
import simulator
20 """Load MAL mapping based on the first three characters of the uri
22 @param malSpecificProperties map of properties to use to initialize mapping
23 @return reference to mal.CiiFactory instance
24 @throw RuntimeError when mapping could not be loaded
30 mal = pymal.loadMal(malName, malSpecificProperties)
31 factory = pymal.CiiFactory.getInstance()
32 factory.registerMal(scheme, mal)
37 """Main entrypoint for simulator
39 logger = logging.getLogger(
"metadaqsim")
41 parser = argparse.ArgumentParser()
45 version=
"%(prog)s " "{version}".format(version=__version__),
46 help=
"print version number and exit",
53 help=
"set the verbosity level: -v INFO, -vv DEBUG",
57 help=
"server process name/id",
61 help=
"server URI where simulator will accept requests, without the service path",
65 main_args, _ = parser.parse_known_args()
66 verbose = main_args.verbose
67 level = logging.WARNING
73 if main_args.verbose > 0
and False:
74 chdlr = logging.StreamHandler()
76 chdlr.setFormatter(logging.Formatter(
"%(levelname)s: %(message)s"))
79 logging.Formatter(
"%(name)s: %(levelname)s: %(message)s")
82 logging.getLogger().addHandler(chdlr)
84 logging.basicConfig(level=level, format=
"%(levelname)s: %(message)s")
85 logger.info(
"Started metadaqsim %s", __version__)
91 logger.info(
"Creating server mal")
92 with factory.createServer(uri, pymal.rr.qos.DEFAULT, {})
as server:
94 def shutdown(signum, frame):
95 logger.info(
"Closing server due to signal %d", signum)
98 signal.signal(signal.SIGINT, shutdown)
99 signal.signal(signal.SIGTERM, shutdown)
104 logger.info(
"Registering service 'simctl' on %s", uri)
105 server.registerService(
"simctl", SimCtlSyncService, sim_ctl)
107 logger.info(
"Running server...")
114 thr = threading.Thread(target=run, daemon=
True)
117 logger.info(
"Server done.")
120 logging.exception(
"Exception")
123 logging.exception(
"Exception")