27Application::Application(std::string app_name,
28 std::string session_name,
29 std::string cmdlibimpl,
31 std::string configuration_id)
33 , OpMonManager(session_name, app_name, get_config_manager()->
get_session()->get_opmon_uri()->get_URI(app_name))
34 , NamedObject(app_name)
35 , m_mod_mgr(session_name)
39 , m_initialized(false)
41 m_runinfo.set_running(
false);
42 m_runinfo.set_run_number(0);
43 m_runinfo.set_run_time(0);
45 m_cmd_fac = cmdlib::make_command_facility(
46 cmdlibimpl, session_name, get_config_manager()->
get_session()->get_connectivity_service());
48 set_opmon_conf(get_config_manager()->get_application()->get_opmon_conf());
50 TLOG() <<
"confimpl=<" << confimpl <<
">\n";
56 m_cmd_fac->set_commanded(*
this, get_name());
57 m_mod_mgr.initialize(get_config_manager(), *
this);
63Application::run(std::atomic<bool>& end_marker)
66 throw ApplicationNotInitialized(
ERS_HERE, get_name());
70 m_cmd_fac->run(end_marker);
78Application::execute(
const dataobj_t& cmd_data)
80 auto rc_cmd = cmd_data.get<rcif::cmd::RCCommand>();
81 std::string cmdname = rc_cmd.id;
82 if (!check_state_for_cmd(cmd_data)) {
88 if (cmdname ==
"start") {
89 auto cmd_obj = rc_cmd.data.get<cmd::CmdObj>();
91 for (
const auto& addressed : cmd_obj.modules) {
92 dataobj_t startpars = addressed.data;
93 auto rc_startpars = startpars.get<rcif::cmd::StartParams>();
94 m_runinfo.set_run_number(rc_startpars.run);
98 m_run_start_time = std::chrono::steady_clock::now();
99 m_runinfo.set_running(
true);
100 m_runinfo.set_run_time(0);
101 }
else if (cmdname ==
"stop") {
102 m_run_start_time = std::chrono::steady_clock::time_point();
103 m_runinfo.set_running(
false);
104 m_runinfo.set_run_number(0);
105 m_runinfo.set_run_time(0);
109 m_mod_mgr.execute(cmdname,
static_cast<DAQModule::CommandData_t
>(rc_cmd.data));
111 if (rc_cmd.exit_state !=
"ANY")
112 set_state(rc_cmd.exit_state);
123Application::generate_opmon_data()
129Application::check_state_for_cmd(
const dataobj_t& cmd_data)
const
131 if (m_busy.load() || m_error.load())
134 std::string entry_state = cmd_data.get<rcif::cmd::RCCommand>().entry_state;
135 if (entry_state ==
"ANY" || get_state() == entry_state)
142Application::publish_app_info() {
145 ai.set_state(get_state());
146 ai.set_busy(m_busy.load());
147 ai.set_error(m_error.load());
150 auto res = gethostname(hostname, 256);
152 ai.set_host(
"Unknown");
154 ai.set_host(std::string(hostname));
156 publish(std::move(ai), {}, opmonlib::to_level(opmonlib::EntryOpMonLevel::kTopPriority));
158 if (m_run_start_time.time_since_epoch().count() != 0) {
159 auto now = std::chrono::steady_clock::now();
160 m_runinfo.set_run_time(std::chrono::duration_cast<std::chrono::seconds>(
now - m_run_start_time).count());
163 publish(
decltype(m_runinfo)(m_runinfo));
Base class for any user define issue.
const dunedaq::confmodel::Session * get_session(dunedaq::conffwk::Configuration &conf, const std::string &name, unsigned long rlevel=10, const std::vector< std::string > *rclasses=nullptr)
Get session object.