Line data Source code
1 : /**
2 : * @file gen_readout_modules.cxx
3 : *
4 : * Quick test/demonstration of ReadoutApplication's dal method
5 : *
6 : * This is part of the DUNE DAQ Application Framework, copyright 2020.
7 : * Licensing/copyright details are in the COPYING file that you should have
8 : * received with this code.
9 : */
10 :
11 : #include "logging/Logging.hpp"
12 :
13 : #include "conffwk/Configuration.hpp"
14 :
15 : #include "confmodel/Connection.hpp"
16 : #include "confmodel/DaqModule.hpp"
17 : #include "confmodel/Session.hpp"
18 :
19 : #include "appmodel/ConfigurationHelper.hpp"
20 : #include "appmodel/DFApplication.hpp"
21 : #include "appmodel/DFOApplication.hpp"
22 : #include "appmodel/MLTApplication.hpp"
23 : #include "appmodel/ReadoutApplication.hpp"
24 : #include "appmodel/SmartDaqApplication.hpp"
25 : #include "appmodel/TPReplayApplication.hpp"
26 : #include "appmodel/TPStreamWriterApplication.hpp"
27 : #include "appmodel/TriggerApplication.hpp"
28 :
29 : #include "appmodel/DataHandlerModule.hpp"
30 : #include "appmodel/DataReaderModule.hpp"
31 : #include "appmodel/DataMoveCallbackConf.hpp"
32 : #include "appmodel/SocketDataWriterModule.hpp"
33 :
34 : #include "appmodel/appmodelIssues.hpp"
35 :
36 : #include <string>
37 : using namespace dunedaq;
38 : using namespace dunedaq::appmodel;
39 :
40 : int
41 0 : main(int argc, char* argv[])
42 : {
43 0 : if (argc < 4) {
44 0 : std::cout << "Usage: " << argv[0] << " <session> <smart-app> <database-file>\n";
45 0 : return 0;
46 : }
47 :
48 0 : std::string sessionName(argv[1]);
49 0 : std::string appName(argv[2]);
50 0 : std::string dbfile(argv[3]);
51 :
52 0 : logging::Logging::setup("test", "generate_module");
53 :
54 0 : conffwk::Configuration* confdb;
55 0 : try {
56 0 : confdb = new conffwk::Configuration("oksconflibs:" + dbfile);
57 0 : } catch (conffwk::Generic& exc) {
58 0 : std::cout << "Failed to load OKS database: " << exc << std::endl;
59 0 : return 0;
60 0 : }
61 :
62 0 : auto session = confdb->get<confmodel::Session>(sessionName);
63 0 : if (session == nullptr) {
64 0 : std::cout << "Failed to get Session " << sessionName << " from database\n";
65 : return 0;
66 : }
67 0 : auto daqapp = confdb->get<appmodel::SmartDaqApplication>(appName);
68 0 : if (daqapp) {
69 0 : std::cout << appName << " is of class " << daqapp->class_name() << std::endl;
70 :
71 0 : auto res = daqapp->cast<confmodel::Resource>();
72 0 : if (res && res->is_disabled(*session)) {
73 0 : std::cout << "Application " << appName << " is disabled" << std::endl;
74 0 : return 0;
75 : }
76 :
77 0 : auto helper = std::make_shared<ConfigurationHelper>(session);
78 0 : try {
79 0 : daqapp->generate_modules(helper);
80 : }
81 0 : catch (appmodel::BadConf& exc) {
82 0 : std::cout << "Caught BadConf exception: " << exc << std::endl;
83 0 : exit(-1);
84 0 : }
85 :
86 0 : auto modules = daqapp->get_modules();
87 0 : std::cout << "Generated " << modules.size() << " modules" << std::endl;
88 0 : for (auto daq_module : modules) {
89 0 : std::cout << "module " << daq_module->UID() << std::endl;
90 0 : daq_module->config_object().print_ref(std::cout, *confdb, " ");
91 0 : std::cout << " input objects " << std::endl;
92 0 : for (auto input : daq_module->get_inputs()) {
93 0 : auto iObj = input->config_object();
94 0 : iObj.print_ref(std::cout, *confdb, " ");
95 0 : }
96 0 : std::cout << " output objects " << std::endl;
97 0 : for (auto output : daq_module->get_outputs()) {
98 0 : auto oObj = output->config_object();
99 0 : oObj.print_ref(std::cout, *confdb, " ");
100 0 : }
101 :
102 0 : auto reader_module = daq_module->cast<appmodel::DataReaderModule>();
103 0 : if (reader_module != nullptr) {
104 0 : auto callback_confs = reader_module->get_raw_data_callbacks();
105 0 : std::cout << " callback confs " << std::endl;
106 0 : for (auto* callback_conf : callback_confs) {
107 0 : auto cbObj = callback_conf->config_object();
108 0 : cbObj.print_ref(std::cout, *confdb, " ");
109 0 : }
110 0 : }
111 :
112 0 : auto handler_module = daq_module->cast<appmodel::DataHandlerModule>();
113 0 : if (handler_module != nullptr) {
114 0 : auto callback_conf = handler_module->get_raw_data_callback();
115 0 : if (callback_conf != nullptr) {
116 0 : auto cbObj = callback_conf->config_object();
117 0 : cbObj.print_ref(std::cout, *confdb, " ");
118 0 : }
119 : }
120 :
121 0 : auto socketwriter_module = daq_module->cast<appmodel::SocketDataWriterModule>();
122 0 : if (socketwriter_module != nullptr) {
123 0 : auto callback_conf = socketwriter_module->get_raw_data_callback();
124 0 : if (callback_conf != nullptr) {
125 0 : auto cbObj = callback_conf->config_object();
126 0 : cbObj.print_ref(std::cout, *confdb, " ");
127 0 : }
128 : }
129 :
130 0 : std::cout << std::endl;
131 : }
132 0 : } else {
133 0 : std::cout << "Failed to get SmartDaqApplication " << appName << " from database\n";
134 : return 0;
135 : }
136 0 : }
|