6 from zmq_daq.utils import get_monitor_table, show_monitoring, write_monitoring
12 def yaml_settings(yaml_file):
13 with open(yaml_file,
"r")
as f:
17 def command_load(args):
18 execution = CleanBasf2Execution()
20 for app
in args.settings_file[
"programs"]:
25 except KeyboardInterrupt:
29 def command_monitor(args):
31 sockets = get_sockets(args.settings_file)
34 if not args.watch
and not args.dat:
35 df = get_monitor_table(sockets, show_detail=args.show_detail)
41 f = open(args.dat,
"wb")
47 df = get_monitor_table(sockets, show_detail=args.show_detail)
52 write_monitoring(df, f)
60 def command_start(args):
61 sockets = get_sockets(args.settings_file)
62 for socket
in sockets.values():
63 socket.send_multipart([b
"n", b
"", b
""])
66 def command_input_file(args):
67 execution = CleanBasf2Execution()
69 input_port = args.settings_file[
"input"]
72 remaining_args += [
"--raw"]
74 remaining_args += [
"--repeat"]
75 execution.start([
"b2hlt_file2socket", args.data_file, str(input_port)] + remaining_args)
79 except KeyboardInterrupt:
83 def command_stop(args):
84 sockets = get_sockets(args.settings_file)
85 sockets[
"distributor"].send_multipart([b
"l", b
"", b
""])
88 for socket
in sockets.keys():
89 if socket ==
"distributor":
92 sockets[socket].send_multipart([b
"l", b
"", b
""])
95 def command_terminate(args):
96 sockets = get_sockets(args.settings_file)
97 sockets[
"distributor"].send_multipart([b
"x", b
"", b
""])
100 for socket
in sockets.keys():
101 if socket ==
"distributor":
104 sockets[socket].send_multipart([b
"x", b
"", b
""])
107 if __name__ ==
'__main__':
108 parser = argparse.ArgumentParser(description=
"""Try out different modes for the ZMQ HLT.
109 By choosing the settings_file, the different modes can be chosen.
110 Together with the settings file, a command needs to be chosen.
111 Typically, this will be "load" in one console and "input_file" in a different console.
112 You can then monitor the process either with the "monitor" command
113 or by using "b2hlt_monitor.py".
116 parser.add_argument(
"settings_file", type=yaml_settings,
117 help=
"Which config file to load for the test")
119 subparsers = parser.add_subparsers(help=
"Choose the command", dest=
"command")
120 subparsers.required =
True
122 subparser = subparsers.add_parser(
"load")
123 subparser.set_defaults(func=command_load)
125 subparser = subparsers.add_parser(
"monitor")
126 subparser.add_argument(
129 help=
"By default, some information are omitted. With this flag, all details are shown (can be very long output).")
130 subparser.add_argument(
"--watch", action=
"store_true", help=
"Enter watch mode, where the script is called every 1 second.")
131 subparser.add_argument(
"--dat", help=
"Write out the results of the monitoring periodically into a dat file. " +
132 "If not combined with --watch, the output will not be shown.")
133 subparser.set_defaults(func=command_monitor)
135 subparser = subparsers.add_parser(
"send_stop")
136 subparser.add_argument(
"--all", action=
"store_true", help=
"Send the signal to all processes")
137 subparser.set_defaults(func=command_stop)
139 subparser = subparsers.add_parser(
"send_terminate")
140 subparser.add_argument(
"--all", action=
"store_true", help=
"Send the signal to all processes")
141 subparser.set_defaults(func=command_terminate)
143 subparser = subparsers.add_parser(
"send_start")
144 subparser.set_defaults(func=command_start)
146 subparser = subparsers.add_parser(
"input_file")
147 subparser.add_argument(
"data_file", help=
"Which data file to send")
148 subparser.add_argument(
"--raw", help=
"send and receive raw data instead of event buffers", action=
"store_true")
149 subparser.add_argument(
"--repeat", help=
"repeat after the file is finished", action=
"store_true")
150 subparser.set_defaults(func=command_input_file)
152 args = parser.parse_args()