DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
DAQModuleManager.hpp
Go to the documentation of this file.
1
9#ifndef APPFWK_SRC_DAQMODULEMANAGER_HPP_
10#define APPFWK_SRC_DAQMODULEMANAGER_HPP_
11
12#include "ers/Issue.hpp"
13#include "nlohmann/json.hpp"
14
18
20#include "logging/Logging.hpp" // NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
22
23#include <map>
24#include <memory>
25#include <string>
26#include <vector>
27
28namespace dunedaq {
29
30// Disable coverage collection LCOV_EXCL_START
32 DAQModuleManagerNotInitialized,
33 "Command " << cmdid << " received before initialization",
34 ((std::string)cmdid))
35
38 "\"init\" Command received when already initialized",
40
42 CommandDispatchingFailed,
43 "Command " << cmdid << " was not executed correctly by: " << modules,
44 ((std::string)cmdid)((std::string)modules))
45
48 "Command " << cmdid << " matches multiple times modules: " << modules,
49 ((std::string)cmdid)((std::string)modules))
50
51ERS_DECLARE_ISSUE(appfwk, FailedInfoGathering, "Info gathering failed for module: " << module, ((std::string)module))
52
54 ExceptionWhileInfoGathering,
55 FailedInfoGathering,
56 module << " threw exception while info gathering: " << message,
57 ((std::string)module),
58 ((std::string)message))
59
61 ActionPlanNotFound,
62 "No action plan found for command " << cmd << ", taking the following action: " << message,
63 ((std::string)cmd)((std::string)message))
64
65// Re-enable coverage collection LCOV_EXCL_STOP
66
67namespace appfwk {
68
69class DAQModule;
70
71class DAQModuleManager
72{
73public:
74 using dataobj_t = nlohmann::json;
75
76 explicit DAQModuleManager(const std::string& session_name);
77
78 void initialize(std::shared_ptr<ConfigurationManager> mgr, opmonlib::OpMonManager&);
79 bool initialized() const { return m_initialized; }
80 void cleanup();
81
82 // Execute a properly structured command
83 void execute(const std::string& cmd, const dataobj_t& cmd_data);
84
85private:
86 typedef std::map<std::string, std::shared_ptr<DAQModule>> DAQModuleMap_t;
87
88 void init_modules(const std::vector<const dunedaq::confmodel::DaqModule*>& modules, opmonlib::OpMonManager&);
89
90 void check_cmd_data(const std::string& id, const dataobj_t& cmd_data);
91 dataobj_t get_dataobj_for_module(const std::string& mod_name, const dataobj_t& cmd_data);
92 bool execute_action(const std::string& mod_name, const std::string& action, const dataobj_t& data_obj);
93 void execute_action_plan_step(const std::string& cmd,
95 const dataobj_t& cmd_data,
96 bool execution_mode_is_serial);
97
98 void check_mod_has_cmd(const std::string& cmd, const std::string& mod_class, const std::string& mod_id = "");
99
100 std::vector<std::string> get_modnames_by_cmdid(cmdlib::cmd::CmdId id);
101 std::shared_ptr<ConfigurationManager> m_configuration_mgr;
102
103 std::string m_session_name;
104 bool m_initialized;
105
106 DAQModuleMap_t m_module_map;
107 std::map<std::string, std::vector<std::string>> m_modules_by_type;
108};
109
110} // namespace appfwk
111} // namespace dunedaq
112
113#endif // APPFWK_SRC_DAQMODULEMANAGER_HPP_
#define ERS_DECLARE_ISSUE_BASE(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)
#define ERS_EMPTY
conffwk entry point
caught dunedaq::conffwk::Exception exception
std::string CmdId
Definition Structs.hpp:21
Including Qt Headers.
Unsupported std::string uri Execution of command failed
Definition Issues.hpp:69
init Command received when already initialized
LED calibration failed to initialize
Definition SSPIssues.hpp:22
DAQModuleManagerAlreadyInitialized
init Command received when already ERS_EMPTY ConflictingCommandMatching