GreenCloud Simulator
dcrack.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
2 /*
3  */
4 
5 #include "dcrack.h"
6 
7 static class DcRackClass : public TclClass {
8 public:
9  DcRackClass() : TclClass("DcRack") {}
10  TclObject* create(int argc, const char*const*argv) {
11  return (new DcRack());
12  }
13 } class_dcrack;
14 
15 DcRack::DcRack(): rack_id_(0), stat_interval (0.0), breceived_(0), breceived_old_(0)
16 {
17  bind("rack_id_", &rack_id_);
18  bind("breceived_", &breceived_);
19  bind("stat_interval", &stat_interval);
20  bind("uplink_B", &uplink_B);
21 }
22 
24 {
25  hosts_list_.~vector();
26  qmon_uplink_list.~vector();
27 }
28 
30 
31  vector <QueueMonitor*>::iterator iter;
33  breceived_ = 0;
34 // link_load = 0;
35 
36  /* Update statistics on the number of bytes received */
37  for (iter = qmon_uplink_list.begin(); iter!=qmon_uplink_list.end(); iter++)
38  {
39  breceived_ += (*iter)->bdepartures_tot();
40  }
42  std::cerr << "ERROR in DcRack.cc: Byte counter overflow, consider resetting bdepartures_tot in qmon";
43  abort();
44  }
46  //TODO: fix the problem
47  link_load *=qmon_uplink_list.size();
48  if(link_load > 1 ){
49  link_load=1;
50  }
51 // std:cerr << "Rack " << this->rack_id_ << " link load\t" << link_load <<"\n";
52 }
53 
54 void DcRack::expire(Event* e){
55 
56  updatestats();
57  this->resched(stat_interval);
58 }
59 
61  hosts_list_.push_back(hst);
62  hst->rack_=this;
63 }
64 
65 int DcRack::command(int argc, const char*const* argv)
66 {
67  if (argc == 2) {
68  if (strcmp(argv[1], "update-stats") == 0) {
69  updatestats();
70  return (TCL_OK);
71  } else if (strcmp(argv[1], "start") == 0) {
72  expire(new Event());
73  return (TCL_OK);
74  }
75  } else if (argc == 3) {
76  if (strcmp(argv[1], "add-dchost") == 0) {
77  DcHost *hst = dynamic_cast<DcHost*> (TclObject::lookup(argv[2]));
78  if(hst){
79  addHost(hst);
80  return (TCL_OK);
81  }
82  return (TCL_ERROR);
83  }
84  else if (strcmp(argv[1], "add-uplink-qmon") == 0) {
85  QueueMonitor *uplinkqmon = dynamic_cast<QueueMonitor*> (TclObject::lookup(argv[2]));
86  if(uplinkqmon){
87  qmon_uplink_list.push_back(uplinkqmon);
88 
89  return (TCL_OK);
90  }
91  return (TCL_ERROR);
92  }
93  }
94  return (DcRack::command(argc, argv));
95 }
void addHost(DcHost *hst)
Definition: dcrack.cc:60
virtual ~DcRack()
Definition: dcrack.cc:23
DcRackClass()
Definition: dcrack.cc:9
virtual int command(int argc, const char *const *argv)
Definition: dcrack.cc:65
DcRack()
Definition: dcrack.cc:15
void updatestats()
Definition: dcrack.cc:29
double stat_interval
Definition: dcrack.h:16
DcRackClass class_dcrack
int breceived_old_
Definition: dcrack.h:33
int breceived_
Definition: dcrack.h:32
vector< QueueMonitor * > qmon_uplink_list
Definition: dcrack.h:24
DcRack * rack_
Definition: dchost.h:33
vector< DcHost * > hosts_list_
Definition: dcrack.h:23
Definition: dchost.h:27
int rack_id_
Definition: dcrack.h:15
Definition: dcrack.h:9
virtual void expire(Event *e)
Definition: dcrack.cc:54
double link_load
Definition: dcrack.h:17
TclObject * create(int argc, const char *const *argv)
Definition: dcrack.cc:10
double uplink_B
Definition: dcrack.h:18