27Application::Application(std::string app_name,
28 std::string session_name,
29 std::string cmdlibimpl,
31 std::string configuration_id)
32 : ConfigurationManagerOwner(confimpl, app_name, configuration_id)
33 , OpMonManager(session_name, app_name, get_config_manager()->
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()->
session()->get_connectivity_service());
48 set_opmon_conf(get_config_manager()->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);
76Application::execute(
const dataobj_t& cmd_data)
78 auto rc_cmd = cmd_data.get<rcif::cmd::RCCommand>();
79 std::string cmdname = rc_cmd.id;
80 if (!check_state_for_cmd(cmd_data)) {
86 if (cmdname ==
"start") {
87 auto cmd_obj = rc_cmd.data.get<cmd::CmdObj>();
89 for (
const auto& addressed : cmd_obj.modules) {
90 dataobj_t startpars = addressed.data;
91 auto rc_startpars = startpars.get<rcif::cmd::StartParams>();
92 m_runinfo.set_run_number(rc_startpars.run);
96 m_run_start_time = std::chrono::steady_clock::now();
97 m_runinfo.set_running(
true);
98 m_runinfo.set_run_time(0);
99 }
else if (cmdname ==
"stop") {
100 m_run_start_time = std::chrono::steady_clock::time_point();
101 m_runinfo.set_running(
false);
102 m_runinfo.set_run_number(0);
103 m_runinfo.set_run_time(0);
107 m_mod_mgr.execute(cmdname, rc_cmd.data);
109 if (rc_cmd.exit_state !=
"ANY")
110 set_state(rc_cmd.exit_state);
119Application::generate_opmon_data()
122 ai.set_state(get_state());
123 ai.set_busy(m_busy.load());
124 ai.set_error(m_error.load());
127 auto res = gethostname(hostname, 256);
129 ai.set_host(
"Unknown");
131 ai.set_host(std::string(hostname));
133 publish(std::move(ai), {}, opmonlib::to_level(opmonlib::EntryOpMonLevel::kTopPriority));
135 if (m_run_start_time.time_since_epoch().count() != 0) {
136 auto now = std::chrono::steady_clock::now();
137 m_runinfo.set_run_time(std::chrono::duration_cast<std::chrono::seconds>(
now - m_run_start_time).count());
140 publish(
decltype(m_runinfo)(m_runinfo));
144Application::check_state_for_cmd(
const dataobj_t& cmd_data)
const
146 if (m_busy.load() || m_error.load())
149 std::string entry_state = cmd_data.get<rcif::cmd::RCCommand>().entry_state;
150 if (entry_state ==
"ANY" || get_state() == entry_state)
Base class for any user define issue.