fix rtdata log error

This commit is contained in:
lnk
2026-01-09 14:59:35 +08:00
parent c538161074
commit 709fdfc284
2 changed files with 94 additions and 19 deletions

View File

@@ -1246,6 +1246,9 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id,
get_terminal_name_by_terminal_id(dev_id, devname); get_terminal_name_by_terminal_id(dev_id, devname);
get_monitor_name_by_monitor_id(mpid, mpname); get_monitor_name_by_monitor_id(mpid, mpname);
const char* showName_d = devname.empty() ? dev_id.c_str() : devname.c_str();
const char* showName_m = devname.empty() ? mpid.c_str() : mpname.c_str();
root["monitorId"] = mpid; root["monitorId"] = mpid;
root["devId"] = dev_id; root["devId"] = dev_id;
root["CpuNo"] = monitor_id; root["CpuNo"] = monitor_id;
@@ -1289,7 +1292,7 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id,
// 有效响应,略过 // 有效响应,略过
} catch (...) { } catch (...) {
// 响应异常,保存 json // 响应异常,保存 json
DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM, "暂态接口响应异常,无法上送装置%s - 监测点%s的暂态事件",devname.c_str(), mpname.c_str()); DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM, "暂态接口响应异常,无法上送装置%s - 监测点%s的暂态事件",showName_d, showName_m);
std::cout << "qvvr send fail ,store in local" << std::endl; std::cout << "qvvr send fail ,store in local" << std::endl;
std::string qvvrDir = FRONT_PATH + "/dat/qvvr/"; std::string qvvrDir = FRONT_PATH + "/dat/qvvr/";
@@ -1299,7 +1302,7 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id,
} }
} else { } else {
// 无响应,保存 json // 无响应,保存 json
DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM,"暂态接口无响应,无法上送装置%s - 监测点%s的暂态事件",devname.c_str(), mpname.c_str()); DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM,"暂态接口无响应,无法上送装置%s - 监测点%s的暂态事件",showName_d, showName_m);
std::cout << "qvvr send fail ,store in local" << std::endl; std::cout << "qvvr send fail ,store in local" << std::endl;
std::string qvvrDir = FRONT_PATH + "/dat/qvvr/"; std::string qvvrDir = FRONT_PATH + "/dat/qvvr/";
@@ -1395,33 +1398,88 @@ bool get_monitor_id_by_dev_and_seq(const std::string& terminal_id,
return false; return false;
} }
// 根据 monitor_id 查 monitor_name //////////////////////////////////////////////////////////////////////////
bool get_monitor_name_by_monitor_id(const std::string& monitor_id,
std::string& out_monitor_name)
{
std::lock_guard<std::mutex> lk(ledgermtx);
for (const auto& dev : terminal_devlist) { static std::string normalize_id(std::string s)
for (const auto& mon : dev.line) { {
if (mon.monitor_id == monitor_id) { // 去首尾空白和 CRLF
out_monitor_name = mon.monitor_name; auto is_space = [](char c) {
return true; return c == ' ' || c == '\t' || c == '\r' || c == '\n';
} };
}
} // trim left
return false; size_t start = 0;
while (start < s.size() && is_space(s[start])) ++start;
// trim right
size_t end = s.size();
while (end > start && is_space(s[end - 1])) --end;
s = s.substr(start, end - start);
// 如有需要可统一大小写terminal_id 一般是 hex
// std::transform(s.begin(), s.end(), s.begin(), ::tolower);
return s;
} }
bool get_terminal_name_by_terminal_id(const std::string& terminal_id, bool get_terminal_name_by_terminal_id(const std::string& terminal_id,
std::string& out_terminal_name) std::string& out_terminal_name)
{ {
std::string key = normalize_id(terminal_id);
std::lock_guard<std::mutex> lk(ledgermtx); std::lock_guard<std::mutex> lk(ledgermtx);
for (const auto& dev : terminal_devlist) { for (const auto& dev : terminal_devlist) {
if (dev.terminal_id == terminal_id) { std::string dev_id = normalize_id(dev.terminal_id);
if (dev_id == key) {
out_terminal_name = dev.terminal_name; out_terminal_name = dev.terminal_name;
return true; return true;
} }
} }
// ❌ 没找到,打印诊断日志(只在失败时)
std::ostringstream oss;
oss << "terminal_id not found: '" << terminal_id
<< "' (normalized='" << key << "'), existing ids: ";
int cnt = 0;
for (const auto& dev : terminal_devlist) {
if (cnt++ >= 5) { oss << "..."; break; } // 防止日志过长
oss << "'" << dev.terminal_id << "' ";
}
std::cerr << "[LEDGER] " << oss.str() << std::endl;
out_terminal_name.clear();
return false; return false;
} }
bool get_monitor_name_by_monitor_id(const std::string& monitor_id,
std::string& out_monitor_name)
{
std::string key = normalize_id(monitor_id);
std::lock_guard<std::mutex> lk(ledgermtx);
for (const auto& dev : terminal_devlist) {
for (const auto& mon : dev.line) {
std::string mon_id = normalize_id(mon.monitor_id);
if (mon_id == key) {
out_monitor_name = mon.monitor_name;
return true;
}
}
}
// ❌ 诊断输出
std::ostringstream oss;
oss << "monitor_id not found: '" << monitor_id
<< "' (normalized='" << key << "')";
std::cerr << "[LEDGER] " << oss.str() << std::endl;
out_monitor_name.clear();
return false;
}

