diff --git a/.vscode/settings.json b/.vscode/settings.json index 69cdc40..ecfda8e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -139,6 +139,7 @@ "save2json.h": "c", "custom_printf.h": "c", "suicacse.h": "c", - "log4.h": "c" + "log4.h": "c", + "mms_json_inter.h": "c" } } \ No newline at end of file diff --git a/cfg_parse/cfg_parser.cpp b/cfg_parse/cfg_parser.cpp index b6f3f5f..f55a097 100644 --- a/cfg_parse/cfg_parser.cpp +++ b/cfg_parse/cfg_parser.cpp @@ -301,6 +301,7 @@ std::string Topic_Reply_Key = ""; int G_TEST_FLAG = 0; int G_TEST_NUM = 0; +int G_TEST_TYPE = 0; int TEST_PORT = 11000;//用于当前进程登录测试shell的端口 std::string G_TEST_LIST = "";//测试用的发送实际数据的终端列表 @@ -684,6 +685,7 @@ void init_config() { //MQ测试 G_TEST_FLAG = settings.value("RocketMq/Testflag", 0).toInt(); G_TEST_NUM = settings.value("RocketMq/Testnum", 0).toInt(); + G_TEST_TYPE = settings.value("RocketMq/Testtype", 0).toInt(); ba = settings.value("RocketMq/TestList", 0).toString().toLatin1(); G_TEST_LIST = strdup(ba.data()); @@ -735,7 +737,7 @@ void init_config() { //Mq测试相关打印 std::cout << "Read G_TEST_FLAG:" << G_TEST_FLAG << std::endl; std::cout << "Read G_TEST_NUM:" << G_TEST_NUM << std::endl; - + std::cout << "Read G_TEST_TYPE:" << G_TEST_TYPE << std::endl; //20241212lnk添加多前置 if (g_front_seg_index != 0 && g_front_seg_num != 0) { @@ -1787,15 +1789,18 @@ int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml) //加载一个文件的内容到数据结构 if (!load_ledger_update_from_xml(trigger_update_xml, filename)) { std::cout << "read /etc/ledgerupdate/" << filename << " success..." << std::endl; + DIY_WARNLOG("process","前置的%s%d号进程 读取台账更新文件成功,开始更新台账", get_front_msg_from_subdir(), g_front_seg_index); } //处理过的文件删除掉 if (std::remove(filename.c_str()) != 0) { std::cerr << "Failed to remove file: " << filename << " Error: " << strerror(errno) << std::endl; + DIY_ERRORLOG("process","前置的%s%d号进程 删除已读取的台账更新文件失败!请检查", get_front_msg_from_subdir(), g_front_seg_index); return APR_EGENERAL; } else{ std::cout << "remove file: " << filename << " success..." << std::endl; + DIY_INFOLOG("process","前置的%s%d号进程 删除已读取的台账更新文件成功", get_front_msg_from_subdir(), g_front_seg_index); } } } @@ -1953,6 +1958,7 @@ int load_3s_data_from_xml(trigger_3s_xml_t* trigger_3s_xml, QString xml_fn) QString BAK_WEBSERVICE_3S_TRIG_COMMAND_XML_FN = THREE_SECS_WEBSERVICE_DIR + "bak_3s_trig_command.txt"; int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml) { + //调试用 printf("begin 3s xml...\n"); memset(trigger_3s_xml, 0, sizeof(trigger_3s_xml_t)); @@ -1962,7 +1968,8 @@ int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml) QString the_webservice_xml_fn = get_3s_trig_fn();// ../etc/trigger3s/目录下的最新的xml文件,这个文件是用来打开实时触发的开关 - printf("the_webservice_xml_fn.size():%d\n",the_webservice_xml_fn.size()); + //调试用 + //printf("the_webservice_xml_fn.size():%d\n",the_webservice_xml_fn.size()); if (the_webservice_xml_fn.size() > 4) {//文件名大于4说明找到文件 apr_sleep(apr_time_from_sec(1) / 10); @@ -1972,9 +1979,13 @@ int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml) QFile::rename(the_webservice_xml_fn, BAK_WEBSERVICE_3S_TRIG_COMMAND_XML_FN); printf("/etc/trigger3s/*.xml success...\n"); + + DIY_WARNLOG("process","前置读取实时数据触发文件成功,即将注册实时数据报告"); + return APR_SUCCESS; } + //调试用 printf("3s xml fail...\n"); return APR_EGENERAL; } @@ -2214,6 +2225,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id) QDir dir(cfg_dir); if (!dir.exists()) { qDebug() << "folder does not exist!"; + DIY_ERRORLOG("process","前置的%s%d号进程 无法解析补招文件,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index); return false; } //指定文件后缀名,可指定多种类型 @@ -2229,6 +2241,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id) if (!file.open(QIODevice::ReadOnly)) { qDebug() << "file.open error"; + DIY_ERRORLOG("process","前置的%s%d号进程 无法打开补招文件%s", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str()); continue; //以只读方式打开 } bool ret = doc.setContent(&file); @@ -2236,6 +2249,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id) if (!ret) { qDebug() << "doc.setContent error"; + DIY_ERRORLOG("process","前置的%s%d号进程 无法解析补招文件%s,补招内容无效", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str()); continue; } //将文件内容读到doc中 @@ -2714,6 +2728,7 @@ void DeletcRecallXml() { QDir dir(cfg_dir); if (!dir.exists()) { qDebug() << "folder does not exist!"; + DIY_ERRORLOG("process","前置的%s%d号进程 删除旧的补招文件失败,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index); return; } QStringList filter(file_name); @@ -2728,6 +2743,7 @@ void DeletcRecallXml() { if (fileInfo.lastModified() < saveDaysAgo) { QFile::remove(fileInfo.absoluteFilePath()); + DIY_INFOLOG("process","前置的%s%d号进程 删除超过两天的补招文件", get_front_msg_from_subdir(), g_front_seg_index); } } @@ -2743,6 +2759,9 @@ void CreateRecallXml() if (g_StatisticLackList.size() > 0) { printf("insert ID_CJournalRecall_Map!\n"); + + DIY_INFOLOG("process","前置的%s%d号进程 开始写入补招文件", get_front_msg_from_subdir(), g_front_seg_index); + QMap > ID_CJournalRecall_Map; list::iterator sl = g_StatisticLackList.begin(); @@ -2773,6 +2792,9 @@ void CreateRecallXml() QFile file(strRecallPath.c_str()); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { printf("补招查询完成,打开%s失败,无法写入线路补招配置!\n", qstrRecallPath.toAscii().data()); + + DIY_ERRORLOG("process","前置的%s%d号进程 无法将补招文件写入补招文件路径/FeProject/etc/recall/", get_front_msg_from_subdir(), g_front_seg_index); + QMap >().swap(ID_CJournalRecall_Map); return; } @@ -3869,13 +3891,13 @@ int parse_device_cfg_web() //判断是否相等 if(max_process_num != max_index){ if(max_process_num > 0 && max_process_num < 10){ - DIY_WARNLOG("process","【WARN】前置比对台账获取的进程数:%s和本地配置的进程数:%s,不匹配,按照台账进程数重置前置的进程数量",max_process_num,max_index); + DIY_WARNLOG("process","【WARN】前置比对台账获取的进程数:%d和本地配置的进程数:%d,不匹配,按照台账进程数重置前置的进程数量",max_process_num,max_index); // 调用执行脚本函数 close_listening_socket(); execute_bash("reset", max_process_num, "all"); } else{ - DIY_ERRORLOG("process","【ERROR】前置从台账获取的进程数:%s不符合范围1~9,按照本地配置进程数启动进程",max_process_num); + DIY_ERRORLOG("process","【ERROR】前置从台账获取的进程数:%d不符合范围1~9,按照本地配置进程数启动进程",max_process_num); } } } @@ -4179,6 +4201,8 @@ int parse_device_cfg_web() { isdelta_flag = 1; //存在一个监测点为角型接线则这个前置就要启动第二个配置列表 cout << "monitor_id" << monitor_id << "v_wiring_type:" << line_info.v_wiring_type << "is delta wiring:" << isdelta_flag << endl; + + DIY_WARNLOG("process","前置连接的监测点 %s 是角形接线,对应终端为%s 终端类型是%s",line_info.mp_id,ied_usr->terminal_id,ied_usr->dev_type); } strcpy(line_info.monitor_status, monitor_status); @@ -5963,7 +5987,7 @@ bool shouldSkipTerminal(const char* terminal_id) { return false; } -void rocketmq_test_300(int mpnum,int front_index) { +void rocketmq_test_300(int mpnum,int front_index,int type) { Ckafka_data_t data; data.strTopic = QString::fromStdString(G_ROCKETMQ_TOPIC); data.mp_id = "0"; @@ -5994,69 +6018,115 @@ void rocketmq_test_300(int mpnum,int front_index) { ied_usr_t* ied_usr; // 循环发送 300 条消息 - for (int i = 0; (total_messages != 0 && g_front_seg_index == 1 && g_node_id == 100) && i < g_node->n_clients; ++i) { + if(type == 0){ + std::cout << " use ledger send msg " << std::endl; + for (int i = 0; (total_messages != 0 && g_front_seg_index == 1 && g_node_id == 100) && i < g_node->n_clients; ++i) { - ied = (ied_t*)g_node->clients[i]; - if(ied != NULL){ - ied_usr = (ied_usr_t*)ied->usr_ext; + ied = (ied_t*)g_node->clients[i]; + if(ied != NULL){ + ied_usr = (ied_usr_t*)ied->usr_ext; - //跳过正常的终端 - if (shouldSkipTerminal(ied_usr->terminal_id)) { - std::cout << ied_usr->terminal_id << " use true message " << std::endl; - continue; - } + //跳过正常的终端 + if (shouldSkipTerminal(ied_usr->terminal_id)) { + std::cout << ied_usr->terminal_id << " use true message " << std::endl; + continue; + } - for (int j = 0; j < 10 && ied_usr->LD_info[j].mp_id[0] != '\0'; j++){ - // 修改 Monitor 值 - char monitor_id[256] = {}; - strncpy(monitor_id, ied_usr->LD_info[j].mp_id, sizeof(monitor_id) - 1); - monitor_id[sizeof(monitor_id) - 1] = '\0'; + for (int j = 0; j < 10 && ied_usr->LD_info[j].mp_id[0] != '\0'; j++){ + // 修改 Monitor 值 + char monitor_id[256] = {}; + strncpy(monitor_id, ied_usr->LD_info[j].mp_id, sizeof(monitor_id) - 1); + monitor_id[sizeof(monitor_id) - 1] = '\0'; - data.mp_id = QString(monitor_id); + data.mp_id = QString(monitor_id); - data.monitor_id = i + j; - - std::string modified_time = my_to_string(current_time_ms); // 时间转换为整数类型(Unix时间戳) + data.monitor_id = i + j; + + std::string modified_time = my_to_string(current_time_ms); // 时间转换为整数类型(Unix时间戳) - // 替换消息中的 Monitor 和 TIME 字段(只匹配字段名,不匹配具体数值) - std::string modified_strText = base_strText; + // 替换消息中的 Monitor 和 TIME 字段(只匹配字段名,不匹配具体数值) + std::string modified_strText = base_strText; - // 替换 Monitor 字段 - size_t monitor_pos = modified_strText.find("\"Monitor\""); - if (monitor_pos != std::string::npos) { - size_t colon_pos = modified_strText.find(":", monitor_pos); - size_t quote_pos = modified_strText.find("\"", colon_pos); - size_t end_quote_pos = modified_strText.find("\"", quote_pos + 1); - if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { - modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, data.mp_id.toStdString()); - } - } + // 替换 Monitor 字段 + size_t monitor_pos = modified_strText.find("\"Monitor\""); + if (monitor_pos != std::string::npos) { + size_t colon_pos = modified_strText.find(":", monitor_pos); + size_t quote_pos = modified_strText.find("\"", colon_pos); + size_t end_quote_pos = modified_strText.find("\"", quote_pos + 1); + if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { + modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, data.mp_id.toStdString()); + } + } - // 替换 TIME 字段 - size_t time_pos = modified_strText.find("\"TIME\""); - if (time_pos != std::string::npos) { - size_t colon_pos = modified_strText.find(":", time_pos); - size_t quote_pos = colon_pos; - size_t end_quote_pos = modified_strText.find(",", quote_pos + 1); - if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { - modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, modified_time); - } - } + // 替换 TIME 字段 + size_t time_pos = modified_strText.find("\"TIME\""); + if (time_pos != std::string::npos) { + size_t colon_pos = modified_strText.find(":", time_pos); + size_t quote_pos = colon_pos; + size_t end_quote_pos = modified_strText.find(",", quote_pos + 1); + if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { + modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, modified_time); + } + } - // 更新数据 - data.strText = QString::fromStdString(modified_strText); + // 更新数据 + data.strText = QString::fromStdString(modified_strText); - // 发送数据 - my_rocketmq_send(data); + // 发送数据 + my_rocketmq_send(data); - // 输出调试信息 - std::cout << "Sent message " << (i + 1) << " with Monitor " << data.monitor_id << " and TIME " << modified_time << std::endl; + // 输出调试信息 + std::cout << "Sent message " << (i + 1) << " with Monitor " << data.monitor_id << " and TIME " << modified_time << std::endl; - // 等待下一条消息的发送(固定为1分钟) - //QThread::sleep(60); // 每次发送间隔1分钟 - } - } - } + } + } + } + } + else{ + std::cout << " use monitor + number send msg " << std::endl; + + for (int i = 0; (total_messages != 0 && g_front_seg_index == 1 && g_node_id == 100) && i < total_messages; ++i) { + + // 修改 Monitor 值 + char monitor_id[256] = {}; + snprintf(monitor_id, sizeof(monitor_id), "testmonitor%05d", i); + + monitor_id[sizeof(monitor_id) - 1] = '\0'; + data.mp_id = QString(monitor_id); + data.monitor_id = i; + + std::string modified_time = my_to_string(current_time_ms); // 时间转换为整数类型(Unix时间戳) + // 替换消息中的 Monitor 和 TIME 字段(只匹配字段名,不匹配具体数值) + std::string modified_strText = base_strText; + // 替换 Monitor 字段 + size_t monitor_pos = modified_strText.find("\"Monitor\""); + if (monitor_pos != std::string::npos) { + size_t colon_pos = modified_strText.find(":", monitor_pos); + size_t quote_pos = modified_strText.find("\"", colon_pos); + size_t end_quote_pos = modified_strText.find("\"", quote_pos + 1); + if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { + modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, data.mp_id.toStdString()); + } + } + // 替换 TIME 字段 + size_t time_pos = modified_strText.find("\"TIME\""); + if (time_pos != std::string::npos) { + size_t colon_pos = modified_strText.find(":", time_pos); + size_t quote_pos = colon_pos; + size_t end_quote_pos = modified_strText.find(",", quote_pos + 1); + if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) { + modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, modified_time); + } + } + // 更新数据 + data.strText = QString::fromStdString(modified_strText); + // 发送数据 + my_rocketmq_send(data); + // 输出调试信息 + std::cout << "Sent message " << (i + 1) << " with Monitor " << data.monitor_id << " and TIME " << modified_time << std::endl; + + } + } std::cout << "Finished sending " << total_messages << " messages." << std::endl; } diff --git a/cfg_parse/log4.cpp b/cfg_parse/log4.cpp index 5e607a7..58ea309 100644 --- a/cfg_parse/log4.cpp +++ b/cfg_parse/log4.cpp @@ -85,6 +85,16 @@ std::string extract_logger_id(const std::string& logger_name) { } return ""; // 没有找到 '.' 或 '.' 后为空 } + +std::string get_level_str(int level) { + switch (level) { + case 10000: return "DEBUG"; + case 20000: return "NORMAL"; // 或 "INFO" 根据你业务定义 + case 30000: return "WARN"; + case 40000: return "ERROR"; + default: return "UNKNOWN"; + } +} ////////////////////////////////////////////////////////////////////// TypedLogger::TypedLogger() {} TypedLogger::TypedLogger(const Logger& l, int t) : logger(l), logtype(t) {} @@ -138,7 +148,7 @@ protected: << "\",\"nodeId\":\"" << FRONT_INST << "\",\"businessId\":\"" << extract_logger_id(logger_name) << "\",\"level\":\"" << level_str - << "\",\"grade\":\"" << level + << "\",\"grade\":\"" << get_level_str(level) << "\",\"logtype\":\"" << (logtype == LOGTYPE_COM ? "com" : "data") << "\",\"frontType\":\"" << get_front_type_from_subdir() << "\",\"log\":\"" << escape_json(msg) << "\"}"; @@ -238,18 +248,16 @@ void process_log_command(const std::string& id, const std::string& level, const } -Logger init_logger(const std::string& full_name, const std::string& file_dir, const std::string& base_file) { - // 确保日志目录存在 +Logger init_logger(const std::string& full_name, const std::string& file_dir, const std::string& base_file, SharedAppenderPtr fileAppender) { create_directory_recursive(file_dir); Logger logger = Logger::getInstance(full_name); - std::string file_path = file_dir + "/" + base_file + ".log"; - - // 使用滚动日志(大小轮转),最多保留 2 个备份,每个最大 1MB - SharedAppenderPtr fileAppender(new RollingFileAppender(file_path, 1 * 1024 * 1024, 2)); - - fileAppender->setLayout(std::auto_ptr( - new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); + if (!fileAppender) { + std::string file_path = file_dir + "/" + base_file + ".log"; + fileAppender = SharedAppenderPtr(new RollingFileAppender(file_path, 1 * 1024 * 1024, 2)); + fileAppender->setLayout(std::auto_ptr( + new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); + } SharedAppenderPtr sendAppender(new SendAppender()); logger.addAppender(fileAppender); @@ -258,10 +266,18 @@ Logger init_logger(const std::string& full_name, const std::string& file_dir, co return logger; } +// 重载版本:无 Appender 传入时调用上面的实现 +log4cplus::Logger init_logger(const std::string& full_name, + const std::string& file_dir, + const std::string& base_file) { + return init_logger(full_name, file_dir, base_file, + log4cplus::SharedAppenderPtr()); // 空指针 +} + //进程的日志 void init_logger_process() { std::string base_dir = std::string("/FeProject/") + subdir + "/processNo" + intToString(g_front_seg_index) + "/log"; - logger_map["process"] = TypedLogger(init_logger("process", base_dir, "process"), LOGTYPE_DATA); + logger_map["process"] = TypedLogger(init_logger(std::string("process"), base_dir, std::string("process")), LOGTYPE_DATA); std::cout << "process log init ok" << std::endl; } @@ -296,34 +312,55 @@ void init_loggers_bydevid(const char* dev_id) std::string device_dir = base_dir + "/" + ip_str; - std::string device_key = std::string("terminal.") + dev_id; + std::string device_key_c = std::string("terminal.") + dev_id + ".COM"; + std::string device_key_d = std::string("terminal.") + dev_id + ".DATA"; // 添加判断:终端日志 logger 是否已存在 - if (logger_map.find(ip_str + ".COM") == logger_map.end() && - logger_map.find(ip_str + ".DATA") == logger_map.end()) { + if (logger_map.find(device_key_c) == logger_map.end() && + logger_map.find(device_key_d) == logger_map.end()) { // 所有终端日志(com 和 data)写到同一个 device 日志文件中 - Logger device_logger = init_logger(device_key, device_dir, dev_id); //用终端id作为日志文件名 - logger_map[ip_str + ".COM"] = TypedLogger(device_logger, LOGTYPE_COM); - logger_map[ip_str + ".DATA"] = TypedLogger(device_logger, LOGTYPE_DATA); + std::string file_path_t = device_dir + "/" + dev_id + ".log"; + + // 共用一个 appender 实例 + SharedAppenderPtr device_appender = SharedAppenderPtr(new RollingFileAppender(file_path_t, 1 * 1024 * 1024, 2)); + device_appender->setLayout(std::auto_ptr(new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); + + Logger device_logger_c = init_logger(device_key_c, device_dir, dev_id, device_appender); //用终端id作为日志文件名 + Logger device_logger_d = init_logger(device_key_d, device_dir, dev_id, device_appender); //用终端id作为日志文件名 + logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM); + logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA); + + DIY_WARNLOG(device_key_d.c_str(),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); } // 初始化监测点 // 监测点 logger 名称格式:monitor..COM / .DATA for (int i = 0; i < 10; ++i) { if (strlen(ied_usr->LD_info[i].mp_id) > 0){ - std::ostringstream mon_key, mon_path, mon_name; - mon_key << "monitor." << ied_usr->LD_info[i].mp_id; + std::ostringstream mon_key_c, mon_key_d, mon_path, mon_name; + mon_key_c << "monitor." << ied_usr->LD_info[i].mp_id << ".COM"; + mon_key_d << "monitor." << ied_usr->LD_info[i].mp_id << ".DATA"; mon_path << device_dir << "/monitor" << i;//终端路径下用monitor+序号作为目录 mon_name << ied_usr->LD_info[i].mp_id; // 添加判断:监测点 logger 是否已存在 - if (logger_map.find(mon_key.str() + ".COM") == logger_map.end() && - logger_map.find(mon_key.str() + ".DATA") == logger_map.end()) { + if (logger_map.find(mon_key_c.str()) == logger_map.end() && + logger_map.find(mon_key_d.str()) == logger_map.end()) { - Logger mon_logger = init_logger(mon_key.str(), mon_path.str(), mon_name.str()); - logger_map[mon_key.str() + ".COM"] = TypedLogger(mon_logger, LOGTYPE_COM); - logger_map[mon_key.str() + ".DATA"] = TypedLogger(mon_logger, LOGTYPE_DATA); + // 所有监测点日志(com 和 data)写到同一个 monitor 日志文件中 + std::string file_path_m = mon_path.str() + "/" + mon_name.str() + ".log"; + + // 共用一个 appender 实例 + SharedAppenderPtr monitor_appender = SharedAppenderPtr(new RollingFileAppender(file_path_m, 1 * 1024 * 1024, 2)); + monitor_appender->setLayout(std::auto_ptr(new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); + + Logger mon_logger_c = init_logger(mon_key_c.str(), mon_path.str(), mon_name.str(),monitor_appender);//用监测点号作为日志文件名 + Logger mon_logger_d = init_logger(mon_key_d.str(), mon_path.str(), mon_name.str(),monitor_appender); + logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM); + logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA); + + DIY_WARNLOG(mon_key_d.str().c_str(),"监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); } } @@ -356,42 +393,48 @@ void init_loggers() { std::string device_dir = base_dir + "/" + ip_str; - std::string device_key = std::string("terminal.") + ied_usr->terminal_id; + std::string device_key_c = std::string("terminal.") + ied_usr->terminal_id + ".COM"; + std::string device_key_d = std::string("terminal.") + ied_usr->terminal_id + ".DATA"; // 所有终端日志(com 和 data)写到同一个 device 日志文件中 - Logger device_logger = init_logger(device_key, device_dir, ied_usr->terminal_id); //用终端id作为日志文件名 - logger_map[device_key + ".COM"] = TypedLogger(device_logger, LOGTYPE_COM); - logger_map[device_key + ".DATA"] = TypedLogger(device_logger, LOGTYPE_DATA); + std::string file_path_t = device_dir + "/" + ied_usr->terminal_id + ".log"; - char buf[256]; - //sprintf(buf, "终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); - //LOG4CPLUS_DEBUG(logger_map[device_key + ".DATA"].logger, buf); - //format_log_msg(buf,sizeof(buf),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); - //log_debug(std::string(device_key + ".DATA").c_str(),buf); - std::string full_key_t = device_key + ".DATA"; - DIY_WARNLOG(full_key_t.c_str(),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); + // 共用一个 appender 实例 + SharedAppenderPtr device_appender = SharedAppenderPtr(new RollingFileAppender(file_path_t, 1 * 1024 * 1024, 2)); + device_appender->setLayout(std::auto_ptr(new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); + + Logger device_logger_c = init_logger(device_key_c, device_dir, ied_usr->terminal_id, device_appender); //用终端id作为日志文件名 + Logger device_logger_d = init_logger(device_key_d, device_dir, ied_usr->terminal_id, device_appender); //用终端id作为日志文件名 + + logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM); + logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA); + + DIY_WARNLOG(device_key_d.c_str(),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); // 初始化监测点 // 监测点 logger 名称格式:monitor..COM / .DATA for (int i = 0; i < 10; ++i) { if (strlen(ied_usr->LD_info[i].mp_id) > 0){ - std::ostringstream mon_key, mon_path, mon_name; - mon_key << "monitor." << ied_usr->LD_info[i].mp_id; + std::ostringstream mon_key_c, mon_key_d, mon_path, mon_name; + mon_key_c << "monitor." << ied_usr->LD_info[i].mp_id << ".COM"; + mon_key_d << "monitor." << ied_usr->LD_info[i].mp_id << ".DATA"; + mon_path << device_dir << "/monitor" << i;//终端路径下用monitor+序号作为目录 mon_name << ied_usr->LD_info[i].mp_id; - Logger mon_logger = init_logger(mon_key.str(), mon_path.str(), mon_name.str()); + std::string file_path_m = mon_path.str() + "/" + mon_name.str() + ".log"; - logger_map[mon_key.str() + ".COM"] = TypedLogger(mon_logger, LOGTYPE_COM); - logger_map[mon_key.str() + ".DATA"] = TypedLogger(mon_logger, LOGTYPE_DATA); + // 共用一个 appender 实例 + SharedAppenderPtr monitor_appender = SharedAppenderPtr(new RollingFileAppender(file_path_m, 1 * 1024 * 1024, 2)); + monitor_appender->setLayout(std::auto_ptr(new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n"))); - //char buf[256]; - //sprintf(buf, "监测点id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].mp_id); - //LOG4CPLUS_DEBUG(logger_map[mon_key.str() + ".DATA"].logger, buf); - //format_log_msg(buf,sizeof(buf),"监测点id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].mp_id); - //log_debug(std::string(mon_key.str() + ".DATA").c_str(),buf); - std::string full_key_m = mon_key.str() + ".DATA"; - DIY_WARNLOG(full_key_m.c_str(),"监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); + Logger mon_logger_c = init_logger(mon_key_c.str(), mon_path.str(), mon_name.str(), monitor_appender); + Logger mon_logger_d = init_logger(mon_key_d.str(), mon_path.str(), mon_name.str(), monitor_appender); + + logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM); + logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA); + + DIY_WARNLOG(mon_key_d.str().c_str(),"监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); } diff --git a/include/rocketmq/SimpleProducer.h b/include/rocketmq/SimpleProducer.h index 22a066f..3b49b69 100644 --- a/include/rocketmq/SimpleProducer.h +++ b/include/rocketmq/SimpleProducer.h @@ -23,9 +23,8 @@ void rocketmq_test_rc(); void rocketmq_test_log(); void rocketmq_test_set(); void rocketmq_test_only(); -void rocketmq_test_300(int mpnum,int front_index); +void rocketmq_test_300(int mpnum,int front_index,int type); } -//void rocketmq_test_300(int mpnum,int front_index);//20241202lnk extern void my_rocketmq_send(Ckafka_data_t& data); diff --git a/json/create_json.cpp b/json/create_json.cpp index 8ee32cf..2244cbd 100644 --- a/json/create_json.cpp +++ b/json/create_json.cpp @@ -23,6 +23,8 @@ //lnk20241031用于上传和下载文件 #include "../json/cjson.h" + +#include "../log4cplus/log4.h"//lnk添加log4 ///////////////////////////////////////////////////lnk2024-10-21//////////////////////////////////////////////////////// extern void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::string& json, char** ptr); extern std::string WEB_INTEGRITY; @@ -2518,6 +2520,9 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char sprintf(save_name, "%s", Qsavename.toAscii().data()); cout << file_name << "!!!!!!!!!!!!!!!!!!!!!!!!!!" << save_name << endl; + //mq日志 + DIY_WARNLOG("process","【WARN】前置获取到终端类型%s,该终端类型对应的映射文件为%s,映射文件将下载并保存在本地为%s",TMNL_TYPE,FILE_PATH,save_name); + //20241028 lnk 替换为文件下载web接口 //构造文件下载接口参数 //接口示例http://192.168.1.125:10215/file/download?filePath=/path/xxx.txt @@ -2547,14 +2552,18 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char outFile.write(fileContent, strlen(fileContent)); outFile.close(); std::cout << "File saved successfully!" << std::endl; + //mq日志 + DIY_WARNLOG("process","【WARN】前置下载映射文件%s成功",save_name); } else { std::cerr << "Error: Unable to open file for writing." << std::endl; + DIY_ERRORLOG("process","【ERROR】前置写入本地映射文件%s失败",save_name); } // 释放分配的内存 free(fileContent); } else { std::cerr << "Error: Unable to download file." << std::endl; + DIY_ERRORLOG("process","【ERROR】前置调用文件下载接口下载远端文件文件%s失败",FILE_PATH); } } diff --git a/json/save2json.h b/json/save2json.h index 303f82e..31e2021 100644 --- a/json/save2json.h +++ b/json/save2json.h @@ -49,6 +49,7 @@ extern "C" { #include extern int G_TEST_NUM; +extern int G_TEST_TYPE; extern void ledger(const char* terminal_id = NULL,QIODevice* outputDevice = NULL); extern void value_print(const char *variableName, QTcpSocket *clientSocket); extern int TEST_PORT; @@ -121,6 +122,7 @@ public: : QObject(parent), server(NULL), TEST_NUM(G_TEST_NUM), + TEST_TYPE(G_TEST_TYPE), timer(NULL), historyIndex(-1), stopViewLog(true), @@ -208,6 +210,14 @@ public slots: TEST_NUM = num; } + /** + * @brief 设置TEST_TYPE + */ + void setTestType(int type) { + QMutexLocker locker(&mutex); + TEST_TYPE = type; + } + void setTestlog(bool flag) { redirectErrorOutput(flag); redirectWarnOutput(flag); @@ -221,13 +231,13 @@ private slots: */ void doPeriodicTask() { QMutexLocker locker(&mutex); - std::cout << "Executing TEST_NUM is " << TEST_NUM << std::endl; - qDebug() << "doPeriodicTask() called. TEST_NUM = " << TEST_NUM; + std::cout << "Executing TEST_NUM is " << TEST_NUM << "Executing TEST_TYPE is " << TEST_TYPE << std::endl; + qDebug() << "doPeriodicTask() called. TEST_NUM = " << TEST_NUM << "Executing TEST_TYPE is " << TEST_TYPE; if (TEST_NUM != 0) { qDebug() << "Executing rocketmq_test_300()"; std::cout << "Executing rocketmq_test_300()\n"; - rocketmq_test_300(TEST_NUM, g_front_seg_index); + rocketmq_test_300(TEST_NUM, g_front_seg_index,TEST_TYPE); } } @@ -402,6 +412,7 @@ private: if (cmd == "help") { QString helpText = "Available commands:\r\n"; helpText += "TEST_NUM= - Set the TEST_NUM\r\n"; + helpText += "TEST_TYPE= - Set the TEST_TYPE 0:use ledger,1:use number\r\n"; helpText += "LOG= - Set the LOG\r\n"; helpText += "telnettest - Set the telnettest\r\n"; helpText += "rc - Execute rocketmq_test_rc\r\n"; @@ -437,13 +448,25 @@ private: clientSocket->write("Invalid number\r\n"); } } + else if (cmd.startsWith("TEST_TYPE=")) { + bool ok; + int type = cmd.mid(10).toInt(&ok); + if (ok) { + setTestType(type); + clientSocket->write("\r\x1B[K"); + clientSocket->write("TEST_TYPE updated\r\n"); + } else { + clientSocket->write("\r\x1B[K"); + clientSocket->write("Invalid type\r\n"); + } + } else if (cmd.startsWith("LOG=")) { bool ok; bool flag = cmd.mid(4).toInt(&ok); if (ok) { setTestlog(flag); clientSocket->write("\r\x1B[K"); - clientSocket->write("TEST_NUM updated\r\n"); + clientSocket->write("LOG updated\r\n"); } else { clientSocket->write("\r\x1B[K"); clientSocket->write("Invalid number\r\n"); @@ -583,6 +606,7 @@ private: QTcpServer *server; QTimer *timer; int TEST_NUM; + int TEST_TYPE; QMutex mutex; // 历史命令相关 diff --git a/log4cplus/log4.h b/log4cplus/log4.h index bf92add..9606687 100644 --- a/log4cplus/log4.h +++ b/log4cplus/log4.h @@ -20,6 +20,7 @@ #include #include "loggingmacros.h" +#include "appender.h" #define LOGTYPE_COM 1 #define LOGTYPE_DATA 2 @@ -56,8 +57,16 @@ extern void send_reply_to_kafka(const std::string& guid, const std::string& step std::string get_front_type_from_subdir(); -log4cplus::Logger init_logger(const std::string& full_name, const std::string& file_dir, const std::string& base_file); +// 不带 Appender 的版本 +log4cplus::Logger init_logger(const std::string& full_name, + const std::string& file_dir, + const std::string& base_file); +// 带 Appender 的版本 +log4cplus::Logger init_logger(const std::string& full_name, + const std::string& file_dir, + const std::string& base_file, + log4cplus::SharedAppenderPtr fileAppender); void process_log_command(const std::string& id, const std::string& level, const std::string& grade, const std::string& logtype_str); diff --git a/mms/db_interface.h b/mms/db_interface.h index d688626..da37594 100644 --- a/mms/db_interface.h +++ b/mms/db_interface.h @@ -141,7 +141,7 @@ void DeletcRecallXml(); /*lnk10-11*//////////////////////////////////////////////////////////////////////// void rocketmq_test(); -void rocketmq_test_300(int mpnum,int front_index); +void rocketmq_test_300(int mpnum,int front_index,int type); void SOEFileWeb_test(); void qvvr_test(); void comflag_test(); diff --git a/mms/mms_process.c b/mms/mms_process.c index e58e487..264e354 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -149,6 +149,14 @@ void CloseIECReports(chnl_usr_t *chnl_usr) void closeChannel(chnl_usr_t *chnl_usr) { + + //终端日志的key,lnk20250526 + char full_key_t_c[256]; // 分配足够空间 + char full_key_t_d[256]; // 分配足够空间 + snprintf(full_key_t_c, sizeof(full_key_t_c), "terminal.%s.COM", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id); + snprintf(full_key_t_d, sizeof(full_key_t_d), "terminal.%s.DATA", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id); + //终端日志的key,lnk20250526 + char comm_str[256]; memset(comm_str,0,256); apr_snprintf(comm_str,sizeof(comm_str),"%16s:%d\t\tdisconnected !!!",chnl_usr->ip_str,chnl_usr->chnl->port); @@ -176,6 +184,8 @@ void closeChannel(chnl_usr_t *chnl_usr) ret = mms_disconnectFromServer(chnl_usr->net_info,&chnl_usr->m_reqCtrl); echo_warn("---------end disconnectFromServer!\n"); + DIY_WARNLOG(full_key_t_c,"【WARN】前置与终端%s - ip端口%s:%d 断开连接", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + if (ret != SD_SUCCESS){ echo_warn("---------disconnectFromServer success!\n"); @@ -705,7 +715,8 @@ void check_3s_config() if ( fabs(now - last_check_3s_config_time) < 3*1000 ) //wait 3secs //当前进程任务执行时查看当前时间和上次执行时间间隔,小于3秒不执行,大于等于3秒往下执行 return; - printf("begin 3s config...\n"); + //调试用 + //printf("begin 3s config...\n"); last_check_3s_config_time = now; //记录本次运行时间 while (APR_SUCCESS==parse_3s_xml(&trigger_3s_xml)){ //处理3秒文件,一次处理一个 @@ -1246,8 +1257,6 @@ void check_ledger_update()//lnk20250113 //每次都初始化防止重复 memset(trigger_ledger_update_xml, 0, sizeof(trigger_update_xml_t)); - - //printf("check ledger update...trigger_ledger_update_xml:%d\n",trigger_ledger_update_xml->modify_update_num);//减少不必要的打印 last_check_3s_config_time = now; //记录本次运行时间 @@ -1303,7 +1312,7 @@ void check_disk_quota() static double last_check_time = -10000000.0; uint32_t freeSizeMB,totalSizeMB; - if(g_node_id != STAT_DATA_BASE_NODE_ID) + if(g_node_id != STAT_DATA_BASE_NODE_ID || g_front_seg_index != 1)//lnk20250527只有稳态进程1监测磁盘 return; now = sGetMsTime(); if ( fabs(now - last_check_time) < 15*1000 ) //wait 15 secs @@ -1314,11 +1323,17 @@ void check_disk_quota() freeSizeMB = get_freedisk_MB(&totalSizeMB); //printf("Current user disk free size: %dMB ,total size: %dMB \n",freeSizeMB,totalSizeMB); - if (freeSizeMBchnl_counts; } while ( (g_onlyIP[0]!=0) && (strcmp(g_onlyIP,chnl_usr->ip_str)!=0) ); + //终端日志的key,lnk20250526 + char full_key_t_c[256]; // 分配足够空间 + char full_key_t_d[256]; // 分配足够空间 + snprintf(full_key_t_c, sizeof(full_key_t_c), "terminal.%s.COM", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id); + snprintf(full_key_t_d, sizeof(full_key_t_d), "terminal.%s.DATA", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id); + //终端日志的key,lnk20250526 + //10-11-01 22:03 beijing if( ( (chnl_total_no+1)==g_pt61850app->chnl_counts) || (g_onlyIP[0]!=0) ){ if(g_pt61850app->initNum<255) @@ -1435,6 +1457,10 @@ void CheckNextNotConnectedChannel() echo_warn4("\nCHANNEL_CONNECTED %s:%d ,NetInfo= %x chnl_usr= %x \n", chnl_usr->ip_str,chnl_usr->chnl->port,chnl_usr->net_info,chnl_usr); + + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】终端%s - ip端口:%s:%d连接成功", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + mvl_free_req_ctrl(chnl_usr->m_reqCtrl); chnl_usr->m_reqCtrl = NULL; @@ -1474,7 +1500,11 @@ void CheckNextNotConnectedChannel() ied_usr_t* ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; - printf( "reqCtrl->result == FAIL, Since StartConnecting %i sec ,channel IP %s:%d \n",secsSince,chnl_usr->ip_str,chnl_usr->chnl->port); + printf( "reqCtrl->result == FAIL, Since StartConnecting %i sec ,channel IP %s:%d \n",secsSince,chnl_usr->ip_str,chnl_usr->chnl->port); + + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】终端%s - ip/端口:%s:%d - 识别码/秘钥:%s/%s,从开始连接到目前已经%i秒,连接失败,断开连接!", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_series,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_key,secsSince); + mvl_free_req_ctrl(chnl_usr->m_reqCtrl); chnl_usr->m_reqCtrl = NULL; chnl_usr->net_info->rem_vmd = NULL; @@ -1489,7 +1519,11 @@ void CheckNextNotConnectedChannel() { ied_usr_t* ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; - echo_warn2( "reqCtrl->done未完成,but time over 300 secs, close channel IP %s,NetInfo= %x ",chnl_usr->ip_str,chnl_usr->net_info); + echo_warn2( "reqCtrl->done未完成,but time over 300 secs, close channel IP %s,NetInfo= %x ",chnl_usr->ip_str,chnl_usr->net_info); + + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】终端%s - ip端口:%s:%d,从开始连接到目前已经300秒,未能获取连接响应,断开连接!", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + if (chnl_usr->net_info->req_pend_list) { echo_warn("reqCtrl->done未完成,but time over 300 secs!!!!!!!!\n"); mvl_free_req_ctrl(chnl_usr->m_reqCtrl); @@ -1516,6 +1550,10 @@ void CheckNextNotConnectedChannel() ied_usr_t *ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; apr_snprintf(serverARName,sizeof(serverARName),"%s:%d",chnl_usr->ip_str,chnl_usr->chnl->port); if (chnl_usr->chnl->ied->cpucount != NULL && chnl_usr->chnl->ied->cpucount > 0 && ied_usr->dev_flag == ENABLE) {//2023-09-26 czy 如果line count<0 不需要连接//lnk20250121如果终端无效则不连接 + + //mq日志 + //DIY_WARNLOG(full_key_t_c,"【WARN】重新连接终端%s - ip端口:%s:%d", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + ret = mms_connectToServer(ied_usr->dev_key, ied_usr->dev_series, serverARName, &(chnl_usr->net_info), &(chnl_usr->m_reqCtrl)); if (ret == SD_SUCCESS) @@ -1525,6 +1563,9 @@ void CheckNextNotConnectedChannel() chnl_usr->m_state = CHANNEL_CONNECTING; chnl_usr->m_StartConnectingTime = sGetMsTime(); + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】正在重新连接终端%s - ip端口:%s:%d - 识别码/秘钥:%s/%s", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_series,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_key); + } else @@ -1533,6 +1574,9 @@ void CheckNextNotConnectedChannel() chnl_usr->m_ClosedMsTime = sGetMsTime(); echo_warn3("FAILED: mms_connectToServer IP %s:%d ,NetInfo= %x \n", chnl_usr->ip_str, chnl_usr->chnl->port, chnl_usr->net_info); + + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】重新连接终端%s - ip端口:%s:%d 失败!", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); } } @@ -1559,6 +1603,9 @@ void CheckNextNotConnectedChannel() apr_time_t t_now = apr_time_now(); connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】终端%s - ip端口:%s:%d 断连完成,关闭连接通道", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + } else { @@ -1582,6 +1629,10 @@ void CheckNextNotConnectedChannel() ied_usr_t* ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; apr_time_t t_now = apr_time_now(); connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + + //mq日志 + DIY_WARNLOG(full_key_t_c,"【WARN】终端%s - ip端口:%s:%d 断连未完成,但是已经超时180秒,关闭连接通道", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); + } } } diff --git a/mms/rdb_client.c b/mms/rdb_client.c index c86a952..4e515fb 100644 --- a/mms/rdb_client.c +++ b/mms/rdb_client.c @@ -386,9 +386,7 @@ static void* APR_THREAD_FUNC rtdb_worker(apr_thread_t* thd, void* data) pthread_mutex_unlock(&mtx); check_disk_quota();//判断磁盘空间 - apr_pool_clear(g_pt61850app->tmp_pool);//清除临时缓存 - g_dead_lock_counter = 0; g_thread_blocked_times = 0;//监控线程 } diff --git a/rocketmq/SimpleProducer.h b/rocketmq/SimpleProducer.h index 7339aff..3728d20 100644 --- a/rocketmq/SimpleProducer.h +++ b/rocketmq/SimpleProducer.h @@ -23,7 +23,7 @@ void rocketmq_test_rc(); void rocketmq_test_log(); void rocketmq_test_set(); void rocketmq_test_only(); -void rocketmq_test_300(int mpnum,int front_index); +void rocketmq_test_300(int mpnum,int front_index,int type); } extern void my_rocketmq_send(Ckafka_data_t& data);