ifw-core 7.0.0
 
Loading...
Searching...
No Matches
config.hpp
Go to the documentation of this file.
1
8
9#ifndef CORE_UTILS_BAT_CONFIG_HPP_
10#define CORE_UTILS_BAT_CONFIG_HPP_
11
12#include <string>
13#include <any>
14
15#include <boost/date_time/posix_time/posix_time.hpp>
16#include <boost/program_options.hpp>
17#include <boost/optional.hpp>
18
22
23#include <config-ng/ciiConfigApi.hpp>
24
25
26namespace ifw::core::utils::bat {
27
31 constexpr auto CONFIG_DEFAULT_PROCNAME = "notset";
34 constexpr auto CONFIG_DEFAULT_FILENAME = "";
35 constexpr auto CONFIG_DEFAULT_SCXML_FILENAME = "";
36 constexpr auto CONFIG_DEFAULT_LOGLEVEL = "ERROR";
37 constexpr auto CONFIG_DEFAULT_DB_ENDPOINT = "127.0.0.1:6379";
38 constexpr unsigned int CONFIG_DEFAULT_DB_TIMEOUT = 2000;
39 constexpr auto CONFIG_DEFAULT_REQ_ENDPOINT = "";
40 constexpr auto CONFIG_DEFAULT_PUB_ENDPOINT = "";
41 constexpr auto CONFIG_DEFAULT_OLDB_URI = "cii.oldb:///";
42
43 constexpr unsigned int CONFIG_DEFAULT_WAIT_TOUT = 1000;
44 constexpr unsigned int CONFIG_DEFAULT_CMD_TOUT = 60000;
45
46 // DB key delimiter
47 constexpr auto CONFIG_DB_DELIMITER = "/";
48
49 // Keys used internally to for reporting server state in the DB
50 constexpr auto KEY_CONTROL_STATE = "state";
51 constexpr auto KEY_CONTROL_SUBSTATE = "substate";
52 constexpr auto KEY_CONTROL_STATUS = "status";
53 constexpr auto KEY_CONTROL_STATE_STR = "state_str";
54 constexpr auto KEY_CONTROL_SUBSTATE_STR = "substate_str";
55
56 // Keys used for configuration parameters
57 constexpr auto KEY_CONFIG_REQ_ENDPOINT = "req_endpoint";
58 constexpr auto KEY_CONFIG_PUB_ENDPOINT = "pub_endpoint";
59 constexpr auto KEY_CONFIG_DB_ENDPOINT = "db_endpoint";
60 constexpr auto KEY_CONFIG_DB_TIMEOUT = "db_timeout";
61 constexpr auto KEY_CONFIG_DB_TASK_PERIOD = "db_task_period";
62 constexpr auto KEY_CONFIG_SM_SCXML = "scxml";
63 constexpr auto KEY_CONFIG_FILENAME = "filename";
64 constexpr auto KEY_CONFIG_LOG_LEVEL = "log_level";
65 constexpr auto KEY_CONFIG_LOG_PROP = "log_properties";
66 constexpr auto KEY_CONFIG_SERVER_ID = "server_id";
67 constexpr auto KEY_CONFIG_SERVER = "server";
68 constexpr auto KEY_CONFIG_WAITTOUT = "mon_timeout";
69 constexpr auto KEY_CONFIG_CMDTOUT = "req_timeout";
70 constexpr auto KEY_CONFIG_DICTIONARIES = "dictionaries";
71 constexpr auto KEY_CONFIG_DB_PREFIX = "oldb_prefix";
72 constexpr auto KEY_CONFIG_FITS_PREFIX = "fits_prefix";
73 constexpr auto KEY_CONFIG_VERSION = "version";
74
75 // DB keys
76 constexpr auto KEY_DB_STATES = "states";
77
78 using DbPair = std::pair<std::string, std::any>;
79 using DbVector = std::vector<DbPair>;
80
88 struct CliConfig {
89 inline boost::optional<std::string> GetServerId() {
90 return m_server_id;
91 }
92
93 inline boost::optional<std::string> GetLogLevel() {
94 return m_log_level;
95 }
96
97 inline boost::optional<std::string> GetConfigFile() {
98 return m_config_file;
99 }
100
101 inline boost::optional<std::string> GetReqEndpoint() {
102 return m_req_endpoint;
103 }
104
105 inline boost::optional<std::string> GetLogPropFile() {
106 return m_log_prop_file;
107 }
108
109 // Used boost optionals for its good integration with boost command line handling
110 boost::optional<std::string> m_server_id;
111 boost::optional<std::string> m_log_level;
112 boost::optional<std::string> m_config_file;
113 boost::optional<std::string> m_req_endpoint;
114 boost::optional<std::string> m_log_prop_file;
115 };
116
138 class Config : public IConfig {
139 public:
140
141
149 Config();
150
159 bool ParseOptions(int argc, char* argv[]) override;
160
168 void LoadConfig(const std::string& filename = "", bool reset = false) override;
169
173 virtual ~Config() = default;
174
178 const std::string GetServerId() const override;
179
185 const std::string GetMsgReplierEndpoint() const override;
186
192 const std::string GetMsgPubEndpoint() const override;
193
197 const timeval GetDbTimeout() const override;
198
202 const unsigned int GetDbConnTimeout() const override;
203
207 const unsigned int GetDbTaskPeriod() const override;
208
212 const std::string GetSmScxmlFilename() const override;
213
217 const std::string GetConfigFilename() const override;
218
222 const std::string GetLogProperties() const override;
223
227 const std::string GetLogLevel() const override;
232 const unsigned int GetReqTout() const override;
233
238 const unsigned int GetMonTout() const override;
239
244 const std::string GetOldbPrefix() const;
245
250 const std::string GetFitsPrefix() const;
251
252
257 const std::string GetConfigAsString() const override;
258
263 void SetConfigAsString(const std::string& config) override;
264
272 std::string GetResolvedFilename(const std::string& config);
273
281
286 const elt::configng::CiiConfigInstanceNamespace& GetInstance() const;
287
292
293 virtual void GetConfigList(DbVector& cfg_list);
294
299
303 void SetConfigFilename(const std::string cfg_file);
304
309 const std::string GetVersion() const;
310
311 protected:
319 void MergeConfig(const elt::configng::CiiConfigDocument &doc, bool check=true);
320
327 void CheckConfig(const elt::configng::CiiConfigDocument &doc) const;
328
329 private:
337 void OverrideFromCmdLine();
338
343 void SetLogProperties(const std::string& filename);
344
345 protected:
347 std::unique_ptr<elt::configng::CiiConfigDocument> m_config_doc;
350 boost::posix_time::ptime m_file_utc;
351 std::string m_config_filename;
353 log4cplus::Logger m_logger;
354
355 private:
356 Config(const Config&) = delete;
357 Config& operator=(const Config&) = delete;
358
359 private:
360 std::stringstream m_default_stream;
361 int m_num_dictionaries;
362 };
363
364
365} // namespace
366
367
368#endif // CORE_UTILS_BAT_CONFIG_HPP_
Data Interface Dictionary class.
Definition did.hpp:30
void SetConfigFilename(const std::string cfg_file)
Definition config.cpp:620
const elt::configng::CiiConfigInstanceNamespace & GetInstance() const
Merges an existing configuration with another config document.
Definition config.cpp:528
const std::string GetVersion() const
GetVersion.
Definition config.cpp:556
std::unique_ptr< elt::configng::CiiConfigDocument > m_config_doc
Internal configuration document object.
Definition config.hpp:347
void CheckConfig(const elt::configng::CiiConfigDocument &doc) const
Validates the document configuration.
Definition config.cpp:497
log4cplus::Logger m_logger
Definition config.hpp:353
const std::string GetServerId() const override
Definition config.cpp:261
const std::string GetMsgPubEndpoint() const override
Definition config.cpp:290
CliConfig & GetCliCfg()
Definition config.cpp:615
std::string GetResolvedFilename(const std::string &config)
Resolve file name.
Definition config.cpp:430
const std::string GetLogLevel() const override
Definition config.cpp:344
const std::string GetConfigAsString() const override
Get the actual configuration as a string.
Definition config.cpp:394
std::string m_config_filename
Definition config.hpp:351
const unsigned int GetDbConnTimeout() const override
Definition config.cpp:306
virtual void GetConfigList(DbVector &cfg_list)
Definition config.cpp:569
ifw::core::dit::did::Did m_did
Definition config.hpp:352
ifw::core::dit::did::Did & GetDid()
Definition config.cpp:549
const std::string GetFitsPrefix() const
Get FITS prefix.
Definition config.cpp:384
const unsigned int GetMonTout() const override
Get the wait timeout.
Definition config.cpp:356
const std::string GetMsgReplierEndpoint() const override
Definition config.cpp:275
const std::string GetConfigFilename() const override
Definition config.cpp:319
const std::string GetSmScxmlFilename() const override
Definition config.cpp:313
boost::posix_time::ptime m_file_utc
Definition config.hpp:350
Config()
Definition config.cpp:29
void MergeConfig(const elt::configng::CiiConfigDocument &doc, bool check=true)
Merges a configuration file.
Definition config.cpp:473
const unsigned int GetReqTout() const override
Get the command timeout.
Definition config.cpp:364
const std::string GetOldbPrefix() const
Get OLDB prefix.
Definition config.cpp:371
bool ParseOptions(int argc, char *argv[]) override
Definition config.cpp:72
const timeval GetDbTimeout() const override
Definition config.cpp:297
const unsigned int GetDbTaskPeriod() const override
Definition config.cpp:625
const std::string GetLogProperties() const override
Definition config.cpp:328
void LoadConfig(const std::string &filename="", bool reset=false) override
Definition config.cpp:170
void SetConfigAsString(const std::string &config) override
Load a configuration as string.
Definition config.cpp:409
CliConfig m_cli_config
Command line parameters.
Definition config.hpp:349
Definition iConfig.hpp:21
IConfig class header file.
Logger header file.
Definition config.cpp:27
constexpr unsigned int CONFIG_DEFAULT_WAIT_TOUT
Definition config.hpp:43
constexpr auto CONFIG_DEFAULT_OLDB_URI
Definition config.hpp:41
constexpr auto KEY_CONFIG_DB_TASK_PERIOD
Definition config.hpp:61
constexpr auto KEY_CONFIG_WAITTOUT
Definition config.hpp:68
constexpr auto KEY_CONTROL_SUBSTATE
Definition config.hpp:51
constexpr auto KEY_CONFIG_DB_PREFIX
Definition config.hpp:71
constexpr auto KEY_CONFIG_CMDTOUT
Definition config.hpp:69
constexpr auto CONFIG_DEFAULT_REQ_ENDPOINT
Definition config.hpp:39
constexpr auto CONFIG_DEFAULT_PUB_ENDPOINT
Definition config.hpp:40
constexpr auto KEY_CONFIG_SERVER
Definition config.hpp:67
constexpr auto CONFIG_DEFAULT_DB_ENDPOINT
Definition config.hpp:37
constexpr auto KEY_DB_STATES
Definition config.hpp:76
constexpr auto KEY_CONTROL_STATE
Definition config.hpp:50
constexpr auto KEY_CONFIG_FITS_PREFIX
Definition config.hpp:72
constexpr auto KEY_CONFIG_DB_ENDPOINT
Definition config.hpp:59
constexpr auto CONFIG_DEFAULT_SCXML_FILENAME
Definition config.hpp:35
constexpr auto KEY_CONFIG_VERSION
Definition config.hpp:73
constexpr unsigned int CONFIG_DEFAULT_CMD_TOUT
Definition config.hpp:44
constexpr unsigned int CONFIG_DEFAULT_DB_TIMEOUT
Definition config.hpp:38
constexpr auto KEY_CONFIG_SERVER_ID
Definition config.hpp:66
constexpr auto KEY_CONTROL_STATUS
Definition config.hpp:52
constexpr auto KEY_CONFIG_REQ_ENDPOINT
Definition config.hpp:57
constexpr auto KEY_CONFIG_DICTIONARIES
Definition config.hpp:70
constexpr auto CONFIG_DEFAULT_LOGLEVEL
Definition config.hpp:36
constexpr auto KEY_CONFIG_SM_SCXML
Definition config.hpp:62
constexpr auto CONFIG_DEFAULT_FILENAME
Definition config.hpp:34
std::pair< std::string, std::any > DbPair
Definition config.hpp:78
constexpr auto KEY_CONFIG_LOG_PROP
Definition config.hpp:65
constexpr auto CONFIG_DB_DELIMITER
Definition config.hpp:47
constexpr auto KEY_CONTROL_SUBSTATE_STR
Definition config.hpp:54
constexpr auto CONFIG_DEFAULT_PROCNAME
Definition config.hpp:31
constexpr auto KEY_CONFIG_DB_TIMEOUT
Definition config.hpp:60
constexpr auto KEY_CONFIG_LOG_LEVEL
Definition config.hpp:64
std::vector< DbPair > DbVector
Definition config.hpp:79
constexpr auto KEY_CONFIG_PUB_ENDPOINT
Definition config.hpp:58
constexpr auto KEY_CONFIG_FILENAME
Definition config.hpp:63
constexpr auto KEY_CONTROL_STATE_STR
Definition config.hpp:53
The CliConfig struct.
Definition config.hpp:88
boost::optional< std::string > m_log_level
Definition config.hpp:111
boost::optional< std::string > GetReqEndpoint()
Definition config.hpp:101
boost::optional< std::string > m_config_file
Definition config.hpp:112
boost::optional< std::string > GetLogPropFile()
Definition config.hpp:105
boost::optional< std::string > GetConfigFile()
Definition config.hpp:97
boost::optional< std::string > GetLogLevel()
Definition config.hpp:93
boost::optional< std::string > m_req_endpoint
Definition config.hpp:113
boost::optional< std::string > GetServerId()
Definition config.hpp:89
boost::optional< std::string > m_server_id
Definition config.hpp:110
boost::optional< std::string > m_log_prop_file
Definition config.hpp:114