XNSim/XNMonitorServer/ModelInfoMonitor.cpp

57 lines
1.8 KiB
C++
Raw Normal View History

2025-05-14 20:18:44 +08:00
#include "ModelInfoMonitor.h"
#include <nlohmann/json.hpp>
#include <iostream>
2025-05-14 20:18:44 +08:00
using json = nlohmann::json;
ModelInfoMonitor::~ModelInfoMonitor()
{
//注销模型状态订阅
TopicManager::Instance()->unregisterSubscriber("XNSim::XNSimStatus::XNModelStatus");
}
std::string ModelInfoMonitor::Initialize()
{
//注册模型状态订阅
XNDDSErrorCode ret =
TopicManager::Instance()->registerSubscriber<XNSim::XNSimStatus::XNModelStatusPubSubType>(
"XNSim::XNSimStatus::XNModelStatus",
std::bind(&ModelInfoMonitor::ModelStatusListener, this, std::placeholders::_1));
if (ret != XNDDSErrorCode::SUCCESS) {
return "Failed to register model status subscriber, error code: "
+ std::to_string(static_cast<int>(ret));
}
return "Success";
}
std::string ModelInfoMonitor::GetAllModelInfo()
{
std::lock_guard<std::mutex> locker(m_ModelStatusMutex);
json jsonObj;
// 创建模型状态JSON对象
json modelStatusObj;
for (const auto &status : m_ModelStatus) {
json modelObj;
modelObj["modelName"] = status.second.XNModelName();
modelObj["modelID"] = status.second.XNModelID();
modelObj["modelStatus"] = status.second.XNModelSt();
modelObj["modelThreadID"] = status.second.XNModelThID();
modelObj["modelNode"] = status.second.XNModelNode();
modelObj["modelPriority"] = status.second.XNModelPro();
modelObj["modelRunCount"] = status.second.XNModelRunCnt();
modelObj["modelCurrentFrequency"] = status.second.XNMdlCurFreq();
modelObj["modelSetFrequency"] = status.second.XNMdlSetFreq();
modelStatusObj[std::to_string(status.first)] = modelObj;
}
jsonObj["modelStatus"] = modelStatusObj;
return jsonObj.dump();
}
void ModelInfoMonitor::ModelStatusListener(const XNSim::XNSimStatus::XNModelStatus &status)
{
std::lock_guard<std::mutex> locker(m_ModelStatusMutex);
m_ModelStatus[status.XNModelID()] = status;
}