ifw-core 6.0.0
Loading...
Searching...
No Matches
config.hpp
Go to the documentation of this file.
1
7#ifndef CORE_UTILS_BAT_CONFIG_HPP_
8#define CORE_UTILS_BAT_CONFIG_HPP_
9
10#include <string>
11#include <any>
12
13#include <boost/date_time/posix_time/posix_time.hpp>
14#include <boost/program_options.hpp>
15#include <boost/optional.hpp>
16
20
21#include <config-ng/ciiConfigApi.hpp>
22
23
24namespace ifw::core::utils::bat {
25
29 constexpr auto CONFIG_DEFAULT_PROCNAME = "notset";
32 constexpr auto CONFIG_DEFAULT_FILENAME = "";
33 constexpr auto CONFIG_DEFAULT_SCXML_FILENAME = "";
34 constexpr auto CONFIG_DEFAULT_LOGLEVEL = "ERROR";
35 constexpr auto CONFIG_DEFAULT_DB_ENDPOINT = "127.0.0.1:6379";
36 constexpr unsigned int CONFIG_DEFAULT_DB_TIMEOUT = 2000;
37 constexpr auto CONFIG_DEFAULT_REQ_ENDPOINT = "";
38 constexpr auto CONFIG_DEFAULT_PUB_ENDPOINT = "";
39 constexpr auto CONFIG_DEFAULT_OLDB_URI = "cii.oldb:///";
40
41 constexpr unsigned int CONFIG_DEFAULT_WAIT_TOUT = 1000;
42 constexpr unsigned int CONFIG_DEFAULT_CMD_TOUT = 60000;
43
44 // DB key delimiter
45 constexpr auto CONFIG_DB_DELIMITER = "/";
46
47 // Keys used internally to for reporting server state in the DB
48 constexpr auto KEY_CONTROL_STATE = "state";
49 constexpr auto KEY_CONTROL_SUBSTATE = "substate";
50 constexpr auto KEY_CONTROL_STATUS = "status";
51 constexpr auto KEY_CONTROL_STATE_STR = "state_str";
52 constexpr auto KEY_CONTROL_SUBSTATE_STR = "substate_str";
53
54 // Keys used for configuration parameters
55 constexpr auto KEY_CONFIG_REQ_ENDPOINT = "req_endpoint";
56 constexpr auto KEY_CONFIG_PUB_ENDPOINT = "pub_endpoint";
57 constexpr auto KEY_CONFIG_DB_ENDPOINT = "db_endpoint";
58 constexpr auto KEY_CONFIG_DB_TIMEOUT = "db_timeout";
59 constexpr auto KEY_CONFIG_DB_TASK_PERIOD = "db_task_period";
60 constexpr auto KEY_CONFIG_SM_SCXML = "scxml";
61 constexpr auto KEY_CONFIG_FILENAME = "filename";
62 constexpr auto KEY_CONFIG_LOG_LEVEL = "log_level";
63 constexpr auto KEY_CONFIG_LOG_PROP = "log_properties";
64 constexpr auto KEY_CONFIG_SERVER_ID = "server_id";
65 constexpr auto KEY_CONFIG_SERVER = "server";
66 constexpr auto KEY_CONFIG_WAITTOUT = "mon_timeout";
67 constexpr auto KEY_CONFIG_CMDTOUT = "req_timeout";
68 constexpr auto KEY_CONFIG_DICTIONARIES = "dictionaries";
69 constexpr auto KEY_CONFIG_DB_PREFIX = "oldb_prefix";
70 constexpr auto KEY_CONFIG_FITS_PREFIX = "fits_prefix";
71 constexpr auto KEY_CONFIG_VERSION = "version";
72
73 // DB keys
74 constexpr auto KEY_DB_STATES = "states";
75
76 using DbPair = std::pair<std::string, std::any>;
77 using DbVector = std::vector<DbPair>;
78
86 struct CliConfig {
87 inline boost::optional<std::string> GetServerId() {
88 return m_server_id;
89 }
90
91 inline boost::optional<std::string> GetLogLevel() {
92 return m_log_level;
93 }
94
95 inline boost::optional<std::string> GetConfigFile() {
96 return m_config_file;
97 }
98
99 inline boost::optional<std::string> GetReqEndpoint() {
100 return m_req_endpoint;
101 }
102
103 inline boost::optional<std::string> GetLogPropFile() {
104 return m_log_prop_file;
105 }
106
107 // Used boost optionals for its good integration with boost command line handling
108 boost::optional<std::string> m_server_id;
109 boost::optional<std::string> m_log_level;
110 boost::optional<std::string> m_config_file;
111 boost::optional<std::string> m_req_endpoint;
112 boost::optional<std::string> m_log_prop_file;
113 };
114
136 class Config : public IConfig {
137 public:
138
139
147 Config();
148
157 bool ParseOptions(int argc, char* argv[]) override;
158
166 void LoadConfig(const std::string& filename = "", bool reset = false) override;
167
171 virtual ~Config() = default;
172
176 const std::string GetServerId() const override;
177
183 const std::string GetMsgReplierEndpoint() const override;
184
190 const std::string GetMsgPubEndpoint() const override;
191
195 const timeval GetDbTimeout() const override;
196
200 const unsigned int GetDbConnTimeout() const override;
201
205 const unsigned int GetDbTaskPeriod() const override;
206
210 const std::string GetSmScxmlFilename() const override;
211
215 const std::string GetConfigFilename() const override;
216
220 const std::string GetLogProperties() const override;
221
225 const std::string GetLogLevel() const override;
230 const unsigned int GetReqTout() const override;
231
236 const unsigned int GetMonTout() const override;
237
242 const std::string GetOldbPrefix() const;
243
248 const std::string GetFitsPrefix() const;
249
250
255 const std::string GetConfigAsString() const override;
256
261 void SetConfigAsString(const std::string& config) override;
262
270 std::string GetResolvedFilename(const std::string& config);
271
284 const elt::configng::CiiConfigInstanceNamespace& GetInstance() const;
285
290
291 virtual void GetConfigList(DbVector& cfg_list);
292
297
301 void SetConfigFilename(const std::string cfg_file);
302
307 const std::string GetVersion() const;
308
309 protected:
317 void MergeConfig(const elt::configng::CiiConfigDocument &doc, bool check=true);
318
325 void CheckConfig(const elt::configng::CiiConfigDocument &doc) const;
326
327 private:
335 void OverrideFromCmdLine();
336
341 void SetLogProperties(const std::string& filename);
342
343 protected:
345 std::unique_ptr<elt::configng::CiiConfigDocument> m_config_doc;
348 boost::posix_time::ptime m_file_utc;
349 std::string m_config_filename;
351 log4cplus::Logger m_logger;
352
353 private:
354 Config(const Config&) = delete;
355 Config& operator=(const Config&) = delete;
356
357 private:
358 std::stringstream m_default_stream;
359 int m_num_dictionaries;
360 };
361
362
363} // namespace
364
365
366#endif // CORE_UTILS_BAT_CONFIG_HPP_
Data Interface Dictionary class.
Definition did.hpp:29
Definition config.hpp:136
void SetConfigFilename(const std::string cfg_file)
Definition config.cpp:615
const elt::configng::CiiConfigInstanceNamespace & GetInstance() const
Merges an existing configuration with another config document.
Definition config.cpp:523
const std::string GetVersion() const
GetVersion.
Definition config.cpp:551
std::unique_ptr< elt::configng::CiiConfigDocument > m_config_doc
Internal configuration document object.
Definition config.hpp:345
void CheckConfig(const elt::configng::CiiConfigDocument &doc) const
Validates the document configuration.
Definition config.cpp:492
log4cplus::Logger m_logger
Definition config.hpp:351
const std::string GetServerId() const override
Definition config.cpp:260
const std::string GetMsgPubEndpoint() const override
Definition config.cpp:289
CliConfig & GetCliCfg()
Definition config.cpp:610
std::string GetResolvedFilename(const std::string &config)
Resolve file name.
Definition config.cpp:429
const std::string GetLogLevel() const override
Definition config.cpp:343
const std::string GetConfigAsString() const override
Get the actual configuration as a string.
Definition config.cpp:393
std::string m_config_filename
Definition config.hpp:349
const unsigned int GetDbConnTimeout() const override
Definition config.cpp:305
virtual void GetConfigList(DbVector &cfg_list)
Definition config.cpp:564
ifw::core::dit::did::Did m_did
Definition config.hpp:350
ifw::core::dit::did::Did & GetDid()
Definition config.cpp:544
const std::string GetFitsPrefix() const
Get FITS prefix.
Definition config.cpp:383
const unsigned int GetMonTout() const override
Get the wait timeout.
Definition config.cpp:355
const std::string GetMsgReplierEndpoint() const override
Definition config.cpp:274
const std::string GetConfigFilename() const override
Definition config.cpp:318
const std::string GetSmScxmlFilename() const override
Definition config.cpp:312
boost::posix_time::ptime m_file_utc
Definition config.hpp:348
Config()
Definition config.cpp:28
void MergeConfig(const elt::configng::CiiConfigDocument &doc, bool check=true)
Merges a configuration file.
Definition config.cpp:468
const unsigned int GetReqTout() const override
Get the command timeout.
Definition config.cpp:363
const std::string GetOldbPrefix() const
Get OLDB prefix.
Definition config.cpp:370
bool ParseOptions(int argc, char *argv[]) override
Definition config.cpp:71
const timeval GetDbTimeout() const override
Definition config.cpp:296
const unsigned int GetDbTaskPeriod() const override
Definition config.cpp:620
const std::string GetLogProperties() const override
Definition config.cpp:327
void LoadConfig(const std::string &filename="", bool reset=false) override
Definition config.cpp:169
void SetConfigAsString(const std::string &config) override
Load a configuration as string.
Definition config.cpp:408
CliConfig m_cli_config
Command line parameters.
Definition config.hpp:347
Definition iConfig.hpp:19
Config class source file.
Definition config.cpp:26
constexpr unsigned int CONFIG_DEFAULT_WAIT_TOUT
Definition config.hpp:41
constexpr auto CONFIG_DEFAULT_OLDB_URI
Definition config.hpp:39
constexpr auto KEY_CONFIG_DB_TASK_PERIOD
Definition config.hpp:59
constexpr auto KEY_CONFIG_WAITTOUT
Definition config.hpp:66
constexpr auto KEY_CONTROL_SUBSTATE
Definition config.hpp:49
constexpr auto KEY_CONFIG_DB_PREFIX
Definition config.hpp:69
constexpr auto KEY_CONFIG_CMDTOUT
Definition config.hpp:67
constexpr auto CONFIG_DEFAULT_REQ_ENDPOINT
Definition config.hpp:37
constexpr auto CONFIG_DEFAULT_PUB_ENDPOINT
Definition config.hpp:38
constexpr auto KEY_CONFIG_SERVER
Definition config.hpp:65
constexpr auto CONFIG_DEFAULT_DB_ENDPOINT
Definition config.hpp:35
constexpr auto KEY_DB_STATES
Definition config.hpp:74
constexpr auto KEY_CONTROL_STATE
Definition config.hpp:48
constexpr auto KEY_CONFIG_FITS_PREFIX
Definition config.hpp:70
constexpr auto KEY_CONFIG_DB_ENDPOINT
Definition config.hpp:57
constexpr auto CONFIG_DEFAULT_SCXML_FILENAME
Definition config.hpp:33
constexpr auto KEY_CONFIG_VERSION
Definition config.hpp:71
constexpr unsigned int CONFIG_DEFAULT_CMD_TOUT
Definition config.hpp:42
constexpr unsigned int CONFIG_DEFAULT_DB_TIMEOUT
Definition config.hpp:36
constexpr auto KEY_CONFIG_SERVER_ID
Definition config.hpp:64
constexpr auto KEY_CONTROL_STATUS
Definition config.hpp:50
constexpr auto KEY_CONFIG_REQ_ENDPOINT
Definition config.hpp:55
constexpr auto KEY_CONFIG_DICTIONARIES
Definition config.hpp:68
constexpr auto CONFIG_DEFAULT_LOGLEVEL
Definition config.hpp:34
constexpr auto KEY_CONFIG_SM_SCXML
Definition config.hpp:60
constexpr auto CONFIG_DEFAULT_FILENAME
Definition config.hpp:32
std::pair< std::string, std::any > DbPair
Definition config.hpp:76
constexpr auto KEY_CONFIG_LOG_PROP
Definition config.hpp:63
constexpr auto CONFIG_DB_DELIMITER
Definition config.hpp:45
constexpr auto KEY_CONTROL_SUBSTATE_STR
Definition config.hpp:52
constexpr auto CONFIG_DEFAULT_PROCNAME
Definition config.hpp:29
constexpr auto KEY_CONFIG_DB_TIMEOUT
Definition config.hpp:58
constexpr auto KEY_CONFIG_LOG_LEVEL
Definition config.hpp:62
std::vector< DbPair > DbVector
Definition config.hpp:77
constexpr auto KEY_CONFIG_PUB_ENDPOINT
Definition config.hpp:56
constexpr auto KEY_CONFIG_FILENAME
Definition config.hpp:61
constexpr auto KEY_CONTROL_STATE_STR
Definition config.hpp:51
The CliConfig struct.
Definition config.hpp:86
boost::optional< std::string > m_log_level
Definition config.hpp:109
boost::optional< std::string > GetReqEndpoint()
Definition config.hpp:99
boost::optional< std::string > m_config_file
Definition config.hpp:110
boost::optional< std::string > GetLogPropFile()
Definition config.hpp:103
boost::optional< std::string > GetConfigFile()
Definition config.hpp:95
boost::optional< std::string > GetLogLevel()
Definition config.hpp:91
boost::optional< std::string > m_req_endpoint
Definition config.hpp:111
boost::optional< std::string > GetServerId()
Definition config.hpp:87
boost::optional< std::string > m_server_id
Definition config.hpp:108
boost::optional< std::string > m_log_prop_file
Definition config.hpp:112