23 using namespace boost::uuids;
24 using namespace boost::asio;
27 :
VmStat(agent, vm_uuid), container_id_() {
42 std::string cpu_stat_str;
43 data_ >> cpu_stat_str;
45 if (!cpu_stat_str.empty()) {
47 std::stringstream ss(cpu_stat_str);
74 std::ostringstream proc_file;
75 proc_file <<
"/proc/"<<
pid_<<
"/status";
76 std::ifstream file(proc_file.str().c_str());
82 while (std::getline(file, line)) {
83 if (line.find(
"VmSize") != std::string::npos) {
84 std::stringstream vm(line);
88 if (line.find(
"VmRSS") != std::string::npos) {
89 std::stringstream vm(line);
95 if (line.find(
"VmPeak") != std::string::npos) {
96 std::stringstream vm(line);
100 if (rss && vmsize && peak)
113 std::ostringstream cmd;
120 std::ostringstream cmd;
131 std::ostringstream cmd;
132 cmd <<
"docker inspect " <<
container_id_ <<
"| grep -A3 \\\"Paused\\\":";
143 string tmp, paused_str, pid_str, running_str;
144 while (
data_ >> tmp) {
145 if (tmp.find(
"Paused") != std::string::npos) {
148 if (tmp.find(
"Pid") != std::string::npos) {
151 if (tmp.find(
"Running") != std::string::npos) {
152 data_ >> running_str;
158 if (pid_str.size() >= 2) {
159 pid_str.erase(pid_str.size() - 1);
161 std::stringstream ss(pid_str);
165 vm_state_ = VrouterAgentVmState::VROUTER_AGENT_VM_UNKNOWN;
166 if (paused_str ==
"true,") {
167 vm_state_ = VrouterAgentVmState::VROUTER_AGENT_VM_PAUSED;
168 }
else if (running_str ==
"false,") {
169 vm_state_ = VrouterAgentVmState::VROUTER_AGENT_VM_SHUTDOWN;
170 }
else if (running_str ==
"true,") {
171 vm_state_ = VrouterAgentVmState::VROUTER_AGENT_VM_ACTIVE;
180 while (
data_ >> tmp) {
181 if (tmp ==
"hierarchical_memory_limit") {
185 vm_memory_quota_/= 1024;
211 if (!container_id_.empty()) {
224 std::ostringstream cmd;
226 <<
" | awk '{ print $1 }'";
VmStatDocker(Agent *agent, const boost::uuids::uuid &vm_uuid)
time_t prev_cpu_snapshot_time_
void ExecCmd(std::string cmd, DoneCb cb)
VrouterAgentVmState::type vm_state_
static const uint32_t kRetryCount
uint32_t virt_memory_peak_
uint32_t vm_memory_quota_
static const long kOneSecInNanoSecs
std::string container_id_
std::string GetUuidStr(boost::uuids::uuid uuid_val) const
const boost::uuids::uuid vm_uuid_