3 @ingroup daq_recififsim
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(
"recifsim")
40 parser = argparse.ArgumentParser()
44 version=
"%(prog)s " "{version}".format(version=__version__),
45 help=
"print version number and exit",
52 help=
"set the verbosity level: -v INFO, -vv DEBUG",
56 help=
"server process name/id",
60 help=
"server URI where simulator will accept requests, without the service path",
64 main_args, _ = parser.parse_known_args()
65 verbose = main_args.verbose
66 level = logging.WARNING
72 if main_args.verbose > 0
and False:
73 chdlr = logging.StreamHandler()
75 chdlr.setFormatter(logging.Formatter(
"%(levelname)s: %(message)s"))
78 logging.Formatter(
"%(name)s: %(levelname)s: %(message)s")
81 logging.getLogger().addHandler(chdlr)
83 logging.basicConfig(level=level, format=
"%(levelname)s: %(message)s")
84 logger.info(
"Started recifsim %s", __version__)
90 logger.info(
"Creating server mal")
91 with factory.createServer(uri, pymal.rr.qos.DEFAULT, {})
as server:
93 def shutdown(signum, frame):
94 logger.info(
"Closing server due to signal %d", signum)
97 signal.signal(signal.SIGINT, shutdown)
98 signal.signal(signal.SIGTERM, shutdown)
103 logger.info(
"Registering service 'simctl' on %s", uri)
104 server.registerService(
"simctl", SimCtlSyncService, sim_ctl)
106 logger.info(
"Running server...")
113 thr = threading.Thread(target=run, daemon=
True)
116 logger.info(
"Server done.")
119 logging.exception(
"Exception")
122 logging.exception(
"Exception")