41):
42 """
43 Here an entire application is generated.
44 """
45
46
47 modules = []
48
49 modules += [
50 DAQModule(
51 name=f"rdlg{gidx}",
52 plugin="RandomDataListGenerator",
53 conf=rlg.ConfParams(send_timeout_ms=n_wait_ms, request_timeout_ms=request_timeout_ms, generator_id=gidx),
54 ) for gidx in generator_indicies
55 ]
56
57 modules += [
58 DAQModule(
59 name=f"lr{ridx}",
60 plugin="ListReverser",
61 conf=lr.ConfParams(
62 send_timeout_ms=n_wait_ms,
63 request_timeout_ms=request_timeout_ms,
64 num_generators=n_generators,
65 reverser_id=ridx
66 ),
67 ) for ridx in reverser_indicies
68 ]
69
70 if has_validator:
71 modules += [
72 DAQModule(
73 name="lrv",
74 plugin="ReversedListValidator",
75 conf=rlv.ConfParams(
76 send_timeout_ms=n_wait_ms,
77 request_timeout_ms=request_timeout_ms,
78 request_rate_hz=request_rate_hz,
79 max_outstanding_requests=n_reqs,
80 num_reversers=n_reversers,
81 num_generators=n_generators,
82 min_list_size=n_ints_min,
83 max_list_size=n_ints_max
84 ),
85 )
86 ]
87
88 mgraph = ModuleGraph(modules)
89
90 for gidx in generator_indicies:
91 for ridx in range(n_reversers):
92 mgraph.add_endpoint(f"lr{ridx}_list_connection", f"rdlg{gidx}.q{ridx}", "IntList", Direction.OUT)
93 mgraph.add_endpoint(
94 f"rdlg{gidx}_request_connection",
95 f"rdlg{gidx}.request_input",
96 "RequestList",
97 Direction.IN
98 )
99 mgraph.add_endpoint(f"creates", f"rdlg{gidx}.create_input", "CreateList", Direction.IN, is_pubsub=True, toposort=False)
100
101 for ridx in reverser_indicies:
102 mgraph.add_endpoint(f"lr{ridx}_list_connection", f"lr{ridx}.list_input", "IntList", Direction.IN)
103 mgraph.add_endpoint(f"validator_list_connection", f"lr{ridx}.output", "ReversedList", Direction.OUT)
104 mgraph.add_endpoint(
105 f"lr{ridx}_request_connection",
106 f"lr{ridx}.request_input",
107 "RequestList",
108 Direction.IN
109 )
110
111 for gidx in range(n_generators):
112 mgraph.add_endpoint(f"rdlg{gidx}_request_connection", f"lr{ridx}.request_output_{gidx}", "RequestList", Direction.OUT)
113
114 if has_validator:
115 mgraph.add_endpoint("validator_list_connection", "lrv.list_input", "ReversedList", Direction.IN)
116 for ridx in range(n_reversers):
117 mgraph.add_endpoint(
118 f"lr{ridx}_request_connection",
119 f"lrv.request_output_{ridx}",
120 "RequestList",
121 Direction.OUT
122 )
123 mgraph.add_endpoint(f"creates", "lrv.creates_out", "CreateList", Direction.OUT, is_pubsub=True, toposort=False)
124
125 lr_app = App(modulegraph=mgraph, host=host, name=nickname)
126
127 return lr_app