#include "UpDeviceStatusEngine.h" #undef DISABLE_SSH_AGENT namespace { std::map 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 pVoidData0 = nullptr; inputQueMap_[strPort0_]->pop(pVoidData0); if (nullptr == pVoidData0) { usleep(1000); //1ms continue; } std::shared_ptr pDeviceStatus = std::static_pointer_cast(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; } }