OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vm_uve_table.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
6 #include <uve/vm_uve_table.h>
7 #include <uve/vm_uve_entry.h>
8 #include <uve/agent_uve.h>
9 #include <uve/vm_stat_kvm.h>
10 #include <uve/vm_stat_docker.h>
11 
12 VmUveTable::VmUveTable(Agent *agent, uint32_t default_intvl)
13  : VmUveTableBase(agent, default_intvl) {
15  (TaskScheduler::GetInstance()->GetTaskId("Agent::VmUve"), 0,
16  boost::bind(&VmUveTable::Process, this, _1)));
17  event_queue_->set_name("Virtual-Machine UVE");
18 }
19 
21 }
22 
23 void VmUveTable::UpdateBitmap(const VmEntry* vm, uint8_t proto,
24  uint16_t sport, uint16_t dport) {
25  tbb::mutex::scoped_lock lock(uve_vm_map_mutex_);
26  UveVmMap::iterator it = uve_vm_map_.find(vm->GetUuid());
27  if (it != uve_vm_map_.end()) {
28  VmUveEntry *entry = static_cast<VmUveEntry *>(it->second.get());
29  entry->UpdatePortBitmap(proto, sport, dport);
30  }
31 }
32 
34  VmUveEntryPtr uve(new VmUveEntry(agent_, vm->GetCfgName()));
35  return uve;
36 }
37 
39  VmUveEntry* entry = static_cast<VmUveEntry*>(UveEntryFromVm(u));
40  if (entry == NULL) {
41  return;
42  }
43  if (entry->deleted()) {
44  /* Skip entry marked for delete because the 'vm' pointer could be
45  * invalid */
46  return;
47  }
48  UveVirtualMachineAgent uve;
49 
50  bool send = entry->FrameVmStatsMsg(&uve);
51  if (send) {
52  DispatchVmMsg(uve);
53  }
54 }
55 
57  //Create object to poll for VM stats
58  VmStat *stat = NULL;
59  if (agent_->isKvmMode()) {
60  stat = new VmStatKvm(agent_, vm->GetUuid());
61  } else if (agent_->isDockerMode()) {
62  stat = new VmStatDocker(agent_, vm->GetUuid());
63  }
64 
65  if (stat) {
66  stat->Start();
67  state->stat_ = stat;
68  }
69 }
70 
72  if (state->stat_) {
73  state->stat_->Stop();
74  state->stat_ = NULL;
75  }
76 }
77 
79  event_queue_->Enqueue(data);
80 }
81 
82 bool VmUveTable::Process(VmStatData* vm_stat_data) {
83  if (vm_stat_data->vm_stat()->marked_delete()) {
84  delete vm_stat_data->vm_stat();
85  } else {
86  vm_stat_data->vm_stat()->ProcessData();
87  }
88  delete vm_stat_data;
89  return true;
90 }
91 
92 void VmUveTable::DispatchVmStatsMsg(const VirtualMachineStats &uve) {
93  VirtualMachineStatsTrace::Send(uve);
94 }
95 
97  UveVmMap::iterator it = uve_vm_map_.begin();
98  while (it != uve_vm_map_.end()) {
99  SendVmStatsMsg(it->first);
100  it++;
101  }
102 }
103 
104 void VmUveTable::SendVmDeleteMsg(const string &vm_config_name) {
105  VmUveTableBase::SendVmDeleteMsg(vm_config_name);
106 
107  VirtualMachineStats stats_uve;
108  stats_uve.set_name(vm_config_name);
109  stats_uve.set_deleted(true);
110  DispatchVmStatsMsg(stats_uve);
111 }
tbb::mutex uve_vm_map_mutex_
VmUveEntryBase * UveEntryFromVm(const boost::uuids::uuid &u)
void ProcessData()
Definition: vm_stat.cc:69
const string & GetCfgName() const
Definition: vm.h:43
virtual void DispatchVmStatsMsg(const VirtualMachineStats &uve)
Definition: vm_uve_table.cc:92
virtual void VmStatCollectionStop(VmUveVmState *state)
Definition: vm_uve_table.cc:71
Definition: vm.h:32
virtual ~VmUveTable()
Definition: vm_uve_table.cc:20
boost::uuids::uuid uuid
Definition: vm_stat.h:17
const boost::uuids::uuid & GetUuid() const
Definition: vm.h:46
boost::shared_ptr< VmUveEntryBase > VmUveEntryPtr
bool isDockerMode()
Definition: agent.cc:149
VmUveTable(Agent *agent, uint32_t default_intvl)
Definition: vm_uve_table.cc:12
void UpdatePortBitmap(uint8_t proto, uint16_t sport, uint16_t dport)
Definition: vm_uve_entry.cc:18
virtual void SendVmDeleteMsg(const std::string &vm_config_name)
void Stop()
Definition: vm_stat.cc:214
Definition: agent.h:358
boost::scoped_ptr< WorkQueue< VmStatData * > > event_queue_
Definition: vm_uve_table.h:32
static TaskScheduler * GetInstance()
Definition: task.cc:547
bool FrameVmStatsMsg(UveVirtualMachineAgent *uve)
Definition: vm_uve_entry.cc:68
void UpdateBitmap(const VmEntry *vm, uint8_t proto, uint16_t sport, uint16_t dport)
Definition: vm_uve_table.cc:23
virtual void DispatchVmMsg(const UveVirtualMachineAgent &uve)
virtual void Start()
Definition: vm_stat.cc:211
virtual void VmStatCollectionStart(VmUveVmState *state, const VmEntry *vm)
Definition: vm_uve_table.cc:56
void EnqueueVmStatData(VmStatData *data)
Definition: vm_uve_table.cc:78
virtual void SendVmDeleteMsg(const std::string &vm_config_name)
bool deleted() const
bool isKvmMode()
Definition: agent.cc:145
virtual VmUveEntryPtr Allocate(const VmEntry *vm)
Definition: vm_uve_table.cc:33
bool marked_delete() const
Definition: vm_stat.h:26
bool Process(VmStatData *vm_stat_data)
Definition: vm_uve_table.cc:82
void SendVmStats(void)
Definition: vm_uve_table.cc:96
void SendVmStatsMsg(const boost::uuids::uuid &u)
Definition: vm_uve_table.cc:38
VmStat * vm_stat() const
Definition: vm_stat_data.h:16