1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- * @Description:
- * @Version: 1.0
- * @Autor: lishengyin
- * @Date: 2022-03-24 14:16:49
- * @LastEditors: lishengyin
- * @LastEditTime: 2022-07-06 15:40:54
- */
- #include "EquipmentMonitor.h"
- #include "Shell.h"
- /**
- * @description: 获取ptr
- * @param {*}
- * @return {*}
- */
- shared_ptr<EquipmentMonitor> EquipmentMonitor::getPtr(){
- static shared_ptr<EquipmentMonitor> m_equipmentMonitor = nullptr;
- if(m_equipmentMonitor == nullptr) m_equipmentMonitor = std::shared_ptr<EquipmentMonitor>(new EquipmentMonitor);
- return m_equipmentMonitor;
- }
- /**
- * @description: 获取数据
- * @param {*}
- * @return {*}
- */
- std::string EquipmentMonitor::get_cur_executable_path_()
- {
- char *p = NULL;
- const int len = 256;
- /// to keep the absolute path of executable's path
- char arr_tmp[len] = {0};
- int n = readlink("/proc/self/exe", arr_tmp, len);
- if (NULL != (p = strrchr(arr_tmp,'/')))
- *p = '\0';
- else
- {
- printf("wrong process path");
- std::string("");
- }
- return std::string(arr_tmp);
- }
- /**
- * @description: 获取硬盘使用率
- * @param {*}
- * @return {*}
- */
- double EquipmentMonitor::getHardDiskUsage(){
- double HardDiskUsage = 0;
- // 读取executable所在绝对路径
- std::string exec_str = get_cur_executable_path_();
- struct statfs diskInfo;
- statfs(exec_str.c_str(), &diskInfo);
- unsigned long long blocksize = diskInfo.f_bsize; //每个block里包含的字节数
- unsigned long long totalsize = blocksize * diskInfo.f_blocks; //总的字节数,f_blocks为block的数目
- unsigned long long availableDisk = diskInfo.f_bavail * blocksize; //可用空间大小
- // MB
- availableDisk = availableDisk>>20;
- totalsize = totalsize>>20;
- HardDiskUsage = (double)(((double)totalsize - (double)availableDisk) / (double)totalsize);
- return HardDiskUsage;
- }
- /**
- * @description: 获取Cpu温度
- * @param {*}
- * @return {*}
- */
- int EquipmentMonitor::getCpuTemp(){
- int32_t temp = 0;
- string shell = "cat /sys/devices/virtual/thermal/thermal_zone1/temp";
- vector<string> results;
- CShell::exeShellCmd(shell, results);
- for(auto iter = results.begin(); iter != results.end(); iter++){
- temp = std::atoi(iter->c_str());
- }
- return temp;
- }
|