OpenSDN source code
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<>
449 const boost::random::uniform_int_distribution<>
451 const boost::random::uniform_int_distribution<>
453 const boost::random::uniform_int_distribution<>
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 }
boost::asio::ip::address IpAddress
Definition: address.h:13
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
std::string Description() const
SendMessageTask(MockGenerator *mock_generator, int task_id, int task_instance)
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task.
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task.
std::string Description() const
SendSessionTask(MockGenerator *mock_generator, int task_id, int task_instance)
static const boost::random::uniform_int_distribution dProtocols
static const boost::random::uniform_int_distribution dIps
static const boost::random::uniform_int_distribution dTagIdx
static const boost::random::uniform_int_distribution dClientSession
static const std::vector< int > kPorts
const int num_vns_
static const int kNumSessionSamplesPerSec
static const std::vector< std::string > kTier
static const std::string kVnPrefix
EventManager * evm_
const int ip_start_index_
const int num_vrouter_error_messages_per_sec_
static const boost::random::uniform_int_distribution dPort
static const std::string kVmPrefix
static const int kMaxIps
boost::uuids::random_generator u_rgen_
static const boost::random::uniform_int_distribution dFlowPktsPerSec
const int num_session_samples_per_sec_
const int http_server_port_
static const int kBytesPerPacket
friend class SendMessageTask
static const int kFlowPktsPerSec
const std::string module_name_
static const std::vector< std::string > kDeployment
boost::random::mt19937 rgen_
static const int kMaxPorts
const int num_session_per_vm_
const std::string node_type_name_
const int num_session_samples_in_message_
const int vm_iterations_
static const std::vector< std::string > kApplication
static int session_counter_
const int start_vn_
static const int kFlowMsgIntvlInSec
static const boost::random::uniform_int_distribution dNPorts
const int end_vn_
static const int kOtherVnPktsPerSec
static const std::vector< string > kLabels
const std::vector< uint32_t > ip_vns_
static const int kNumSessionSamplesInMessage
static const boost::random::uniform_int_distribution dOtherVnPktsPerSec
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)
std::vector< SessionEndpoint > sessions_
const std::vector< std::string > collectors_
static const int kUveMsgIntvlInSec
static const std::vector< std::string > kSite
static const boost::random::uniform_int_distribution dDirection
static const std::vector< int > kProtocols
const std::string instance_id_
static const boost::random::uniform_int_distribution dLabels
const std::string hostname_
static const boost::random::uniform_int_distribution dBytesPerPacket
const int other_vn_
static const int kNumVRouterErrorMessagesPerSec
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 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 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
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
static SandeshLevel::type StringToLevel(std::string level)
Definition: sandesh.cc:861
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
Definition: task.h:178
int GetTaskId(const std::string &name)
Definition: task.cc:856
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
static TaskScheduler * GetInstance()
Definition: task.cc:547
Task is a wrapper over tbb::task to support policies.
Definition: task.h:86
static EventManager evm
uint8_t type
Definition: load_balance.h:2
void LoggingInit()
Definition: logging.cc:51
#define LOG(_Level, _Msg)
Definition: logging.h:33
std::map< SessionIpPortProtocol, SessionAggInfo > SessionAggMap
log4cplus::LogLevel SandeshLevelTolog4Level(SandeshLevel::type slevel)
Definition: sandesh.cc:395
bool stringToInteger(const std::string &str, NumberType &num)
Definition: string_util.h:71
static const std::string integerToString(const NumberType &num)
Definition: string_util.h:19
static uint64_t UTCTimestampUsec()
Definition: time_util.h:13