From 78f95f2c9634ec66eeab71c4814cd9a4236212f6 Mon Sep 17 00:00:00 2001 From: lnk Date: Tue, 19 Aug 2025 20:56:35 +0800 Subject: [PATCH] log add rpt control and log control --- json/create_json.cpp | 18 +++++++++++++ mms/mms_process.c | 64 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/json/create_json.cpp b/json/create_json.cpp index af8c4e1..2370d53 100644 --- a/json/create_json.cpp +++ b/json/create_json.cpp @@ -2703,6 +2703,24 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char if (fileContent != NULL) { // 创建并打开文件 + //判断返回的是不是错误json响应 + bool isErrorJson = false; + cJSON* root = cJSON_Parse(fileContent); + if (root != NULL) { + cJSON* codeItem = cJSON_GetObjectItem(root, "code"); + cJSON* dataItem = cJSON_GetObjectItem(root, "data"); + if (codeItem && codeItem->valuestring && + strcmp(codeItem->valuestring, "A00555") == 0 && + (dataItem == NULL || (dataItem->type == cJSON_NULL))) { + isErrorJson = true; + std::cerr << "Error: Server returned empty file stream, code=A00555." << std::endl; + DIY_ERRORLOG_CODE("process", LOG_CODE_ICD_AND_DOWNLOAD, + "【ERROR】前置下载文件失败,服务端返回A00555(文件流为空),文件=%s", + save_name); + } + cJSON_Delete(root); + } + //测试 //std::ofstream outFile(downpath, std::ios::binary);//二进制的方式打开 diff --git a/mms/mms_process.c b/mms/mms_process.c index cc764cb..fe981b8 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -308,18 +308,35 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) { LD_info = &(ied_usr->LD_info[cpuno]); //遍历监测点 - if (LD_info->cpuno==0) + //监测点日志的key,lnk20250526 + char full_key_m_c[256]; // 分配足够空间 + char full_key_m_d[256]; // 分配足够空间 + snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); + //监测点日志的key,lnk20250526 + + if (LD_info->cpuno==0){ + // 仅在还没达到5次上限时打印 + if (!LD_info->has_logged_regist) { + LD_info->registcount++; + + if (LD_info->registcount <= 5) { + DIY_ERRORLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【ERROR】监测点:%s - id:%s补招数据失败,监测点缺少报告控制块,请检查装置对应的装置类型是否有配对的icd模型", LD_info->name,LD_info->mp_id); + } + + // 到5次就不再打印,并标记 + if (LD_info->registcount > 5) { + LD_info->has_logged_regist = true; + DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【WARN】监测点:%s - id:%s缺少报告控制块日志已达本次记录上限,不再输出,请检查装置对应的装置类型是否有配对的icd模型", + LD_info->name, LD_info->mp_id); + } + } continue; + } + for(rpt_no=0 ; rpt_norptcount; rpt_no++) { //遍历报告(映射文件中读取的报告控制) - //监测点日志的key,lnk20250526 - char full_key_m_c[256]; // 分配足够空间 - char full_key_m_d[256]; // 分配足够空间 - snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); - snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); - //监测点日志的key,lnk20250526 - rptinfo = LD_info->rptinfo[rpt_no] ; if (judge_rpt_next_should_do(rptinfo)==SHOULD_DO_NOTHING)//检查是否触发 @@ -483,12 +500,6 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr) for(cpuno=0 ; cpunocpucount; cpuno++) { LD_info = &(ied_usr->LD_info[cpuno]); - if (LD_info->logcount<=0) - continue; - loginfo = LD_info->loginfo[0] ; - - apr_sleep(apr_time_from_sec(1) / 10); - //监测点日志的key,lnk20250526 char full_key_m_c[256]; // 分配足够空间 char full_key_m_d[256]; // 分配足够空间 @@ -496,6 +507,31 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr) snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); //监测点日志的key,lnk20250526 + //日志控制块缺失 + if (LD_info->logcount<=0){ + // 仅在还没达到5次上限时打印 + if (!LD_info->has_logged_regist) { + LD_info->registcount++; + + if (LD_info->registcount <= 5) { + DIY_ERRORLOG_CODE(full_key_m_c,LOG_CODE_RECALL,"【ERROR】监测点:%s - id:%s补招数据失败,监测点缺少日志控制块,请检查装置对应的装置类型是否有配对的icd模型", LD_info->name,LD_info->mp_id); + } + + // 到5次就不再打印,并标记 + if (LD_info->registcount > 5) { + LD_info->has_logged_regist = true; + DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_RECALL,"【WARN】监测点:%s - id:%s缺少日志控制块日志已达本次记录上限,不再输出,请检查装置对应的装置类型是否有配对的icd模型", + LD_info->name, LD_info->mp_id); + } + } + + continue; + } + + loginfo = LD_info->loginfo[0] ; + + apr_sleep(apr_time_from_sec(1) / 10); + Check_Recall_Config(LD_info->mp_id);//尝试获取xml结构 //补招数量不为0且不是正在补招