53 lines
1.8 KiB
C++
53 lines
1.8 KiB
C++
|
#include "ModelInfoMonitor.h"
|
||
|
|
||
|
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;
|
||
|
}
|