HLCC Documentation 3.0.0
Loading...
Searching...
No Matches
config.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2020-2025 European Southern Observatory (ESO)
2//
3// SPDX-License-Identifier: LGPL-3.0-only
4
13#ifndef HLCC_TELIF_TELMON_CONFIG_HPP
14#define HLCC_TELIF_TELMON_CONFIG_HPP
15
16#include <string>
17#include <config-ng/ciiConfigApi.hpp>
18#include <rad/config.hpp>
19
20#include "telmon/logger.hpp"
21
22
23namespace hlcc::telmon {
24
25/* hlcc config error class */
26class ConfigError : public std::runtime_error {
27public:
28 explicit ConfigError(const std::string& message)
29 : std::runtime_error(message)
30 {}
31};
32
33/*
34 * Type for the Telescope named position
35 * which will assign a name to an
36 * alt/az position.
37 */
39 std::string name;
40 std::string oldb;
41 std::string stdcmds;
42 std::string pubsub;
43 bool ignore;
44};
45
47 std::string name;
49 std::vector<MonitoredApp> monitored_apps;
50};
51
52} // namespace hlcc::telmon
53
54namespace elt::configng {
55
56// Implementation of converter between hlcc::telmon::MonitoredApp and CiiConfigInstanceNode hierarchy
57// Decode method: Extract node values into hlcc::telmon::MonitoredApp
58// Encode method: construct nodes from values of hlcc::telmon::MonitoredApp
59
60
61template<>
62struct CiiConfigValueConverter<hlcc::telmon::MonitoredSubsystem, CiiConfigInstanceNode> {
63 static bool Decode(const CiiConfigInstanceNode& node, hlcc::telmon::MonitoredSubsystem &target) {
64 if (node.GetKind() != CiiConfigNodeKind::MAP || node.GetDataTypeName() != "MonitoredSubsystem") {
65 std::cerr << node.GetDataTypeName() << "Conversion to MonitoredSubsystem not possible" << std::endl;
66 return false;
67 }
68 target.name = node["name"].As<std::string>();
69 target.ignore_subsystem = node["ignore_subsystem"].As<bool>();
70 Decode(node, target.monitored_apps);
71 return true;
72 }
73
74 static bool Decode(const CiiConfigInstanceNode& node, std::vector<hlcc::telmon::MonitoredApp> &targets) {
75 if (node.GetKind() != CiiConfigNodeKind::MAP || node.GetDataTypeName() != "MonitoredSubsystem") {
76 std::cerr << "Conversion to MonitoredApp not possible" << std::endl;
77 return false;
78 }
79
80 for (size_t i = 0; i < node["monitored_apps"].GetSize(); i++ ){
81 auto temp = node["monitored_apps"].Get(i);
83
84 mon_temp.name = temp["name"].As<std::string>();
85 mon_temp.ignore = temp["ignore"].As<bool>();
86 mon_temp.oldb = temp["oldb"].As<std::string>();
87 mon_temp.pubsub = temp["pubsub"].As<std::string>();
88 mon_temp.stdcmds = temp["stdcmds"].As<std::string>();
89
90 targets.push_back(mon_temp);
91 }
92 return true;
93 }
94
95 static bool Encode(CiiConfigInstanceNode &node, const hlcc::telmon::MonitoredSubsystem &source) {
96
97 if (node.GetKind() != elt::configng::CiiConfigNodeKind::MAP) {
98 std::cerr << "Conversion from MonitoredSubsystem not possible" << std::endl;
99 return false;
100 }
101 node.Set("name" , elt::configng::CiiConfigInstanceNode::From(source.name));
102 node.Set("ignore_subsystem" , elt::configng::CiiConfigInstanceNode::From(source.ignore_subsystem));
103 Encode(node, source.monitored_apps);
104 return true;
105 }
106
107 static bool Encode(CiiConfigInstanceNode &node, const std::vector<hlcc::telmon::MonitoredApp> &source) {
108
109 if (node.GetKind() != elt::configng::CiiConfigNodeKind::MAP) {
110 std::cerr << "Conversion from MonitoredApp not possible" << std::endl;
111 return false;
112 }
113 CiiConfigInstanceNode temp_node = CiiConfigInstanceNode(CiiConfigNodeKind::MAP);
114 for (auto item : source){
115
116 temp_node.Set("name" , elt::configng::CiiConfigInstanceNode::From(item.name));
117 temp_node.Set("oldb" , elt::configng::CiiConfigInstanceNode::From(item.oldb));
118 temp_node.Set("stdcmds" , elt::configng::CiiConfigInstanceNode::From(item.stdcmds));
119 temp_node.Set("pubsub" , elt::configng::CiiConfigInstanceNode::From(item.pubsub));
120 temp_node.Set("ignore" , elt::configng::CiiConfigInstanceNode::From(item.ignore));
121 node["monitored_apps"].PushBack(temp_node.Clone());
122 }
123 return true;
124 }
125};
126}// namespace elt::configng
127namespace hlcc::telmon {
128
130// const char KEY_SEPARATOR_CFG = '.';
131// const std::string CONFIG_ROOT_NODE = "app";
132
133/* Type of the configuration parameters */
135
136/*
137 * Configuration OLDB Attributes.
138 * Note that CII OLDB convert all keys to lowercase.
139 *
140 * The following definitions are handled in rad/cpp/app/src/include/rad/config.hpp
141 * const std::string KEY_CONFIG = "cfg";
142 * const std::string KEY_CONFIG_VERSION = KEY_CONFIG + "version";
143 * const std::string KEY_CONFIG_PROCNAME = KEY_CONFIG + "procname";
144 * const std::string KEY_CONFIG_FILENAME = KEY_CONFIG + "filename";
145 * const std::string KEY_CONFIG_LOG_LEVEL = KEY_CONFIG + "log_level";
146 * const std::string KEY_CONFIG_LOG_PROPERTIES = KEY_CONFIG + "log_properties";
147 * const std::string KEY_CONFIG_SM_SCXML = KEY_CONFIG + "sm_scxml";
148 * const std::string KEY_CONFIG_SM_APPEND = KEY_CONFIG + "sm_scxml_append";
149 * const std::string KEY_CONFIG_REQ_ENDPOINT = KEY_CONFIG + "req_endpoint";
150 * const std::string KEY_CONFIG_OLDB_URI_PREFIX = KEY_CONFIG + "oldb_uri_prefix";
151 * const std::string KEY_CONFIG_OLDB_CONN_TIMEOUT = KEY_CONFIG + "oldb_conn_timeout";
152 * const std::string KEY_CONFIG_OLDB_ASYNC_PERIOD = KEY_CONFIG + "oldb_async_period";
153 * const std::string KEY_CONFIG_TRS_HEALTH_ENABLED = KEY_CONFIG + "trs_health_enabled";
154 */
155const std::string KEY_CONFIG = rad::KEY_CONFIG;
156const std::string KEY_CONFIG_PUB_DDS_PROFILE = KEY_CONFIG + "pub/dds/profile";
157const std::string KEY_CONFIG_PUB_DDS_NIC = KEY_CONFIG + "pub/dds/nic";
158const std::string KEY_CONFIG_PUB_DDS_FILE = KEY_CONFIG + "pub/dds/file";
159const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_HLCC = KEY_CONFIG + "pub/dds/domain_id_hlcc";
160const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_CCS_INS = KEY_CONFIG + "pub/dds/domain_id_ccs_ins";
161const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_GENERAL = KEY_CONFIG + "pub/dds/domain_id_general";
162const std::string KEY_CONFIG_ESTIMATION_PERIOD_MS = KEY_CONFIG + "estimation_period_ms";
163const std::string KEY_CONFIG_READYFORHANDOVER_INERTIA_MS = KEY_CONFIG + "ready_for_handover_inertia_ms";
164const std::string KEY_CONFIG_ESTIMATIONSCRIPTS = KEY_CONFIG + "estim_scripts";
165const std::string KEY_CONFIG_MONITORED_SUBSYSTEMS = KEY_CONFIG + "monitored_subsystems";
166const std::string KEY_CONFIG_NIGHT_TIME_NEEDED_SUBSYS = KEY_CONFIG + "night_time_cfg/needed_subsystems";
167const std::string KEY_CONFIG_NIGHT_TIME_NOT_NEEDED_SUBSYS = KEY_CONFIG + "night_time_cfg/not_needed_subsystems";
168const std::string KEY_CONFIG_NIGHT_TIME_NOT_NEEDED_CRITICAL_SUBSYS= KEY_CONFIG + "night_time_cfg/not_needed_critical_subsystems";
169
170/*
171 * Map containing all the configuration paramenters to be configured
172 * in the Oldb and also the type that shoudl be used to publish.
173 */
179
186
194
195
196
200const std::string CONFIG_DEFAULT_VERSION = std::string(VERSION);
201const std::string CONFIG_DEFAULT_MODNAME = "telmon";
202const std::string CONFIG_DEFAULT_PROCNAME = "telmon";
203const std::string CONFIG_DEFAULT_FILENAME = "config/telmon/definitions.yaml";
204const std::string CONFIG_DEFAULT_SCXML_FILENAME = "telmon/sm.xml";
205const std::string CONFIG_DEFAULT_SCXML_APPEND = "";
206const std::string CONFIG_DEFAULT_LOG_LEVEL = "INFO";
207const std::string CONFIG_DEFAULT_LOG_PROPERTIES = "config/telmon/log.properties";
208const std::string CONFIG_DEFAULT_REQ_ENDPOINT = "zpb.rr://127.0.0.1:11003/"; // the potentially unsafe zpb.rr://0.0.0.0:11003/ we use only in the yaml file.
209const std::string CONFIG_DEFAULT_OLDB_URI_PREFIX = "cii.oldb:///elt/cs/hlcc/";
210const uint32_t CONFIG_DEFAULT_OLDB_CONN_TIMEOUT = 1; // sec
211const uint32_t CONFIG_DEFAULT_OLDB_ASYNC_PERIOD = 0; // ms; we currently do not use RAD async OLDB writes, but still configure all standard attributes.
213const std::string CONFIG_DEFAULT_PUB_DDS_PROFILE = "";
214const std::string CONFIG_DEFAULT_PUB_DDS_NIC = "";
215const std::string CONFIG_DEFAULT_PUB_DDS_FILE = "";
221const std::vector<std::string> CONFIG_DEFAULT_ESTIMATIONSCRIPTS = {"MonScripts.ReadyForHandoverEstimation", "MonScripts.CcsStateEstimation"};
222const std::vector<MonitoredSubsystem> CONFIG_DEFAULT_MONITORED_SUBSYSTEMS = {};
223const std::vector<std::string> CONFIG_DEFAULT_NIGHT_TIME_NEEDED = {"eltpk", "telif", "telmon"};
224const std::vector<std::string> CONFIG_DEFAULT_NIGHT_TIME_NOT_NEEDED = {"m2psest", "m2whest", "m3psest", "m3whest"};
225const std::vector<std::string> CONFIG_DEFAULT_NIGHT_TIME_NOT_NEEDED_CRITICAL = {"segexmgr"};
226
227/*
228 * Struct packing all configuration parameters
229 */
231 std::string version;
232 std::string modname;
233 std::string procname;
234 std::string filename;
235 std::string sm_scxml;
236 std::string sm_scxml_append;
237 std::string log_level;
238 std::string log_properties;
239 std::string req_endpoint;
240 std::string oldb_uri_prefix;
243 std::string pub_dds_profile;
244 std::string pub_dds_nic;
245 std::string pub_dds_file;
249 std::uint16_t estimation_period_ms;
251 std::vector<std::string> estimation_scripts;
252 std::vector<MonitoredSubsystem> monitored_subsystems;
253 std::vector<std::string> night_time_needed_subsystems;
254 std::vector<std::string> night_time_not_needed_subsystems;
256};
257
262class Config : public rad::Config {
263 public:
271 Config();
272
276 virtual ~Config();
277
284
285 Config(const Config&) = delete;
286 Config& operator=(const Config&) = delete;
287
288};
289
290} // namespace hlcc::telmon
291
292#endif // HLCC_TELIF_TELMON_CONFIG_HPP
Default logger name.
ConfigError(const std::string &message)
Definition config.hpp:28
ConfigPack GetConfigPack()
Definition config.cpp:57
virtual ~Config()
Definition config.cpp:52
Config(const Config &)=delete
Config()
Definition config.cpp:19
Config & operator=(const Config &)=delete
Disable copy constructor.
Definition guideStarHelper.cpp:19
Definition actionMgr.cpp:31
const std::string KEY_CONFIG_PUB_DDS_FILE
Definition config.hpp:158
const char CONFIG_KEY_SEPARATOR_OLDB
Definition config.hpp:129
const std::string CONFIG_DEFAULT_PUB_DDS_PROFILE
Definition config.hpp:213
const std::string KEY_CONFIG_MONITORED_SUBSYSTEMS
Definition config.hpp:165
const std::string CONFIG_DEFAULT_PUB_DDS_FILE
Definition config.hpp:215
const std::string KEY_CONFIG_ESTIMATIONSCRIPTS
Definition config.hpp:164
const std::string KEY_CONFIG_READYFORHANDOVER_INERTIA_MS
Definition config.hpp:163
const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_CCS_INS
Definition config.hpp:160
const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_HLCC
Definition config.hpp:159
const std::string CONFIG_DEFAULT_SCXML_FILENAME
Definition config.hpp:204
const std::string KEY_CONFIG_ESTIMATION_PERIOD_MS
Definition config.hpp:162
const bool CONFIG_DEFAULT_TRS_HEALTH_ENABLED
Definition config.hpp:212
const std::string KEY_CONFIG_NIGHT_TIME_NEEDED_SUBSYS
Definition config.hpp:166
const std::string KEY_CONFIG_PUB_DDS_NIC
Definition config.hpp:157
ConfigType
Definition config.hpp:134
@ CFG_MONITORED_SUBSYSTEMS
Definition config.hpp:134
@ CFG_DOUBLE
Definition config.hpp:134
@ CFG_VEC_STRING
Definition config.hpp:134
@ CFG_UINT16
Definition config.hpp:134
@ CFG_UINT32
Definition config.hpp:134
@ CFG_STRING
Definition config.hpp:134
const std::string KEY_CONFIG_NIGHT_TIME_NOT_NEEDED_SUBSYS
Definition config.hpp:167
const std::string KEY_CONFIG_PUB_DDS_PROFILE
Definition config.hpp:156
const std::string CONFIG_DEFAULT_REQ_ENDPOINT
Definition config.hpp:208
const std::string CONFIG_DEFAULT_LOG_LEVEL
Definition config.hpp:206
const uint32_t CONFIG_DEFAULT_PUB_DDS_DOMAIN_ID_CCS_INS
Definition config.hpp:217
const std::string KEY_CONFIG_NIGHT_TIME_NOT_NEEDED_CRITICAL_SUBSYS
Definition config.hpp:168
const std::vector< std::string > OLDB_CFG_KEYS_VECTOR_STRING
Definition config.hpp:180
const std::string CONFIG_DEFAULT_FILENAME
Definition config.hpp:203
const std::string CONFIG_DEFAULT_PUB_DDS_NIC
Definition config.hpp:214
const uint32_t CONFIG_DEFAULT_PUB_DDS_DOMAIN_ID_GENERAL
Definition config.hpp:218
const std::vector< MonitoredSubsystem > CONFIG_DEFAULT_MONITORED_SUBSYSTEMS
Definition config.hpp:222
const std::string CONFIG_DEFAULT_LOG_PROPERTIES
Definition config.hpp:207
const std::vector< std::string > OLDB_CFG_KEYS_STRING
Definition config.hpp:174
const std::string KEY_CONFIG_PUB_DDS_DOMAIN_ID_GENERAL
Definition config.hpp:161
const std::string CONFIG_DEFAULT_PROCNAME
Definition config.hpp:202
const std::string CONFIG_DEFAULT_VERSION
Definition config.hpp:200
const uint32_t CONFIG_DEFAULT_OLDB_CONN_TIMEOUT
Definition config.hpp:210
const uint32_t CONFIG_DEFAULT_OLDB_ASYNC_PERIOD
Definition config.hpp:211
const uint32_t CONFIG_DEFAULT_READYFORHANDOVER_INERTIA_MS
Definition config.hpp:220
const std::string KEY_CONFIG
Definition config.hpp:155
const uint32_t CONFIG_DEFAULT_ESTIMATION_PERIOD_MS
Definition config.hpp:219
const std::string CONFIG_DEFAULT_OLDB_URI_PREFIX
Definition config.hpp:209
const std::string CONFIG_DEFAULT_MODNAME
Definition config.hpp:201
const std::string CONFIG_DEFAULT_SCXML_APPEND
Definition config.hpp:205
const std::vector< std::string > CONFIG_DEFAULT_NIGHT_TIME_NOT_NEEDED_CRITICAL
Definition config.hpp:225
const std::vector< std::string > OLDB_CFG_KEYS_UINT32
Definition config.hpp:187
const std::vector< std::string > CONFIG_DEFAULT_ESTIMATIONSCRIPTS
Definition config.hpp:221
const uint32_t CONFIG_DEFAULT_PUB_DDS_DOMAIN_ID_HLCC
Definition config.hpp:216
const std::vector< std::string > CONFIG_DEFAULT_NIGHT_TIME_NOT_NEEDED
Definition config.hpp:224
const std::vector< std::string > CONFIG_DEFAULT_NIGHT_TIME_NEEDED
Definition config.hpp:223
Definition ccsinsoldb.hpp:10
static bool Decode(const CiiConfigInstanceNode &node, hlcc::telmon::MonitoredSubsystem &target)
Definition config.hpp:63
static bool Decode(const CiiConfigInstanceNode &node, std::vector< hlcc::telmon::MonitoredApp > &targets)
Definition config.hpp:74
static bool Encode(CiiConfigInstanceNode &node, const hlcc::telmon::MonitoredSubsystem &source)
Definition config.hpp:95
static bool Encode(CiiConfigInstanceNode &node, const std::vector< hlcc::telmon::MonitoredApp > &source)
Definition config.hpp:107
Definition config.hpp:230
std::string sm_scxml_append
Definition config.hpp:236
std::uint16_t estimation_period_ms
Definition config.hpp:249
std::string pub_dds_file
Definition config.hpp:245
std::uint16_t readyforhandover_inertia_ms
Definition config.hpp:250
int oldb_con_timeout
Definition config.hpp:241
std::string log_properties
Definition config.hpp:238
std::string req_endpoint
Definition config.hpp:239
std::string pub_dds_profile
Definition config.hpp:243
bool trs_health_enabled
Definition config.hpp:242
std::string filename
Definition config.hpp:234
std::vector< std::string > estimation_scripts
Definition config.hpp:251
std::string oldb_uri_prefix
Definition config.hpp:240
std::string sm_scxml
Definition config.hpp:235
std::uint32_t pub_dds_domain_id_general
Definition config.hpp:248
std::vector< std::string > night_time_not_needed_critical_subsystems
Definition config.hpp:255
std::vector< std::string > night_time_needed_subsystems
Definition config.hpp:253
std::vector< MonitoredSubsystem > monitored_subsystems
Definition config.hpp:252
std::vector< std::string > night_time_not_needed_subsystems
Definition config.hpp:254
std::uint32_t pub_dds_domain_id_hlcc
Definition config.hpp:246
std::string modname
Definition config.hpp:232
std::string pub_dds_nic
Definition config.hpp:244
std::string log_level
Definition config.hpp:237
std::uint32_t pub_dds_domain_id_ccs_ins
Definition config.hpp:247
std::string procname
Definition config.hpp:233
std::string version
Definition config.hpp:231
Definition config.hpp:38
std::string name
Definition config.hpp:39
std::string pubsub
Definition config.hpp:42
std::string oldb
Definition config.hpp:40
std::string stdcmds
Definition config.hpp:41
bool ignore
Definition config.hpp:43
Definition config.hpp:46
bool ignore_subsystem
Definition config.hpp:48
std::string name
Definition config.hpp:47
std::vector< MonitoredApp > monitored_apps
Definition config.hpp:49