inline void START_MSG(const char * name, uint64 appuid) { MachineInfos machineInfo; std::string s = (boost::format("---- %1% " "Version: %2%. " "ScriptVersion: %3%. " "Config: %4%. " "Built: %5% %6%. " "AppUID: %7%. " "UID: %8%. " "PID: %9% ----\n") % name % KBEVersion::versionString() % KBEVersion::scriptVersionString() % KBE_CONFIG % __TIME__ % __DATE__ % appuid % getUserUID() % getProcessPID()).str(); INFO_MSG(s); #if KBE_PLATFORM == PLATFORM_WIN32 printf("%s", s.c_str()); #endif s = (boost::format("Server %1%: %2% with %3% RAM\n") % machineInfo.machineName().c_str() % machineInfo.cpuInfo().c_str() % machineInfo.memInfo().c_str() ).str(); INFO_MSG(s); #if KBE_PLATFORM == PLATFORM_WIN32 printf("%s\n", s.c_str()); #endif }
//------------------------------------------------------------------------------------- uint64 SystemInfo::getMemUsedByPID(uint32 pid) { if(pid == 0) { pid = (uint32)getProcessPID(); } int status; sigar_uint64_t total = 0; bool tryed = false; _TRYGET: if(!hasPID(pid, &_g_proclist)) { DEBUG_MSG(fmt::format("SystemInfo::getMemUsedByPID: error: not found pid({})\n", pid)); if(!tryed) { clear(); tryed = true; if(_autocreate()) goto _TRYGET; } return 0; } //for (i=0; i<(int)proclist.number; i++) { sigar_proc_state_t pstate; sigar_proc_time_t ptime; status = sigar_proc_state_get(_g_sigarproclist, pid, &pstate); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) proc_state({})\n", status, sigar_strerror(_g_sigarproclist, status), pid)); goto _END; } status = sigar_proc_time_get(_g_sigarproclist, pid, &ptime); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) proc_time({})\n", status, sigar_strerror(_g_sigarproclist, status), pid)); goto _END; } sigar_proc_mem_t proc_mem; status = sigar_proc_mem_get(_g_sigarproclist, pid, &proc_mem); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) sigar_proc_mem_get({})\n", status, sigar_strerror(_g_sigarproclist, status), pid)); goto _END; } total = proc_mem.resident; } _END: return total; }
//------------------------------------------------------------------------------------- float SystemInfo::getCPUPerByPID(uint32 pid) { if(pid == 0) { pid = (uint32)getProcessPID(); } float percent = 0.f; bool tryed = false; _TRYGET: if(!hasPID(pid, &_g_proclist)) { DEBUG_MSG(fmt::format("SystemInfo::getCPUPerByPID: error: not found pid({})\n", pid)); if(!tryed) { clear(); tryed = true; if(_autocreate()) goto _TRYGET; } return 0.f; } /* int status = SIGAR_OK; // for (size_t i = 0; i < proclist.number; i++) { sigar_proc_cpu_t cpu; status = sigar_proc_cpu_get(_g_sigarproclist, pid, &cpu); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) proc_cpu_get({})\n", status, sigar_strerror(_g_sigarproclist, status), pid)); return 0.f; } } */ // sleep(1000); // for (size_t i = 0; i < proclist.number; i++) { sigar_proc_cpu_t cpu; int status = sigar_proc_cpu_get(_g_sigarproclist, pid, &cpu); if (status == SIGAR_OK) { /* sigar_proc_state_t procstate; status = sigar_proc_state_get(sigarproclist, pid, &procstate); if (status != SIGAR_OK) { DEBUG_MSG(fmt::format("error: {} ({}) proc_state({})\n", status, sigar_strerror(sigarproclist, status), pid)); return 0.f; } */ percent = float(cpu.percent) * 100.f; #if KBE_PLATFORM == PLATFORM_WIN32 percent /= float(countCPU()); #endif } else { DEBUG_MSG(fmt::format("error: {} ({}) proc_cpu_get({})\n", status, sigar_strerror(_g_sigarproclist, status), pid)); return 0.f; } } return percent; }