#include "ModelInfoMonitor.h" ModelInfoMonitor::~ModelInfoMonitor() { //注销模型状态订阅 TopicManager::Instance()->unregisterSubscriber("XNSim::XNSimStatus::XNModelStatus"); } std::string ModelInfoMonitor::Initialize() { //注册模型状态订阅 XNDDSErrorCode ret = TopicManager::Instance()->registerSubscriber( "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(ret)); } return "Success"; } std::string ModelInfoMonitor::GetAllModelInfo() { std::lock_guard 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 locker(m_ModelStatusMutex); m_ModelStatus[status.XNModelID()] = status; }