1 #ifndef SECONDARY_CONFIG_H_
2 #define SECONDARY_CONFIG_H_
5 #include <boost/filesystem.hpp>
6 #include <unordered_map>
8 #include "primary/secondary_config.h"
9 #include "virtualsecondary.h"
15 static constexpr
const char*
const AddrField{
"addr"};
17 IPSecondaryConfig(std::string addr_ip, uint16_t addr_port) : ip(std::move(addr_ip)), port(addr_port) {}
20 os <<
"(addr: " << cfg.ip <<
":" << cfg.port <<
")";
31 static const char*
const Type;
32 static constexpr
const char*
const PortField{
"secondaries_wait_port"};
33 static constexpr
const char*
const TimeoutField{
"secondaries_wait_timeout"};
34 static constexpr
const char*
const SecondariesField{
"secondaries"};
37 :
SecondaryConfig(Type), secondaries_wait_port{wait_port}, secondaries_timeout_s{timeout_s} {}
40 os <<
"(wait_port: " << cfg.secondaries_wait_port <<
" timeout_s: " << cfg.secondaries_timeout_s <<
")";
45 const uint16_t secondaries_wait_port;
46 const int secondaries_timeout_s;
47 std::vector<IPSecondaryConfig> secondaries_cfg;
52 using Configs = std::vector<std::shared_ptr<SecondaryConfig>>;
54 static Configs parse_config_file(
const boost::filesystem::path& config_file);
57 virtual Configs parse() = 0;
64 Configs parse()
override;
67 static void createIPSecondariesCfg(Configs& configs,
const Json::Value& json_ip_sec_cfg);
68 static void createVirtualSecondariesCfg(Configs& configs,
const Json::Value& json_virtual_sec_cfg);
72 using SecondaryConfigFactoryRegistry = std::unordered_map<std::string, std::function<void(Configs&, Json::Value&)>>;
74 SecondaryConfigFactoryRegistry sec_cfg_factory_registry_ = {
75 {IPSecondariesConfig::Type, createIPSecondariesCfg}, {VirtualSecondaryConfig::Type, createVirtualSecondariesCfg}
84 #endif // SECONDARY_CONFIG_H_