From 50dd5c8a3ed88d15dcb3497a4da5b897cbf008ec Mon Sep 17 00:00:00 2001 From: lnk Date: Wed, 4 Feb 2026 09:21:54 +0800 Subject: [PATCH] add log in ggio --- json/create_json.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++- json/save2json.cpp | 13 ++++++++++ log4cplus/log4.h | 3 ++- mms/db_interface.h | 2 ++ 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/json/create_json.cpp b/json/create_json.cpp index f331ee5..7c39fbe 100644 --- a/json/create_json.cpp +++ b/json/create_json.cpp @@ -33,6 +33,9 @@ extern std::string WEB_EVENT; extern std::string WEB_FILEDOWNLOAD; extern std::string G_CONNECT_TOPIC; +//lnk20250115添加台账锁 +extern pthread_mutex_t mtx; + bool DEBUGOPEN = 0; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -56,7 +59,10 @@ public: int nDataType; //告警SOE事件类型 QString type; //参数等级type类型:0-DataType 1-监测点 2-剔除标记 3-发生时刻,毫秒 4-数据链表 5-相位 6-值索引 9-实时SOE事件 QString triggerFlag; //告警SOE事件触发指标名称 - int nIndex; //数据在每条线路LineInfo值数组中的位置 + int nIndex; //数据在每条线路LineInfo值数组中的位置 + + QString desc; //soe事件描述 + QString DO; //数据对象名 QString DA; //数据属性名 QString strFullName; //数据对象名 $ 数据属性名 @@ -869,6 +875,7 @@ bool ParseXMLConfig2(int xml_flag, XmlConfig *cfg, list *ctopiclist,QSt { CEventData* ed = new CEventData(); //SOE事件类指针 ed->triggerFlag = node.toElement().attribute("name"); //SOE名称 + ed->desc = node.toElement().attribute("desc"); //SOE描述 ed->DO = node.toElement().attribute("DO"); //数据对象名 ed->DA = node.toElement().attribute("DA"); //数据属性名 ed->type = node.toElement().attribute("type"); //参数等级type类型:0-DataType 1-监测点 2-剔除标记 3-发生时刻,毫秒 4-数据链表 5-相位 6-值索引 9-实时SOE事件 @@ -2650,8 +2657,35 @@ int transfer_json_block_data(char v_wiring_type[], json_block_data *data) //json return 1; } +static void format_time_ms(long long ms, char* buf, size_t buf_len) +{ + time_t sec = ms / 1000; + int milli = ms % 1000; + + struct tm tm_time; + localtime_r(&sec, &tm_time); // 线程安全 + + snprintf(buf, buf_len, + "%04d-%02d-%02d %02d:%02d:%02d.%03d", + tm_time.tm_year + 1900, + tm_time.tm_mon + 1, + tm_time.tm_mday, + tm_time.tm_hour, + tm_time.tm_min, + tm_time.tm_sec, + milli); +} + void processGGIO_start_data_end(char* mp_id,char* fullname,double v,long long time,char* devtype,int monitor_id) { + + //监测点日志的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", mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", mp_id); + //监测点日志的key,lnk20250526 + XmlConfig c_xmlcfg; if (xmlinfo_list.contains(devtype)) { c_xmlcfg = xmlinfo_list[devtype]->xmlcfg; @@ -2683,6 +2717,28 @@ void processGGIO_start_data_end(char* mp_id,char* fullname,double v,long long ti if (pEventData->strFullName.indexOf(Full_name) != -1) { KafkaData.strText.append(QString("\"%1\"").arg(pEventData->triggerFlag)); + + //使用日志接口记录日志 + char time_str[64]; + format_time_ms(time, time_str, sizeof(time_str)); + + QByteArray descBa = pEventData->desc.toLocal8Bit(); + + pthread_mutex_lock(&mtx); std::cout << "ggio hold lock !!!!!!!!!!!" << std::endl; + const char* mp_name_raw = find_mp_name_from_mp_id(mp_id); + pthread_mutex_unlock(&mtx); std::cout << "ggio unlock lock !!!!!!!!!!!" << std::endl; + + char mp_name[128]; + if (mp_name_raw && mp_name_raw[0] != '\0') { + snprintf(mp_name, sizeof(mp_name), "%s", mp_name_raw); + } else { + snprintf(mp_name, sizeof(mp_name), "unknown"); + } + + DIY_WARNLOG_CODE(full_key_m_d, LOG_CODE_REPORT, + "监测点:%s(%s),在%s发生事件:%s,事件值:%.2f", + mp_name, mp_id, time_str, descBa.constData(), v); + break; } } @@ -2695,6 +2751,7 @@ void processGGIO_start_data_end(char* mp_id,char* fullname,double v,long long ti kafka_data_list_mutex.lock(); //加锁 kafka_data_list.append(KafkaData); //添加 kafka发送链表 kafka_data_list_mutex.unlock(); //解锁 + } //zw修改 2023-8-31 新增或更新list队列 写入xml数据库信息 模型编码 终端型号 终端厂家 oss存储路径 时间 diff --git a/json/save2json.cpp b/json/save2json.cpp index 434dc4a..6299334 100644 --- a/json/save2json.cpp +++ b/json/save2json.cpp @@ -1759,6 +1759,19 @@ int find_mp_index_from_mp_id(std::string line) } +char* find_mp_name_from_mp_id(const char* mp_id) +{ + LD_info_t* LD_info = NULL; + LD_info = find_LD_info_only_from_mp_id((char*)mp_id); + if(LD_info == NULL){ + return 0; + } + else{ + return LD_info->name; + } + +} + int myMessageCallbackrtdata(CPushConsumer* consumer, CMessageExt* msg) { if(INITFLAG != 1)return 1;//防止崩溃 diff --git a/log4cplus/log4.h b/log4cplus/log4.h index e3be81d..34a8112 100644 --- a/log4cplus/log4.h +++ b/log4cplus/log4.h @@ -159,7 +159,8 @@ typedef enum LogCode { LOG_CODE_LOG_REQUEST = 405, /* 日志请求 */ LOG_CODE_REPORT = 500, /* 报告处理 */ LOG_CODE_COMM = 600, /* 通讯状态 */ - LOG_CODE_SPACE_ALARM = 700 /* 空间告警 */ + LOG_CODE_SPACE_ALARM = 700, /* 空间告警 */ + LOG_CODE_DEVICE = 800 /* 设备告警 */ } LogCode; #ifdef __cplusplus diff --git a/mms/db_interface.h b/mms/db_interface.h index 5ee442d..20c308e 100644 --- a/mms/db_interface.h +++ b/mms/db_interface.h @@ -152,6 +152,8 @@ int parse_model_cfg_web(); void SOEFileWeb(char* localpath,char* cloudpath,char* wavepath); const char* get_front_msg_from_subdir(); +char* find_mp_name_from_mp_id(const char* mp_id); + ////////////////////////////////////////////////////////////////////////////////////// typedef struct {