View File

@@ -1051,8 +1051,25 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms
return rocketmq::RECONSUME_LATER; return rocketmq::RECONSUME_LATER;
} }
//20260109添加装置判断流程
{
std::lock_guard<std::mutex> lock(ledgermtx);
const terminal_dev* targetDev = NULL;
for (std::vector<terminal_dev>::const_iterator it = terminal_devlist.begin(); it != terminal_devlist.end(); ++it) {
if (it->terminal_id == devid) { targetDev = &(*it); break; }
}
if (!targetDev) {
std::cout << "terminalId未匹配当前进程内装置: " << devid << std::endl;
return rocketmq::CONSUME_SUCCESS;
}
}
get_terminal_name_by_terminal_id(devid, devname); get_terminal_name_by_terminal_id(devid, devname);
const char* showName = devname.empty() ? devid.c_str() : devname.c_str();
std::cout << "[DBG] showName used in log = '" << showName << "'" << std::endl;
// 加锁访问台账 // 加锁访问台账
if( !devid.empty() && line > 0){ if( !devid.empty() && line > 0){
//不再使用文件触发方式,直接调用接口向终端发起请求 //不再使用文件触发方式,直接调用接口向终端发起请求
@@ -1063,7 +1080,7 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms
if (ClientManager::instance().get_dev_status(devid) != 1) { if (ClientManager::instance().get_dev_status(devid) != 1) {
std::cout << "devid对应装置不在线: " << devid << std::endl; std::cout << "devid对应装置不在线: " << devid << std::endl;
// 记录日志不响应 web 端 // 记录日志不响应 web 端
DIY_ERRORLOG_CODE("process",0,LOG_CODE_COMM,"主题:%s - tag:%s的实时数据触发消息失败,装置%s不在线", G_MQCONSUMER_TOPIC_RT.c_str(),FRONT_INST.c_str(),devname.c_str()); DIY_ERRORLOG_CODE("process",0,LOG_CODE_COMM,"主题:%s - tag:%s的实时数据触发消息失败,装置:%s 不在线", G_MQCONSUMER_TOPIC_RT.c_str(),FRONT_INST.c_str(),showName);
return rocketmq::CONSUME_SUCCESS; return rocketmq::CONSUME_SUCCESS;
} }