OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mock_generator.cc
Go to the documentation of this file.
1 //
2 // Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3 //
4 
5 #include <sys/types.h>
6 #include <unistd.h>
7 
8 #include <boost/asio/ip/address.hpp>
9 #include <boost/asio/ip/host_name.hpp>
10 #include <boost/program_options.hpp>
11 #include <boost/assign/list_of.hpp>
12 #include <boost/uuid/random_generator.hpp>
13 #include <boost/random/mersenne_twister.hpp>
14 #include <boost/random/uniform_int_distribution.hpp>
15 #include <io/event_manager.h>
16 #include <base/address.h>
17 #include <base/task.h>
18 #include <base/logging.h>
19 #include <base/timer.h>
20 #include <sandesh/common/vns_constants.h>
21 #include <sandesh/common/vns_types.h>
22 #include <sandesh/common/flow_types.h>
23 #include <ksync/ksync_types.h>
24 
25 namespace opt = boost::program_options;
26 
27 typedef std::map<SessionIpPortProtocol, SessionAggInfo> SessionAggMap;
28 
30 public:
32  const static int kNumSessionSamplesPerSec;
33  const static int kNumSessionSamplesInMessage;
34 
35  MockGenerator(std::string &hostname, std::string &module_name,
36  std::string &node_type_name,
37  std::string &instance_id,
38  int http_server_port, int start_vn, int end_vn, int other_vn,
39  int num_vns, int vm_iterations,
40  std::vector<std::string> &collectors,
41  std::vector<uint32_t> &ip_vns,
42  int ip_start_index,
43  int num_vrouter_error_messages_per_sec,
44  int num_sessions_per_vm,
45  int num_session_samples_per_sec,
46  int num_session_samples_in_message,
47  EventManager *evm) :
48  hostname_(hostname),
49  module_name_(module_name),
50  node_type_name_(node_type_name),
51  instance_id_(instance_id),
52  http_server_port_(http_server_port),
53  start_vn_(start_vn),
54  end_vn_(end_vn),
55  other_vn_(other_vn),
56  num_vns_(num_vns),
57  vm_iterations_(vm_iterations),
58  collectors_(collectors),
59  ip_vns_(ip_vns),
60  ip_start_index_(ip_start_index),
61  num_session_per_vm_(num_sessions_per_vm),
62  num_session_samples_per_sec_(num_session_samples_per_sec),
63  num_session_samples_in_message_(num_session_samples_in_message),
64  num_vrouter_error_messages_per_sec_(num_vrouter_error_messages_per_sec),
65  rgen_(std::time(0)),
66  u_rgen_(&rgen_),
67  evm_(evm) {
68  }
69 
70  bool Run() {
71  // Initialize Sandesh
74  collectors_, NULL);
77  SendSessionTask *stask(new SendSessionTask(this,
78  scheduler->GetTaskId("mockgen::SendSessionTask"), -1));
79  scheduler->Enqueue(stask);
80  }
82  SendMessageTask *mtask(new SendMessageTask(this,
83  scheduler->GetTaskId("mockgen::SendMessageTask"), -1));
84  scheduler->Enqueue(mtask);
85  }
86  return true;
87  }
88 
89 private:
90 
91  class SendMessageTask : public Task {
92  public:
93  SendMessageTask(MockGenerator *mock_generator,
94  int task_id, int task_instance) :
95  Task(task_id, task_instance),
96  mgen_(mock_generator) {
97  }
98 
100  std::string str1("VRouter operation failed. Error <");
101  uint32_t error(2);
102  std::string str2(":");
103  std::string error_msg("Entry not pressent");
104  std::string str3(">. Object <");
105  std::string obj_str("Flow: 333333 with Source IP: "
106  "not present >. Object < Flow: 333333 with Source IP: "
107  "10.0.0.6 Source Port: 3333 Destination IP: 10.0.0.10 "
108  "Destination Port: 13333 Protocol 6");
109  std::string str4(">. Operation <");
110  std::string state_str("Change");
111  std::string str5(">. Message number :");
112  uint64_t msg_no(418940931);
113  V_ROUTER_ERROR_LOG("", SandeshLevel::SYS_DEBUG, str1, error,
114  str2, error_msg, str3, obj_str, str4, state_str, str5,
115  msg_no);
116  }
117 
118  bool Run() {
119  uint64_t diff_time(0);
120  for (int i = 0; i < mgen_->num_vrouter_error_messages_per_sec_;
121  i++) {
122  uint64_t stime(UTCTimestampUsec());
124  diff_time += UTCTimestampUsec() - stime;
125  if (diff_time >= 1000000) {
126  LOG(ERROR, "Sent: " << i + 1 << " in " <<
127  diff_time/1000000 << " seconds, NOT sending at " <<
129  return false;
130  }
131  }
132  usleep(1000000 - diff_time);
133  return false;
134  }
135 
136  std::string Description() const {
137  return "SendMessageTask";
138  }
139 
140  private:
142  };
143 
144 
145  class SendSessionTask : public Task {
146  public:
148  int task_id, int task_instance) :
149  Task(task_id, task_instance),
150  mgen_(mock_generator) {
151  }
152 
153  bool Run() {
154  if (mgen_->sessions_.empty()) {
155  int other_vn = mgen_->other_vn_;
156  for (int vn = mgen_->start_vn_; vn < mgen_->end_vn_; vn++) {
157  for (int nvm = 0; nvm < mgen_->vm_iterations_; nvm++) {
158  for (int nsession = 0; nsession < mgen_->num_session_per_vm_;
159  nsession++) {
160  SessionEndpoint end_point;
161  end_point.set_vmi(to_string(mgen_->u_rgen_()));
162  end_point.set_vn(mgen_->kVnPrefix +
163  integerToString(vn));
164  end_point.set_remote_vn(mgen_->kVnPrefix +
165  integerToString(other_vn));
166  end_point.set_is_client_session(mgen_->dClientSession(
167  mgen_->rgen_));
168  end_point.set_deployment(
170  end_point.set_tier(mgen_->kTier[mgen_->dTagIdx(
171  mgen_->rgen_)]);
172  end_point.set_application(
174  end_point.set_site(mgen_->kSite[mgen_->dTagIdx(
175  mgen_->rgen_)]);
176  end_point.set_remote_deployment(
178  end_point.set_remote_tier(
180  end_point.set_remote_application(
182  end_point.set_remote_site(mgen_->kSite[mgen_->dTagIdx(
183  mgen_->rgen_)]);
184  end_point.set_is_si(mgen_->dClientSession(mgen_->rgen_));
185  std::vector<std::string> labels;
186  std::vector<std::string> remote_labels;
187  int nlabels(mgen_->dLabels(mgen_->rgen_));
188  int nremote_labels(mgen_->dLabels(mgen_->rgen_));
189  for (int i = 0; i < nlabels + 1; i++) {
190  labels.push_back(
192  }
193  for (int i = 0; i < nremote_labels + 1; i++) {
194  remote_labels.push_back(
196  }
197  end_point.set_labels(
198  std::set<string>(labels.begin(),labels.end()));
199  end_point.set_remote_labels(
200  std::set<string>(remote_labels.begin(),remote_labels.end()));
201  SessionAggMap sess_agg_map;
202  int nsport = mgen_->dNPorts(mgen_->rgen_);
203  for (int i = 0; i < nsport; i++) {
204  IpAddress ipaddr(Ip4Address(mgen_->ip_vns_[vn] +
205  mgen_->ip_start_index_ + nvm));
206  uint16_t protoIdx(mgen_->dProtocols(mgen_->rgen_));
207  uint16_t port = mgen_->kPorts[protoIdx];
208  uint16_t proto = mgen_->kProtocols[protoIdx];
209  SessionIpPortProtocol sess_ip_port_proto;
210  sess_ip_port_proto.set_local_ip(ipaddr);
211  sess_ip_port_proto.set_service_port(port);
212  sess_ip_port_proto.set_protocol(proto);
213  SessionAggInfo place_holder;
214  sess_agg_map[sess_ip_port_proto];
215  }
216  end_point.set_sess_agg_info(sess_agg_map);
217  mgen_->sessions_.push_back(end_point);
218  }
219  }
220  other_vn = (other_vn + 1) % mgen_->num_vns_;
221  }
222  }
223 
224  int lsession_cnt = 0;
225  int last_lsession_cnt = 0;
226  uint64_t diff_time = 0;
227  std::vector<SessionEndpoint>::iterator begin(mgen_->sessions_.begin() +
229  for (std::vector<SessionEndpoint>::iterator it = begin;
230  it != mgen_->sessions_.end(); ++it) {
231  bool sent_message(false);
232  uint64_t stime = UTCTimestampUsec();
233  SessionEndpoint &end_point(*it);
234  SessionAggMap sess_agg_info_map;
235  for (SessionAggMap::const_iterator it2
236  = end_point.get_sess_agg_info().begin();
237  it2 != end_point.get_sess_agg_info().end(); ++it2) {
238  SessionAggInfo sess_agg_info;
239  std::map<SessionIpPort, SessionInfo> session_map;
240  int ncport = mgen_->dNPorts(mgen_->rgen_);
241  for (int i = 0; i < ncport; i++) {
242  uint16_t cport(mgen_->dPort(mgen_->rgen_));
243  int nips = mgen_->dIps(mgen_->rgen_);
244  for (int j = 0; j < nips; j++) {
245  int other_vn;
246  stringToInteger(end_point.get_remote_vn()
247  .substr(MockGenerator::kVnPrefix.length(),
248  std::string::npos), other_vn);
249  IpAddress ipaddr(Ip4Address(mgen_->ip_vns_[other_vn]
250  + mgen_->ip_start_index_ + j));
251  SessionIpPort sess_ip_port;
252  sess_ip_port.set_port(cport);
253  sess_ip_port.set_ip(ipaddr);
254  std::map<SessionIpPort, SessionInfo>::iterator iter
255  = session_map.find(sess_ip_port);
256  if (iter != session_map.end()) {
257  continue;
258  }
259  SessionInfo session_val;
260  SessionFlowInfo forward_flow_info;
261  SessionFlowInfo reverse_flow_info;
262  uint64_t forward_pkts(mgen_->dFlowPktsPerSec(
263  mgen_->rgen_));
264  uint64_t reverse_pkts(mgen_->dFlowPktsPerSec(
265  mgen_->rgen_));
266  // Send once in every 5 message as a logged message
267  if (j % 5 !=0 ) {
268  forward_flow_info.set_sampled_pkts(forward_pkts);
269  forward_flow_info.set_sampled_bytes(forward_pkts *
271  reverse_flow_info.set_sampled_pkts(reverse_pkts);
272  reverse_flow_info.set_sampled_bytes(reverse_pkts *
274  sess_agg_info.set_sampled_forward_pkts(
275  sess_agg_info.get_sampled_forward_pkts() +
276  forward_pkts);
277  sess_agg_info.set_sampled_forward_bytes(
278  sess_agg_info.get_sampled_forward_bytes() +
279  forward_flow_info.get_sampled_bytes());
280  sess_agg_info.set_sampled_reverse_pkts(
281  sess_agg_info.get_sampled_reverse_pkts() +
282  reverse_pkts);
283  sess_agg_info.set_sampled_reverse_bytes(
284  sess_agg_info.get_sampled_reverse_bytes() +
285  reverse_flow_info.get_sampled_bytes());
286  } else {
287  forward_flow_info.set_logged_pkts(forward_pkts);
288  forward_flow_info.set_logged_bytes(forward_pkts *
290  reverse_flow_info.set_logged_pkts(reverse_pkts);
291  reverse_flow_info.set_logged_bytes(reverse_pkts *
293  sess_agg_info.set_logged_forward_pkts(
294  sess_agg_info.get_logged_forward_pkts() +
295  forward_pkts);
296  sess_agg_info.set_logged_forward_bytes(
297  sess_agg_info.get_logged_forward_bytes() +
298  forward_flow_info.get_logged_bytes());
299  sess_agg_info.set_logged_reverse_pkts(
300  sess_agg_info.get_logged_reverse_pkts() +
301  reverse_pkts);
302  sess_agg_info.set_logged_reverse_bytes(
303  sess_agg_info.get_logged_reverse_bytes() +
304  reverse_flow_info.get_logged_bytes());
305  }
306  session_val.set_forward_flow_info(forward_flow_info);
307  session_val.set_reverse_flow_info(reverse_flow_info);
308  session_map[sess_ip_port] = session_val;
309  }
310  }
311  sess_agg_info.set_sessionMap(session_map);
312  sess_agg_info_map[it2->first] = sess_agg_info;
313  }
314  end_point.set_sess_agg_info(sess_agg_info_map);
315  lsession_cnt++;
317  SESSION_ENDPOINT_OBJECT_LOG("", SandeshLevel::SYS_NOTICE,
318  std::vector<SessionEndpoint>(begin+last_lsession_cnt, it + 1));
319  sent_message = true;
320  last_lsession_cnt = lsession_cnt;
321  if (lsession_cnt == mgen_->num_session_samples_per_sec_) {
322  if (!sent_message) {
323  SESSION_ENDPOINT_OBJECT_LOG("", SandeshLevel::SYS_NOTICE,
324  std::vector<SessionEndpoint>(begin+last_lsession_cnt, it + 1));
325  }
326  diff_time += UTCTimestampUsec() - stime;
327  usleep(1000000 - diff_time);
328  return false;
329  }
330  diff_time += UTCTimestampUsec() - stime;
331  if (diff_time >= 1000000) {
332  if (lsession_cnt < mgen_->num_session_samples_per_sec_) {
333  LOG(ERROR, "Sent: " << lsession_cnt << " in " <<
334  diff_time/1000000 << " seconds, NOT sending at " <<
335  mgen_->num_session_samples_per_sec_ << " rate");
336  return false;
337  }
338  }
339 
340  }
341  mgen_->session_counter_ = 0;
342  return false;
343  }
344 
345  std::string Description() const {
346  return "SendSessionTask";
347  }
348  private:
350  };
351 
352  const static std::string kVnPrefix;
353  const static std::string kVmPrefix;
354  const static int kBytesPerPacket = 1024;
355  const static int kOtherVnPktsPerSec = 1000;
356  const static int kUveMsgIntvlInSec = 10;
357  const static int kFlowMsgIntvlInSec = 1;
358  const static int kFlowPktsPerSec = 100;
359  const static int kMaxIps = 64;
360  const static int kMaxPorts = 5;
361 
362  const static boost::random::uniform_int_distribution<>
364  const static boost::random::uniform_int_distribution<>
366  const static boost::random::uniform_int_distribution<>
368  const static boost::random::uniform_int_distribution<>
370  const static boost::random::uniform_int_distribution<>
372  const static boost::random::uniform_int_distribution<>
374  const static boost::random::uniform_int_distribution<>
376  const static boost::random::uniform_int_distribution<>
378  const static boost::random::uniform_int_distribution<>
380  const static std::vector<int> kProtocols;
381  const static boost::random::uniform_int_distribution<>
383  const static boost::random::uniform_int_distribution<>
385  const static std::vector<string> kLabels;
386  const static std::vector<std::string> kDeployment;
387  const static std::vector<std::string> kTier;
388  const static std::vector<std::string> kSite;
389  const static std::vector<std::string> kApplication;
390  const static std::vector<int> kPorts;
391  const std::string hostname_;
392  const std::string module_name_;
393  const std::string node_type_name_;
394  const std::string instance_id_;
395  const int http_server_port_;
396  const int start_vn_;
397  const int end_vn_;
398  const int other_vn_;
399  const int num_vns_;
400  const int vm_iterations_;
401  const std::vector<std::string> collectors_;
402  const std::vector<uint32_t> ip_vns_;
403  const int ip_start_index_;
408  std::vector<SessionEndpoint> sessions_;
409  static int session_counter_;
410  boost::random::mt19937 rgen_;
411  boost::uuids::random_generator u_rgen_;
413 
414  friend class SendMessageTask;
415 };
416 
417 const std::string MockGenerator::kVnPrefix("default-domain:mock-gen-test:vn");
418 const std::string MockGenerator::kVmPrefix("vm");
419 const boost::random::uniform_int_distribution<>
421 const boost::random::uniform_int_distribution<>
423 const boost::random::uniform_int_distribution<>
425 const boost::random::uniform_int_distribution<>
427 const boost::random::uniform_int_distribution<>
429 const boost::random::uniform_int_distribution<>
430  MockGenerator::dPort(0, 65535);
431 const std::vector<int> MockGenerator::kProtocols = boost::assign::list_of
432  (6)(17)(1);
433 const boost::random::uniform_int_distribution<>
435 const std::vector<int> MockGenerator::kPorts = boost::assign::list_of
436  (443)(8080)(22);
437 const std::vector<std::string> MockGenerator::kDeployment = boost::assign::list_of
438  ("Dep1")("Dep2")("Dep3")("Dep4");
439 const std::vector<std::string> MockGenerator::kTier = boost::assign::list_of
440  ("Tier1")("Tier2")("Tier3")("Tier4");
441 const std::vector<std::string> MockGenerator::kApplication = boost::assign::list_of
442  ("App1")("App2")("App3")("App4");
443 const std::vector<std::string> MockGenerator::kSite = boost::assign::list_of
444  ("Site1")("Site2")("Site3")("Site4");
445 const std::vector<std::string> MockGenerator::kLabels = boost::assign::list_of
446  ("Label1")("Label2")("Label3")("Label4")("Label5");
447 const boost::random::uniform_int_distribution<>
448  MockGenerator::dTagIdx(0, MockGenerator::kDeployment.size() - 1);
449 const boost::random::uniform_int_distribution<>
451 const boost::random::uniform_int_distribution<>
453 const boost::random::uniform_int_distribution<>
454  MockGenerator::dLabels(0, MockGenerator::kLabels.size() - 1);
455 
460 
461 int main(int argc, char *argv[]) {
462  bool log_local(false), use_syslog(false), log_flow(false);
463  std::string log_category;
464  opt::options_description desc("Command line options");
465  desc.add_options()
466  ("help", "help message")
467  ("collectors", opt::value<std::vector<std::string> >()->multitoken(
468  )->default_value(std::vector<std::string>(1, "127.0.0.1:8086"),
469  "127.0.0.1:8086"),
470  "List of Collectors addresses in ip:port format")
471  ("num_instances_per_generator", opt::value<int>()->default_value(10),
472  "Number of instances (virtual machines) per generator")
473  ("num_networks", opt::value<int>()->default_value(100),
474  "Number of virtual networks")
475  ("num_sessions_per_instance", opt::value<int>()->default_value(10),
476  "Number of sessions per instance")
477  ("start_ip_address",
478  opt::value<std::string>()->default_value("1.0.0.1"),
479  "Start IP address to be used for instances")
480  ("http_server_port", opt::value<int>()->default_value(-1),
481  "HTTP server port")
482  ("generator_id", opt::value<int>()->default_value(0),
483  "Generator Id")
484  ("num_generators", opt::value<int>()->default_value(1),
485  "Number of generators")
486  ("num_vrouter_errors_per_second", opt::value<int>()->default_value(
488  "Number of VRouterErrror messages to send in one second")
489  ("num_session_samples_per_second", opt::value<int>()->default_value(
491  "Number of session messages to send in one second")
492  ("num_session_samples_in_message", opt::value<int>()->default_value(
494  "Number of session samples to send in one message")
495  ("log_property_file", opt::value<std::string>()->default_value(""),
496  "log4cplus property file name")
497  ("log_files_count", opt::value<int>()->default_value(10),
498  "Maximum log file roll over index")
499  ("log_file_size",
500  opt::value<long>()->default_value(10*1024*1024),
501  "Maximum size of the log file")
502  ("log_category",
503  opt::value<std::string>()->default_value(log_category),
504  "Category filter for local logging of sandesh messages")
505  ("log_file", opt::value<std::string>()->default_value("<stdout>"),
506  "Filename for the logs to be written to")
507  ("log_level", opt::value<std::string>()->default_value("SYS_NOTICE"),
508  "Severity level for local logging of sandesh messages")
509  ("log_local", opt::bool_switch(&log_local),
510  "Enable local logging of sandesh messages")
511  ("use_syslog", opt::bool_switch(&use_syslog),
512  "Enable logging to syslog")
513  ("syslog_facility", opt::value<std::string>()->default_value(
514  "LOG_LOCAL0"), "Syslog facility to receive log lines")
515  ("log_flow", opt::bool_switch(&log_flow),
516  "Enable local logging of flow sandesh messages")
517  ("slo_destination", opt::value<std::vector<std::string> >()->multitoken(
518  )->default_value(std::vector<std::string>(1, "collector"),
519  "collector"),
520  "List of destinations. valid values are collector, file, syslog")
521  ("sampled_destination", opt::value<std::vector<std::string> >()->multitoken(
522  )->default_value(std::vector<std::string>(1, "collector"),
523  "collector"),
524  "List of destinations. valid values are collector, file, syslog");
525 
526  opt::variables_map var_map;
527  opt::store(opt::parse_command_line(argc, argv, desc), var_map);
528  opt::notify(var_map);
529 
530  if (var_map.count("help")) {
531  std::cout << desc << std::endl;
532  exit(0);
533  }
534 
535  Module::type module(Module::VROUTER_AGENT);
536  std::string moduleid(g_vns_constants.ModuleNames.find(module)->second);
537  std::string log_property_file(
538  var_map["log_property_file"].as<std::string>());
539  if (log_property_file.size()) {
540  LoggingInit(log_property_file);
541  } else {
542  LoggingInit(var_map["log_file"].as<std::string>(),
543  var_map["log_file_size"].as<long>(),
544  var_map["log_files_count"].as<int>(),
545  use_syslog,
546  var_map["syslog_facility"].as<std::string>(),
547  moduleid,
549  var_map["log_level"].as<std::string>())));
550  }
551  Sandesh::SetLoggingParams(log_local,
552  var_map["log_category"].as<std::string>(),
553  var_map["log_level"].as<std::string>(), false, log_flow);
554 
555  std::vector<std::string> slo_destination(
556  var_map["slo_destination"].as<std::vector<std::string> >());
557  std::vector<std::string> sample_destination(
558  var_map["sampled_destination"].as<std::vector<std::string> >());
559  Sandesh::set_logger_appender(var_map["log_file"].as<std::string>(),
560  var_map["log_file_size"].as<long>(),
561  var_map["log_files_count"].as<int>(),
562  var_map["syslog_facility"].as<std::string>(),
563  slo_destination,
564  moduleid, false);
565 
566  Sandesh::set_logger_appender(var_map["log_file"].as<std::string>(),
567  var_map["log_file_size"].as<long>(),
568  var_map["log_files_count"].as<int>(),
569  var_map["syslog_facility"].as<std::string>(),
570  sample_destination,
571  moduleid, true);
572 
573  Sandesh::set_send_to_collector_flags(sample_destination, slo_destination);
574 
575  int gen_id(var_map["generator_id"].as<int>());
576  int ngens(var_map["num_generators"].as<int>());
577  int pid(getpid());
578  int num_instances(var_map["num_instances_per_generator"].as<int>());
579  int num_networks(var_map["num_networks"].as<int>());
580  NodeType::type node_type(
581  g_vns_constants.Module2NodeType.find(module)->second);
582  std::string node_type_name(
583  g_vns_constants.NodeTypeNames.find(node_type)->second);
584  int http_server_port(var_map["http_server_port"].as<int>());
585  std::vector<std::string> collectors(
586  var_map["collectors"].as<std::vector<std::string> >());
587 
588  boost::system::error_code ec;
589  std::string hostname(boost::asio::ip::host_name(ec));
590  if (ec) {
591  LOG(ERROR, "Hostname FAILED: " << ec);
592  exit(1);
593  }
594  hostname += "-" + integerToString(pid);
595  int gen_factor = num_networks / num_instances;
596  if (gen_factor == 0) {
597  LOG(ERROR, "Number of virtual networks(" << num_networks << ") should "
598  "be greater than number of instances per generator(" <<
599  num_instances << ")");
600  exit(1);
601  }
602  int start_vn((gen_id % gen_factor) * num_instances);
603  int end_vn(((gen_id % gen_factor) + 1) * num_instances);
604  int other_vn_adj(num_networks / 2);
605  int other_vn;
606  if (gen_id >= other_vn_adj) {
607  other_vn = gen_id - other_vn_adj;
608  } else {
609  other_vn = gen_id + other_vn_adj;
610  }
611  int instance_iterations((num_instances + num_networks - 1) / num_networks);
612  int num_ips_per_vn(((ngens * num_instances) + num_networks - 1) /
613  num_networks);
614  std::string start_ip(var_map["start_ip_address"].as<std::string>());
615  boost::asio::ip::address_v4 start_ip_address(
616  boost::asio::ip::address_v4::from_string(start_ip.c_str(), ec));
617  if (ec) {
618  LOG(ERROR, "IP Address (" << start_ip << ") FAILED: " << ec);
619  exit(1);
620  }
621  std::vector<uint32_t> ip_vns;
622  for (int num = 0; num < num_networks; num++) {
623  ip_vns.push_back(start_ip_address.to_ulong() +
624  num_ips_per_vn * num);
625  }
626  int start_ip_index(gen_id * num_instances / num_networks);
627 
629  int num_sessions_per_instance(var_map["num_sessions_per_instance"].as<int>());
630  int num_session_samples_per_sec(
631  var_map["num_session_samples_per_second"].as<int>());
632  int num_session_samples_in_message(
633  var_map["num_session_samples_in_message"].as<int>());
634  int num_vrouter_error_messages_per_sec(
635  var_map["num_vrouter_errors_per_second"].as<int>());
636  std::string instance_id(integerToString(gen_id));
637  MockGenerator mock_generator(hostname, moduleid, node_type_name,
638  instance_id, http_server_port, start_vn, end_vn, other_vn,
639  num_networks, instance_iterations, collectors, ip_vns, start_ip_index,
640  num_vrouter_error_messages_per_sec,
641  num_sessions_per_instance, num_session_samples_per_sec,
642  num_session_samples_in_message, &evm);
643  mock_generator.Run();
644  evm.Run();
645  return 0;
646 }
const int end_vn_
log4cplus::LogLevel SandeshLevelTolog4Level(SandeshLevel::type slevel)
Definition: sandesh.cc:395
static int session_counter_
static const boost::random::uniform_int_distribution dProtocols
const int start_vn_
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
Definition: task.h:178
static const int kFlowPktsPerSec
static SandeshLevel::type StringToLevel(std::string level)
Definition: sandesh.cc:861
boost::uuids::random_generator u_rgen_
static const std::vector< std::string > kTier
static const int kNumSessionSamplesInMessage
const int num_vns_
static const std::vector< string > kLabels
static const boost::random::uniform_int_distribution dLabels
static const int kMaxPorts
static void SetLoggingParams(bool enable_local_log, std::string category, std::string level, bool enable_trace_print=false, bool enable_flow_log=false, bool enable_session_syslog=false)
Definition: sandesh.cc:369
boost::asio::ip::address IpAddress
Definition: address.h:13
static const std::vector< std::string > kApplication
const int num_session_samples_per_sec_
bool stringToInteger(const std::string &str, NumberType &num)
Definition: string_util.h:71
std::map< SessionIpPortProtocol, SessionAggInfo > SessionAggMap
static const std::vector< std::string > kSite
static const std::string kVnPrefix
static const boost::random::uniform_int_distribution dDirection
static const int kFlowMsgIntvlInSec
static const boost::random::uniform_int_distribution dPort
std::vector< SessionEndpoint > sessions_
EventManager * evm_
std::string Description() const
const int num_session_per_vm_
friend class SendMessageTask
int GetTaskId(const std::string &name)
Definition: task.cc:856
static const std::vector< int > kPorts
static const int kMaxIps
static const int kUveMsgIntvlInSec
const std::vector< std::string > collectors_
uint8_t type
Definition: load_balance.h:109
static const int kBytesPerPacket
static const std::string integerToString(const NumberType &num)
Definition: string_util.h:19
std::string Description() const
const std::string hostname_
static TaskScheduler * GetInstance()
Definition: task.cc:547
void Enqueue(Task *task)
Enqueues a task for running. Starts task if all policy rules are met else puts task in waitq...
Definition: task.cc:636
SendMessageTask(MockGenerator *mock_generator, int task_id, int task_instance)
const int num_vrouter_error_messages_per_sec_
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task...
static const std::vector< int > kProtocols
SendSessionTask(MockGenerator *mock_generator, int task_id, int task_instance)
void LoggingInit()
Definition: logging.cc:51
static const int kOtherVnPktsPerSec
const int vm_iterations_
MockGenerator(std::string &hostname, std::string &module_name, std::string &node_type_name, std::string &instance_id, int http_server_port, int start_vn, int end_vn, int other_vn, int num_vns, int vm_iterations, std::vector< std::string > &collectors, std::vector< uint32_t > &ip_vns, int ip_start_index, int num_vrouter_error_messages_per_sec, int num_sessions_per_vm, int num_session_samples_per_sec, int num_session_samples_in_message, EventManager *evm)
static const boost::random::uniform_int_distribution dIps
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
static const boost::random::uniform_int_distribution dTagIdx
static const int kNumSessionSamplesPerSec
const std::string module_name_
static const boost::random::uniform_int_distribution dBytesPerPacket
const int ip_start_index_
const std::string node_type_name_
static bool InitGenerator(const std::string &module, const std::string &source, const std::string &node_type, const std::string &instance_id, EventManager *evm, unsigned short http_port, const std::vector< std::string > &collectors, SandeshContext *client_context=NULL, DerivedStats ds=DerivedStats(), const SandeshConfig &config=SandeshConfig())
Definition: sandesh.cc:271
static const int kNumVRouterErrorMessagesPerSec
static uint64_t UTCTimestampUsec()
Definition: time_util.h:13
boost::random::mt19937 rgen_
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task...
static const std::string kVmPrefix
const std::string instance_id_
const int num_session_samples_in_message_
#define LOG(_Level, _Msg)
Definition: logging.h:33
const int other_vn_
static const boost::random::uniform_int_distribution dOtherVnPktsPerSec
static void set_logger_appender(const std::string &file_name, long max_file_size, int max_backup_index, const std::string &syslog_facility, const std::vector< std::string > &destn, const std::string &ident, bool is_sampled_logger)
Definition: sandesh.cc:1003
const std::vector< uint32_t > ip_vns_
static const boost::random::uniform_int_distribution dFlowPktsPerSec
const int http_server_port_
Task is a wrapper over tbb::task to support policies.
Definition: task.h:86
static const std::vector< std::string > kDeployment
static void set_send_to_collector_flags(const std::vector< std::string > &sampled_destination, const std::vector< std::string > &slo_destination)
Definition: sandesh.cc:1056
static const boost::random::uniform_int_distribution dNPorts
static EventManager evm
static const boost::random::uniform_int_distribution dClientSession