24 using namespace boost::uuids;
25 using namespace boost::asio;
28 agent_(agent), vm_uuid_(vm_uuid), mem_usage_(0),
29 virt_memory_(0), virt_memory_peak_(0), vm_memory_quota_(0),
30 prev_cpu_stat_(0), cpu_usage_(0),
31 prev_cpu_snapshot_time_(0), prev_vcpu_snapshot_time_(0),
32 input_(*(agent_->event_manager()->io_service())),
33 timer_(
TimerManager::CreateTimer(*(agent_->event_manager())->io_service(),
34 "VmStatTimer")), marked_delete_(false), pid_(0), retry_(0), virtual_size_(0),
35 disk_size_(0), disk_name_(),
36 vm_state_(VrouterAgentVmState::VROUTER_AGENT_VM_UNKNOWN),
37 prev_vm_state_(VrouterAgentVmState::VROUTER_AGENT_VM_UNKNOWN),
38 vm_cpu_count_(kInvalidCpuCount), prev_vm_cpu_count_(kInvalidCpuCount) {
46 size_t read_bytes,
DoneCb &cb) {
52 boost::system::error_code close_ec;
65 placeholders::bytes_transferred, cb));
76 char shell[80] =
"/bin/sh";
77 char option[80] =
"-c";
79 memset(ccmd, 0,
sizeof(ccmd));
80 strncpy(ccmd, cmd.c_str(),
sizeof(ccmd)-1);
95 dup2(out[1], STDOUT_FILENO);
101 execvp(argv[0], argv);
109 boost::system::error_code ec;
110 int fd = ::dup(out[0]);
124 placeholders::bytes_transferred, cb));
130 std::vector<VmCpuStats> cpu_stats_list;
141 cpu_stats_list.push_back(stats);
142 uve->set_cpu_stats(cpu_stats_list);
159 uve->set_cpu_info(stats);
162 if (
vm_state_ != VrouterAgentVmState::VROUTER_AGENT_VM_UNKNOWN) {
164 uve->set_vm_state(vns.VrouterAgentVmStateMap.at(
vm_state_));
189 VirtualMachineStats vm_agent;
195 UveVirtualMachineAgent vm_msg;
static void CloseTaskFds(void)
void ExecCmd(std::string cmd, DoneCb cb)
virtual void DispatchVmStatsMsg(const VirtualMachineStats &uve)
AgentUveBase * uve() const
bool BuildVmMsg(UveVirtualMachineAgent *uve)
VrouterAgentVmState::type vm_state_
static const uint32_t kRetryCount
static std::string UuidToString(const boost::uuids::uuid &id)
bool BuildVmStatsMsg(VirtualMachineStats *uve)
void ReadData(const boost::system::error_code &ec, size_t read_bytes, DoneCb &cb)
uint16_t prev_vm_cpu_count_
VmUveTableBase * vm_uve_table() const
VrouterAgentVmState::type prev_vm_state_
uint32_t virt_memory_peak_
VmStat(Agent *agent, const boost::uuids::uuid &vm_uuid)
uint32_t vmi_vm_vn_uve_interval_msecs() const
AgentParam * params() const
uint32_t vm_memory_quota_
virtual void DispatchVmMsg(const UveVirtualMachineAgent &uve)
void EnqueueVmStatData(VmStatData *data)
virtual bool TimerExpiry()
boost::asio::posix::stream_descriptor input_
bool Start(int time, Handler handler, ErrorHandler error_handler=NULL)
static const uint16_t kInvalidCpuCount
boost::function< void(void)> DoneCb
static const size_t kBufLen
const boost::uuids::uuid vm_uuid_
static bool DeleteTimer(Timer *Timer)