Train_RFID_Linux/engine/HttpEngine/UpDeviceStatusEngine.cpp

104 lines
3.1 KiB
C++
Raw Normal View History

2024-07-27 08:12:26 +00:00
#include "UpDeviceStatusEngine.h"
#undef DISABLE_SSH_AGENT
namespace
{
std::map<std::string, std::string> mapAscii = {
{"!", "%21"},
{"#", "%23"},
{"$", "%24"},
{"%", "%25"},
{"&", "%26"},
{"@", "%40"},
{"*", "%2A"}
};
}
UpDeviceStatusEngine::UpDeviceStatusEngine() {}
UpDeviceStatusEngine::~UpDeviceStatusEngine() {}
APP_ERROR UpDeviceStatusEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
this->baseConfig_ = Config::GetIns()->getBaseConfig();
this->httpServerConfig_ = Config::GetIns()->getHttpServerConfig();
LogInfo << "UpDeviceStatusEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR UpDeviceStatusEngine::DeInit()
{
LogInfo << "HttpEngine DeInit ok";
return APP_ERR_OK;
}
APP_ERROR UpDeviceStatusEngine::Process()
{
int iRet = APP_ERR_OK;
while (!isStop_)
{
std::shared_ptr<void> pVoidData0 = nullptr;
inputQueMap_[strPort0_]->pop(pVoidData0);
if (nullptr == pVoidData0)
{
usleep(1000); //1ms
continue;
}
std::shared_ptr<DeviceStatus> pDeviceStatus = std::static_pointer_cast<DeviceStatus>(pVoidData0);
if (!this->httpServerConfig_.bIsUse) continue;
Json::Value arrayObj; //构建对象
arrayObj["tainsModule"] = "2";
arrayObj["networkStatus"] = pDeviceStatus->strNetworkStatus;
arrayObj["devName"] = pDeviceStatus->strDeviceName;
arrayObj["devSn"] = this->baseConfig_.strTrackName;
arrayObj["cpuData"] = "";
arrayObj["memoryUsage"] = std::to_string(this->getMemUsagePercent()) + "%";
arrayObj["devRunningStatus"] = pDeviceStatus->strDeviceRunningStatus;
arrayObj["devCheckResult"] = pDeviceStatus->strDeviceWarnInfo;
arrayObj["devIp"] = "";
arrayObj["devAccount"] = "";
Json::Value trainParams;
trainParams["poundNo"] = this->baseConfig_.strTrackName;
arrayObj["trainParams"] = trainParams;
if (!ToWeb::getins()->upDeviceStatus(arrayObj, 1))
{
// LogError << "第" << pTrainInfo->strOrder + "节,识别结果上传失败!";
}
}
return APP_ERR_OK;
}
float UpDeviceStatusEngine::getMemUsagePercent() {
try{
std::ifstream mem_info_stream("/proc/meminfo", std::ios_base::in);
std::string mem_total_key = "MemTotal:";
std::string mem_free_key = "MemFree:";
std::string line;
ulong total = 0, free = 0;
while (std::getline(mem_info_stream, line)) {
if (line.compare(0, mem_total_key.size(), mem_total_key) == 0) {
total = std::strtoul(line.c_str() + mem_total_key.size(), nullptr, 10);
} else if (line.compare(0, mem_free_key.size(), mem_free_key) == 0) {
free = std::strtoul(line.c_str() + mem_free_key.size(), nullptr, 10);
}
if (total != 0 && free != 0) {
break;
}
}
return (total - free) * 100.0 / total;
}
catch (...)
{
return 0;
}
}