10 #define RAD_CONFIG_HPP
16 #include <config-ng/ciiConfigApi.hpp>
18 #include <boost/program_options.hpp>
19 #include <boost/algorithm/string.hpp>
24 namespace bpo = boost::program_options;
80 const std::string& log_level =
"ERROR");
91 inline const elt::configng::CiiConfigDocument&
GetConfigDoc() {
return *m_config_doc; }
121 virtual void LoadConfig(
const std::string& filename =
"");
148 void MergeConfig(
const elt::configng::CiiConfigDocument& cfg_doc);
166 void AddParam(
const std::string& key,
const T& value);
174 bool HasParam(
const std::string& key)
const;
183 T
GetParam(
const std::string& key)
const;
192 void SetParam(
const std::string& key,
const T& value);
218 std::string
PrintNode(
const elt::configng::CiiConfigInstanceNode& node,
219 const std::string& indentation);
228 std::string
Print(
const elt::configng::CiiConfigInstanceNamespace& instances);
251 bool SplitKeyValue(
const std::string& keyval, std::string& key, std::string& value);
262 void SplitVectorStr(
const std::string& vector_str, std::string& vector_name,
263 int& vector_index)
const;
265 bpo::options_description m_options_desc;
266 bpo::variables_map m_options_map;
274 std::unique_ptr<elt::configng::CiiConfigDocument> m_config_doc;
282 std::vector<std::string> nodes;
284 boost::split(nodes, key, boost::is_any_of(delim));
285 if (nodes.size() < 2) {
287 " has no root/leaf node(s).");
298 elt::configng::CiiConfigMapBuilder builder;
300 auto curr_node = builder[nodes[0]];
302 while (index < nodes.size()) {
304 curr_node = curr_node[nodes[index]];
305 if (index + 1 == nodes.size()) {
307 curr_node = elt::configng::CiiConfigInstanceNode::From(value);
312 if (m_config_doc ==
nullptr) {
313 m_config_doc = std::make_unique<elt::configng::CiiConfigDocument>();
314 m_config_doc->SetInstancesFromMap(builder);
316 auto document = elt::configng::CiiConfigDocument();
317 document.SetInstancesFromMap(builder);
321 auto issues = m_config_doc->Check();
322 if (issues.HasErrors() || issues.HasWarnings()) {
323 for (
auto& issue : issues) {
324 LOG4CPLUS_ERROR(
GetLogger(),
"Config. issue: " << issue.GetMessage());
335 if (m_config_doc ==
nullptr) {
340 std::vector<std::string> nodes;
342 boost::split(nodes, key, boost::is_any_of(delim));
343 if (nodes.size() < 2) {
345 " has no root/leaf node(s).");
348 auto instance = m_config_doc->Instances();
349 auto parent_node = instance[nodes[0]];
350 auto child_node = parent_node;
352 while (index < nodes.size()) {
353 std::string child_node_name = nodes[index];
356 int vector_index = -1;
357 SplitVectorStr(nodes[index], child_node_name, vector_index);
361 if (parent_node.Has(child_node_name)) {
362 if (vector_index == -1) {
363 child_node = parent_node[child_node_name];
365 child_node = parent_node[child_node_name][vector_index];
367 if (index + 1 == nodes.size()) {
368 T val = child_node.As<T>();
371 parent_node = child_node;
374 key +
" does not exists.");
379 key +
" does not exists.");
380 }
catch (std::exception& e) {
382 key +
">: " + std::string(e.what()));
390 if (m_config_doc ==
nullptr) {
395 std::vector<std::string> nodes;
397 boost::split(nodes, key, boost::is_any_of(delim));
398 if (nodes.size() < 2) {
400 " has no root/leaf node(s).");
403 auto instance = m_config_doc->Instances();
404 auto parent_node = instance[nodes[0]];
405 auto child_node = parent_node;
407 while (index < nodes.size()) {
408 std::string child_node_name = nodes[index];
411 int vector_index = -1;
412 SplitVectorStr(nodes[index], child_node_name, vector_index);
415 if (parent_node.Has(child_node_name)) {
416 if (vector_index == -1) {
417 child_node = parent_node[child_node_name];
419 child_node = parent_node[child_node_name][vector_index];
421 if (index + 1 == nodes.size()) {
425 parent_node = child_node;
428 key +
" does not exists.");
433 key +
" does not exists.");
434 }
catch (std::exception& e) {
435 LOG4CPLUS_ERROR(
GetLogger(),
"Writing configuration parameter <"
436 << key <<
">: " << e.what());
447 std::vector<std::string>& keys);
Definition: config.hpp:67
void AddParam(const std::string &key, const T &value)
Definition: config.hpp:279
void SetParam(const std::string &key, const T &value)
Definition: config.hpp:387
std::string PrintNode(const elt::configng::CiiConfigInstanceNode &node, const std::string &indentation)
Definition: config.cpp:418
Config(const Config &)=delete
Config(const std::string &name=LOGGER_NAME, const std::string &log_level="ERROR")
Definition: config.cpp:22
bpo::variables_map & GetOptionsMap()
Definition: config.hpp:101
std::vector< std::string > SetConfigAsString(const std::string &config)
Definition: config.cpp:350
const std::string GetConfigAsString() const
Definition: config.cpp:329
void CreateDefaultConfig(const std::string &default_cfg)
Definition: config.cpp:270
bpo::options_description & GetOptionsDesc()
Definition: config.hpp:96
T GetParam(const std::string &key) const
Definition: config.hpp:332
const elt::configng::CiiConfigDocument & GetConfigDoc()
Definition: config.hpp:91
virtual void ConfigureLogging(const std::string &filename="")
Definition: config.cpp:190
virtual ~Config()
Definition: config.cpp:69
virtual void LoadConfig(const std::string &filename="")
Definition: config.cpp:154
Config & operator=(const Config &)=delete
Disable copy constructor.
virtual bool ParseOptions(int argc, char *argv[])
Definition: config.cpp:73
void MergeConfig(const elt::configng::CiiConfigDocument &cfg_doc)
Definition: config.cpp:254
virtual void ApplyCmdLineOptions()
Definition: config.cpp:222
std::string Print()
Definition: config.cpp:466
bool HasParam(const std::string &key) const
Definition: config.cpp:278
Base class for the exceptions thrown by RAD and its users.
Definition: exceptions.hpp:53
#define RAD_TRACE(logger)
Definition: logger.hpp:24
Exception classes header file.
#define RAD_LOG_THROW(exceptionType_t, logger, msg)
Throw exception with information about the throw location.
Definition: exceptions.hpp:356
Definition: actionsApp.cpp:20
const std::string KEY_CONFIG_PROCNAME
Definition: config.hpp:38
const std::string KEY_CONFIG_VERSION
Definition: config.hpp:36
const std::string LOGGER_NAME
Definition: logger.hpp:79
void GetListOfKeysFromConfig(const elt::configng::CiiConfigInstanceNode &node, const std::string &prefix, std::vector< std::string > &keys)
Definition: config.cpp:511
const std::string KEY_CONFIG_SM_APPEND
Definition: config.hpp:43
const std::string KEY_CONFIG_FILENAME
Definition: config.hpp:39
log4cplus::Logger & GetLogger()
Definition: logger.cpp:70
const char CONFIG_KEY_SEPARATOR_OLDB
Definition: config.hpp:28
const std::string KEY_CONFIG_SM_SCXML
Definition: config.hpp:42
const std::string KEY_CONFIG_TRS_HEALTH_ENABLED
Definition: config.hpp:47
const std::string KEY_CONFIG_LOG_LEVEL
Definition: config.hpp:40
const std::vector< std::string > KEYS_CONFIG
Definition: config.hpp:49
const std::string KEY_CONFIG_OLDB_CONN_TIMEOUT
Definition: config.hpp:46
const std::string KEY_CONFIG
Definition: config.hpp:35
const std::string KEY_CONFIG_MODNAME
Definition: config.hpp:37
const std::string KEY_CONFIG_LOG_PROPERTIES
Definition: config.hpp:41
const std::string KEY_CONFIG_OLDB_URI_PREFIX
Definition: config.hpp:45
const std::string KEY_CONFIG_REQ_ENDPOINT
Definition: config.hpp:44
name
Definition: wscript:8