ReCodEx - Task Broker
ReCodEx is complex programmer testing solution, primary targeted to technical universities. It's highly customizable and based on modern technologies.
broker_config.cpp
1 #include "broker_config.h"
2 
4 {
5 }
6 
7 broker_config::broker_config(const YAML::Node &config)
8 {
9  try {
10  if (!config.IsMap()) {
11  throw config_error("The configuration is not a YAML map");
12  }
13 
14  // load client address and port
15  if (config["clients"] && config["clients"].IsMap()) {
16  if (config["clients"]["address"] && config["clients"]["address"].IsScalar()) {
17  client_address_ = config["clients"]["address"].as<std::string>();
18  } // no throw... can be omitted
19  if (config["clients"]["port"] && config["clients"]["port"].IsScalar()) {
20  client_port_ = config["clients"]["port"].as<uint16_t>();
21  } // no throw... can be omitted
22  }
23 
24  // load worker address and port
25  if (config["workers"] && config["workers"].IsMap()) {
26  if (config["workers"]["address"] && config["workers"]["address"].IsScalar()) {
27  worker_address_ = config["workers"]["address"].as<std::string>();
28  } // no throw... can be omitted
29  if (config["workers"]["port"] && config["workers"]["port"].IsScalar()) {
30  worker_port_ = config["workers"]["port"].as<uint16_t>();
31  } // no throw... can be omitted
32  if (config["workers"]["max_liveness"] && config["workers"]["max_liveness"].IsScalar()) {
33  max_worker_liveness_ = config["workers"]["max_liveness"].as<size_t>();
34  } // no throw... can be omitted
35  if (config["workers"]["max_request_failures"] && config["workers"]["max_request_failures"].IsScalar()) {
36  max_request_failures_ = config["workers"]["max_request_failures"].as<size_t>();
37  } // no throw... can be omitted
38  if (config["workers"]["ping_interval"] && config["workers"]["ping_interval"].IsScalar()) {
39  worker_ping_interval_ = std::chrono::milliseconds(config["workers"]["ping_interval"].as<size_t>());
40  } // no throw... can be omitted
41  }
42 
43  // load monitor address and port
44  if (config["monitor"] && config["monitor"].IsMap()) {
45  if (config["monitor"]["address"] && config["monitor"]["address"].IsScalar()) {
46  monitor_address_ = config["monitor"]["address"].as<std::string>();
47  } // no throw... can be omitted
48  if (config["monitor"]["port"] && config["monitor"]["port"].IsScalar()) {
49  monitor_port_ = config["monitor"]["port"].as<uint16_t>();
50  } // no throw... can be omitted
51  }
52 
53  // load frontend address and port
54  if (config["notifier"] && config["notifier"].IsMap()) {
55  if (config["notifier"]["address"] && config["notifier"]["address"].IsScalar()) {
56  notifier_config_.address = config["notifier"]["address"].as<std::string>();
57  } // no throw... can be omitted
58  if (config["notifier"]["port"] && config["notifier"]["port"].IsScalar()) {
59  notifier_config_.port = config["notifier"]["port"].as<uint16_t>();
60  } // no throw... can be omitted
61  if (config["notifier"]["username"] && config["notifier"]["username"].IsScalar()) {
62  notifier_config_.username = config["notifier"]["username"].as<std::string>();
63  } // no throw... can be omitted
64  if (config["notifier"]["password"] && config["notifier"]["password"].IsScalar()) {
65  notifier_config_.password = config["notifier"]["password"].as<std::string>();
66  } // no throw... can be omitted
67  } // no throw... can be omitted
68 
69  // load logger
70  if (config["logger"] && config["logger"].IsMap()) {
71  if (config["logger"]["file"] && config["logger"]["file"].IsScalar()) {
72  fs::path tmp = config["logger"]["file"].as<std::string>();
73  log_config_.log_basename = tmp.filename().string();
74  log_config_.log_path = tmp.parent_path().string();
75  } // no throw... can be omitted
76  if (config["logger"]["level"] && config["logger"]["level"].IsScalar()) {
77  log_config_.log_level = config["logger"]["level"].as<std::string>();
78  } // no throw... can be omitted
79  if (config["logger"]["max-size"] && config["logger"]["max-size"].IsScalar()) {
80  log_config_.log_file_size = config["logger"]["max-size"].as<size_t>();
81  } // no throw... can be omitted
82  if (config["logger"]["rotations"] && config["logger"]["rotations"].IsScalar()) {
83  log_config_.log_files_count = config["logger"]["rotations"].as<size_t>();
84  } // no throw... can be omitted
85  } // no throw... can be omitted
86  } catch (YAML::Exception &ex) {
87  throw config_error("Default broker configuration was not loaded: " + std::string(ex.what()));
88  }
89 }
90 
91 const std::string &broker_config::get_client_address() const
92 {
93  return client_address_;
94 }
95 
97 {
98  return client_port_;
99 }
100 
101 const std::string &broker_config::get_worker_address() const
102 {
103  return worker_address_;
104 }
105 
107 {
108  return worker_port_;
109 }
110 
111 const std::string &broker_config::get_monitor_address() const
112 {
113  return monitor_address_;
114 }
115 
117 {
118  return monitor_port_;
119 }
120 
122 {
123  return max_worker_liveness_;
124 }
125 
126 std::chrono::milliseconds broker_config::get_worker_ping_interval() const
127 {
128  return worker_ping_interval_;
129 }
130 
132 {
133  return log_config_;
134 }
135 
137 {
138  return notifier_config_;
139 }
140 
142 {
143  return max_request_failures_;
144 }
int log_files_count
Definition: log_config.h:36
std::string log_level
Definition: log_config.h:28
virtual uint16_t get_monitor_port() const
virtual const std::string & get_monitor_address() const
virtual const std::string & get_client_address() const
const notifier_config & get_notifier_config() const
std::string username
virtual uint16_t get_client_port() const
virtual const std::string & get_worker_address() const
int log_file_size
Definition: log_config.h:32
std::string address
virtual uint16_t get_worker_port() const
std::string log_path
Definition: log_config.h:15
const log_config & get_log_config() const
virtual size_t get_max_worker_liveness() const
std::string log_basename
Definition: log_config.h:19
virtual std::chrono::milliseconds get_worker_ping_interval() const
std::string password
virtual size_t get_max_request_failures() const