finish diylog
This commit is contained in:
@@ -1457,7 +1457,7 @@ int parse_rpt_log_ini()
|
|||||||
//添加判断,有的监测点没有cpuno为2,直接申请了LD_info[1],没申请LD_info[0]
|
//添加判断,有的监测点没有cpuno为2,直接申请了LD_info[1],没申请LD_info[0]
|
||||||
if(ied_usr->LD_info[cpuno].LD_name == NULL){
|
if(ied_usr->LD_info[cpuno].LD_name == NULL){
|
||||||
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
|
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
|
||||||
DIY_ERRORLOG("process","终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
|
DIY_ERRORLOG("process","【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
|
||||||
continue;//跳过防止崩溃
|
continue;//跳过防止崩溃
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1799,18 +1799,18 @@ int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml)
|
|||||||
//加载一个文件的内容到数据结构
|
//加载一个文件的内容到数据结构
|
||||||
if (!load_ledger_update_from_xml(trigger_update_xml, filename)) {
|
if (!load_ledger_update_from_xml(trigger_update_xml, filename)) {
|
||||||
std::cout << "read /etc/ledgerupdate/" << filename << " success..." << std::endl;
|
std::cout << "read /etc/ledgerupdate/" << filename << " success..." << std::endl;
|
||||||
DIY_WARNLOG("process","前置的%s%d号进程 读取台账更新文件成功,开始更新台账", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_WARNLOG("process","【WARN】前置的%s%d号进程 读取台账更新文件成功,开始更新台账", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
}
|
}
|
||||||
//处理过的文件删除掉
|
//处理过的文件删除掉
|
||||||
|
|
||||||
if (std::remove(filename.c_str()) != 0) {
|
if (std::remove(filename.c_str()) != 0) {
|
||||||
std::cerr << "Failed to remove file: " << filename << " Error: " << strerror(errno) << std::endl;
|
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);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 删除已读取的台账更新文件失败!请检查台账更新文件是否残留在/FeProject/etc/ledgerupdate", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
return APR_EGENERAL;
|
return APR_EGENERAL;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
std::cout << "remove file: " << filename << " success..." << std::endl;
|
std::cout << "remove file: " << filename << " success..." << std::endl;
|
||||||
DIY_INFOLOG("process","前置的%s%d号进程 删除已读取的台账更新文件成功", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_INFOLOG("process","【NORMAL】前置的%s%d号进程 删除已读取的台账更新文件成功", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1990,7 +1990,7 @@ int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml)
|
|||||||
|
|
||||||
printf("/etc/trigger3s/*.xml success...\n");
|
printf("/etc/trigger3s/*.xml success...\n");
|
||||||
|
|
||||||
DIY_WARNLOG("process","前置读取实时数据触发文件成功,即将注册实时数据报告");
|
DIY_WARNLOG("process","【WARN】前置读取实时数据触发文件成功,即将注册实时数据报告");
|
||||||
|
|
||||||
return APR_SUCCESS;
|
return APR_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -2235,7 +2235,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
|
|||||||
QDir dir(cfg_dir);
|
QDir dir(cfg_dir);
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
qDebug() << "folder does not exist!";
|
qDebug() << "folder does not exist!";
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 无法解析补招文件,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法解析补招文件,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//指定文件后缀名,可指定多种类型
|
//指定文件后缀名,可指定多种类型
|
||||||
@@ -2251,7 +2251,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
|
|||||||
if (!file.open(QIODevice::ReadOnly))
|
if (!file.open(QIODevice::ReadOnly))
|
||||||
{
|
{
|
||||||
qDebug() << "file.open error";
|
qDebug() << "file.open error";
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 无法打开补招文件%s", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法打开补招文件%s", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
|
||||||
continue; //以只读方式打开
|
continue; //以只读方式打开
|
||||||
}
|
}
|
||||||
bool ret = doc.setContent(&file);
|
bool ret = doc.setContent(&file);
|
||||||
@@ -2259,7 +2259,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
qDebug() << "doc.setContent error";
|
qDebug() << "doc.setContent error";
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 无法解析补招文件%s,补招内容无效", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法解析补招文件%s,补招内容无效", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//将文件内容读到doc中
|
//将文件内容读到doc中
|
||||||
@@ -2728,7 +2728,7 @@ void Cout_account_information() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除过期的xml
|
/// 删除过期的xmllnk:多个进程并发删除导致的失败不会影响进程
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void DeletcRecallXml() {
|
void DeletcRecallXml() {
|
||||||
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall");
|
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall");
|
||||||
@@ -2738,7 +2738,7 @@ void DeletcRecallXml() {
|
|||||||
QDir dir(cfg_dir);
|
QDir dir(cfg_dir);
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
qDebug() << "folder does not exist!";
|
qDebug() << "folder does not exist!";
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 删除旧的补招文件失败,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 删除旧的补招文件失败,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QStringList filter(file_name);
|
QStringList filter(file_name);
|
||||||
@@ -2753,7 +2753,7 @@ void DeletcRecallXml() {
|
|||||||
if (fileInfo.lastModified() < saveDaysAgo) {
|
if (fileInfo.lastModified() < saveDaysAgo) {
|
||||||
QFile::remove(fileInfo.absoluteFilePath());
|
QFile::remove(fileInfo.absoluteFilePath());
|
||||||
|
|
||||||
DIY_INFOLOG("process","前置的%s%d号进程 删除超过两天的补招文件", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_INFOLOG("process","【NORMAL】前置的%s%d号进程 删除超过两天的补招文件", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2770,7 +2770,7 @@ void CreateRecallXml()
|
|||||||
{
|
{
|
||||||
printf("insert ID_CJournalRecall_Map!\n");
|
printf("insert ID_CJournalRecall_Map!\n");
|
||||||
|
|
||||||
DIY_INFOLOG("process","前置的%s%d号进程 开始写入补招文件", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_INFOLOG("process","【NORMAL】前置的%s%d号进程 开始写入补招文件", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
QMap<QString, QList<CJournalRecall> > ID_CJournalRecall_Map;
|
QMap<QString, QList<CJournalRecall> > ID_CJournalRecall_Map;
|
||||||
|
|
||||||
@@ -2803,7 +2803,7 @@ void CreateRecallXml()
|
|||||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
||||||
printf("补招查询完成,打开%s失败,无法写入线路补招配置!\n", qstrRecallPath.toAscii().data());
|
printf("补招查询完成,打开%s失败,无法写入线路补招配置!\n", qstrRecallPath.toAscii().data());
|
||||||
|
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 无法将补招文件写入补招文件路径/FeProject/etc/recall/", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法将补招文件写入补招文件路径/FeProject/etc/recall/", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
QMap<QString, QList<CJournalRecall> >().swap(ID_CJournalRecall_Map);
|
QMap<QString, QList<CJournalRecall> >().swap(ID_CJournalRecall_Map);
|
||||||
return;
|
return;
|
||||||
@@ -3609,7 +3609,25 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
|
|||||||
|
|
||||||
root = cJSON_Parse(ptr); //json格式序列化
|
root = cJSON_Parse(ptr); //json格式序列化
|
||||||
if (root != NULL) {
|
if (root != NULL) {
|
||||||
break; // 解析成功,跳出循环
|
//添加解析
|
||||||
|
cJSON* codeItem = cJSON_GetObjectItem(root, "code");
|
||||||
|
cJSON* msgItem = cJSON_GetObjectItem(root, "msg");
|
||||||
|
std::string code = (codeItem && codeItem->type == cJSON_String) ? codeItem->valuestring : "not found";
|
||||||
|
std::string msg = (msgItem && msgItem->type == cJSON_String) ? msgItem->valuestring : "not found";
|
||||||
|
|
||||||
|
std::cout << "code: " << code << std::endl;
|
||||||
|
std::cout << "msg: " << msg << std::endl;
|
||||||
|
|
||||||
|
cJSON* data = cJSON_GetObjectItem(root, "data");
|
||||||
|
if (data && data->type == cJSON_Array) {
|
||||||
|
int data_size = cJSON_GetArraySize(data);
|
||||||
|
std::cout << "data_size " << data_size << std::endl;
|
||||||
|
if (data_size > 0) {
|
||||||
|
break; // 成功解析并非空数组
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cerr << "data 无效或为空数组,重试" << std::endl;
|
||||||
|
DIY_ERRORLOG("process","【ERROR】前置从web接口中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3632,11 +3650,29 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
|
|||||||
if (ledger != NULL) {
|
if (ledger != NULL) {
|
||||||
root = cJSON_Parse(ledger);
|
root = cJSON_Parse(ledger);
|
||||||
if (root != NULL) {
|
if (root != NULL) {
|
||||||
free(ledger);
|
|
||||||
break; // 本地台账成功解析
|
//解析台账
|
||||||
|
cJSON* codeItem = cJSON_GetObjectItem(root, "code");
|
||||||
|
cJSON* msgItem = cJSON_GetObjectItem(root, "msg");
|
||||||
|
std::string code = (codeItem && codeItem->type == cJSON_String) ? codeItem->valuestring : "not found";
|
||||||
|
std::string msg = (msgItem && msgItem->type == cJSON_String) ? msgItem->valuestring : "not found";
|
||||||
|
|
||||||
|
std::cout << "code: " << code << std::endl;
|
||||||
|
std::cout << "msg: " << msg << std::endl;
|
||||||
|
|
||||||
|
cJSON* data = cJSON_GetObjectItem(root, "data");
|
||||||
|
if (data && data->type == cJSON_Array) {
|
||||||
|
int data_size = cJSON_GetArraySize(data);
|
||||||
|
std::cout << "data_size " << data_size << std::endl;
|
||||||
|
if (data_size > 0) {
|
||||||
|
free(ledger);
|
||||||
|
break; // 本地台账解析成功且数组非空
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DIY_ERRORLOG("process","【ERROR】前置从本地台账中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
free(ledger); // 释放内容
|
free(ledger); // root==null释放内容
|
||||||
}
|
}
|
||||||
|
|
||||||
// 本地文件解析仍失败,等待 5 分钟后再重试
|
// 本地文件解析仍失败,等待 5 分钟后再重试
|
||||||
@@ -3662,7 +3698,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
|
|||||||
|
|
||||||
// 获取 "data" 数组
|
// 获取 "data" 数组
|
||||||
cJSON* data = cJSON_GetObjectItem(root, "data");
|
cJSON* data = cJSON_GetObjectItem(root, "data");
|
||||||
if (!data || data->type != cJSON_Array) {
|
if (!data || data->type != cJSON_Array) {//不可能
|
||||||
std::cerr << "Error: 'data' is not an array." << std::endl;
|
std::cerr << "Error: 'data' is not an array." << std::endl;
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
free(ptr);
|
free(ptr);
|
||||||
@@ -3673,7 +3709,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
|
|||||||
|
|
||||||
std::cout << "data_size " << data_size << std::endl;
|
std::cout << "data_size " << data_size << std::endl;
|
||||||
|
|
||||||
if (data_size == 0) {
|
if (data_size == 0) {//不可能
|
||||||
std::cerr << "Error: 'data' array is empty." << std::endl;
|
std::cerr << "Error: 'data' array is empty." << std::endl;
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
free(ptr);
|
free(ptr);
|
||||||
@@ -4212,7 +4248,7 @@ int parse_device_cfg_web()
|
|||||||
isdelta_flag = 1; //存在一个监测点为角型接线则这个前置就要启动第二个配置列表
|
isdelta_flag = 1; //存在一个监测点为角型接线则这个前置就要启动第二个配置列表
|
||||||
cout << "monitor_id" << monitor_id << "v_wiring_type:" << line_info.v_wiring_type << "is delta wiring:" << isdelta_flag << endl;
|
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);
|
DIY_WARNLOG("process","【WARN】前置连接的监测点 %s 是角形接线,对应终端为%s 终端类型是%s",line_info.mp_id,ied_usr->terminal_id,ied_usr->dev_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(line_info.monitor_status, monitor_status);
|
strcpy(line_info.monitor_status, monitor_status);
|
||||||
@@ -5589,7 +5625,7 @@ int parse_rpt_log_ini_one(ied_t* ied)
|
|||||||
//添加判断,有的监测点没有cpuno为2,直接申请了LD_info[2-1],没申请LD_info[0]
|
//添加判断,有的监测点没有cpuno为2,直接申请了LD_info[2-1],没申请LD_info[0]
|
||||||
if(ied_usr->LD_info[cpuno].LD_name == NULL){
|
if(ied_usr->LD_info[cpuno].LD_name == NULL){
|
||||||
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
|
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
|
||||||
DIY_ERRORLOG("process","终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
|
DIY_ERRORLOG("process","【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
|
||||||
continue;//跳过防止崩溃
|
continue;//跳过防止崩溃
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ void init_loggers_bydevid(const char* dev_id)
|
|||||||
logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM);
|
logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM);
|
||||||
logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA);
|
logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA);
|
||||||
|
|
||||||
DIY_WARNLOG(device_key_d.c_str(),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
|
DIY_WARNLOG(device_key_d.c_str(),"【WARN】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化监测点
|
// 初始化监测点
|
||||||
@@ -360,7 +360,7 @@ void init_loggers_bydevid(const char* dev_id)
|
|||||||
logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM);
|
logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM);
|
||||||
logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA);
|
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);
|
DIY_WARNLOG(mon_key_d.str().c_str(),"【WARN】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ void init_loggers() {
|
|||||||
logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM);
|
logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM);
|
||||||
logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA);
|
logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA);
|
||||||
|
|
||||||
DIY_WARNLOG(device_key_d.c_str(),"终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
|
DIY_WARNLOG(device_key_d.c_str(),"【WARN】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
|
||||||
|
|
||||||
// 初始化监测点
|
// 初始化监测点
|
||||||
// 监测点 logger 名称格式:monitor.<mp_id>.COM / .DATA
|
// 监测点 logger 名称格式:monitor.<mp_id>.COM / .DATA
|
||||||
@@ -434,7 +434,7 @@ void init_loggers() {
|
|||||||
logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM);
|
logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM);
|
||||||
logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA);
|
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);
|
DIY_WARNLOG(mon_key_d.str().c_str(),"【WARN】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3006,8 +3006,14 @@ static void scanAndResendOfflineFiles(const std::string &dirPath)
|
|||||||
std::cout << "old file send fail" << std::endl;
|
std::cout << "old file send fail" << std::endl;
|
||||||
// 表示有响应,则可视为成功;根据项目需要可加更精细的判断
|
// 表示有响应,则可视为成功;根据项目需要可加更精细的判断
|
||||||
handleCommentResponse(std::string(ptr));
|
handleCommentResponse(std::string(ptr));
|
||||||
|
|
||||||
|
DIY_WARNLOG("process","【WARN】前置重发暂态事件失败");
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
|
DIY_WARNLOG("process","【WARN】前置重发暂态事件成功");
|
||||||
|
|
||||||
std::cout << "old file send success,remove it" << std::endl;
|
std::cout << "old file send success,remove it" << std::endl;
|
||||||
// 删除文件
|
// 删除文件
|
||||||
remove(fileList[i].fileName.c_str());
|
remove(fileList[i].fileName.c_str());
|
||||||
@@ -3040,6 +3046,14 @@ double mag, double dur, long long start_tm, long long end_tm, int dis_kind,
|
|||||||
char* uuid_cfg,char* uuid_dat,
|
char* uuid_cfg,char* uuid_dat,
|
||||||
char* mp_id,char* Qvvr_rptname,char* devtype)
|
char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//监测点日志的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;
|
XmlConfig c_xmlcfg;
|
||||||
@@ -3106,6 +3120,10 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
|||||||
cJSON* j_r = cJSON_Parse(ptr);
|
cJSON* j_r = cJSON_Parse(ptr);
|
||||||
// 如果发送失败(j_r == NULL),则把当前 json 存入指定目录(/FeProject/dat/qvvr/)
|
// 如果发送失败(j_r == NULL),则把当前 json 存入指定目录(/FeProject/dat/qvvr/)
|
||||||
if (j_r == NULL) {
|
if (j_r == NULL) {
|
||||||
|
|
||||||
|
//mq日志
|
||||||
|
DIY_ERRORLOG(full_key_m_d,"【ERROR】暂态接口响应异常,无法上送监测点%s的暂态事件",mp_id);
|
||||||
|
|
||||||
std::cout << "qvvr send fail ,store in local" << std::endl;
|
std::cout << "qvvr send fail ,store in local" << std::endl;
|
||||||
// 1) 先检查/FeProject/dat/qvvr/目录文件大小是否超过 10M,若超过则删除最老的一个文件
|
// 1) 先检查/FeProject/dat/qvvr/目录文件大小是否超过 10M,若超过则删除最老的一个文件
|
||||||
std::string qvvrDir = "/FeProject/dat/qvvr/";
|
std::string qvvrDir = "/FeProject/dat/qvvr/";
|
||||||
@@ -3148,6 +3166,29 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
|||||||
} else {
|
} else {
|
||||||
// 处理 ptr 为 NULL 的情况,例如日志记录或错误处理
|
// 处理 ptr 为 NULL 的情况,例如日志记录或错误处理
|
||||||
std::cout << "Error: Received NULL response" << std::endl;
|
std::cout << "Error: Received NULL response" << std::endl;
|
||||||
|
|
||||||
|
//mq日志
|
||||||
|
DIY_ERRORLOG(full_key_m_d,"【ERROR】暂态接口异常,无响应,无法上送监测点%s的暂态事件",mp_id);
|
||||||
|
|
||||||
|
std::cout << "qvvr send fail ,store in local" << std::endl;
|
||||||
|
// 1) 先检查/FeProject/dat/qvvr/目录文件大小是否超过 10M,若超过则删除最老的一个文件
|
||||||
|
std::string qvvrDir = "/FeProject/dat/qvvr/";
|
||||||
|
checkAndRemoveOldestIfNeeded(qvvrDir, 10LL * 1024 * 1024);
|
||||||
|
// 2) 将此条 json 存为文件,文件名: mp_id-start_time_str-dis_kind.txt
|
||||||
|
// 例如: 502-2025-04-02 15:25:30.123-3.txt (仅示例)
|
||||||
|
std::string fileName = qvvrDir;
|
||||||
|
fileName += mp_id;
|
||||||
|
fileName += "-";
|
||||||
|
fileName += FormatTimeForFilename(start_time_str);
|
||||||
|
fileName += "-";
|
||||||
|
|
||||||
|
char buf[64];
|
||||||
|
sprintf(buf, "%d", dis_kind);
|
||||||
|
fileName += buf;
|
||||||
|
fileName += ".txt";
|
||||||
|
// 把 json_string 写入文件
|
||||||
|
writeJsonToFile(fileName.c_str(), json_string);
|
||||||
|
|
||||||
// 释放内存
|
// 释放内存
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
free(json_string);
|
free(json_string);
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ int main(int argc, const char **argv)
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index);
|
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
//log_debug("process", buf);
|
//log_debug("process", buf);
|
||||||
DIY_WARNLOG("process","前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_WARNLOG("process","【WARN】前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
#ifdef _OS_UNIX_
|
#ifdef _OS_UNIX_
|
||||||
#ifdef QT_NO_DEBUG
|
#ifdef QT_NO_DEBUG
|
||||||
@@ -270,7 +270,7 @@ int main(int argc, const char **argv)
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 台账初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 台账初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
//log_error("process", buf);
|
//log_error("process", buf);
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 台账初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 台账初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,7 +279,7 @@ int main(int argc, const char **argv)
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 线程初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 线程初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
//log_error("process", buf);
|
//log_error("process", buf);
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 线程初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 线程初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +326,7 @@ int main(int argc, const char **argv)
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的业务线程死锁,退出进程");
|
//format_log_msg(buf,sizeof(buf),"前置的业务线程死锁,退出进程");
|
||||||
//log_error("process", buf);
|
//log_error("process", buf);
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程 业务线程死锁,退出进程", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 业务线程死锁,退出进程", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
apr_sleep(apr_time_from_sec(10));
|
apr_sleep(apr_time_from_sec(10));
|
||||||
exit(-1039);
|
exit(-1039);
|
||||||
|
|||||||
@@ -381,7 +381,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
|
|||||||
rptinfo->IntgPd,rptinfo->TrgOpt,rptinfo->OptFlds[0],rptinfo->OptFlds[1] );
|
rptinfo->IntgPd,rptinfo->TrgOpt,rptinfo->OptFlds[0],rptinfo->OptFlds[1] );
|
||||||
|
|
||||||
//mq日志
|
//mq日志
|
||||||
DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s注册报告成功,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name);
|
DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s注册报告成功,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name);
|
||||||
|
|
||||||
// add here to GI not the same time
|
// add here to GI not the same time
|
||||||
GIoffset = 0.5 * g_pt61850app->giTime;
|
GIoffset = 0.5 * g_pt61850app->giTime;
|
||||||
@@ -505,7 +505,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
|
|||||||
LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id);
|
LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id);
|
||||||
|
|
||||||
//mq日志
|
//mq日志
|
||||||
DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s开始补招数据", LD_info->name,LD_info->mp_id);
|
DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s开始补招数据", LD_info->name,LD_info->mp_id);
|
||||||
|
|
||||||
ret = mms_jread(loginfo, chnl_usr->net_info, loginfo->LD_info->LD_name, loginfo->logName,
|
ret = mms_jread(loginfo, chnl_usr->net_info, loginfo->LD_info->LD_name, loginfo->logName,
|
||||||
loginfo->start_time, loginfo->end_time, g_pt61850app->mmsOpTimeout, chnl_usr->ip_str);
|
loginfo->start_time, loginfo->end_time, g_pt61850app->mmsOpTimeout, chnl_usr->ip_str);
|
||||||
@@ -514,7 +514,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
|
|||||||
LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id);
|
LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id);
|
||||||
|
|
||||||
//mq日志
|
//mq日志
|
||||||
DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s补招数据失败", LD_info->name,LD_info->mp_id);
|
DIY_ERRORLOG(full_key_m_c,"【ERROR】监测点:%s - id:%s补招数据失败", LD_info->name,LD_info->mp_id);
|
||||||
|
|
||||||
failed_count++;
|
failed_count++;
|
||||||
}
|
}
|
||||||
@@ -1325,13 +1325,13 @@ void check_disk_quota()
|
|||||||
//printf("Current user disk free size: %dMB ,total size: %dMB \n",freeSizeMB,totalSizeMB);
|
//printf("Current user disk free size: %dMB ,total size: %dMB \n",freeSizeMB,totalSizeMB);
|
||||||
if (freeSizeMB<g_min_free_size){
|
if (freeSizeMB<g_min_free_size){
|
||||||
echo_warn2("Current user disk free size: %dMB < %dMB, please check!\n",freeSizeMB,g_min_free_size);
|
echo_warn2("Current user disk free size: %dMB < %dMB, please check!\n",freeSizeMB,g_min_free_size);
|
||||||
DIY_WARNLOG("process","前置磁盘检测: 当前磁盘的可用空间为%dMB,小于最小可用空间%dMB,请检查磁盘",freeSizeMB,g_min_free_size);
|
DIY_WARNLOG("process","【WARN】前置磁盘检测: 当前磁盘的可用空间为%dMB,小于最小可用空间%dMB,请检查磁盘",freeSizeMB,g_min_free_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((freeSizeMB/(totalSizeMB/100+1) )<10){
|
if ((freeSizeMB/(totalSizeMB/100+1) )<10){
|
||||||
echo_warn2("Current user disk free size percent < 10%%, free size: %dMB ,total size: %dMB ,please check!\n",
|
echo_warn2("Current user disk free size percent < 10%%, free size: %dMB ,total size: %dMB ,please check!\n",
|
||||||
freeSizeMB,totalSizeMB);
|
freeSizeMB,totalSizeMB);
|
||||||
DIY_WARNLOG("process","前置磁盘检测: 当前磁盘的可用空间的百分比小于10%%,可用空间为%dMB,总空间为%dMB,请检查磁盘",freeSizeMB,totalSizeMB);
|
DIY_WARNLOG("process","【WARN】前置磁盘检测: 当前磁盘的可用空间的百分比小于10%%,可用空间为%dMB,总空间为%dMB,请检查磁盘",freeSizeMB,totalSizeMB);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1604,7 +1604,7 @@ void CheckNextNotConnectedChannel()
|
|||||||
connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0);
|
connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0);
|
||||||
|
|
||||||
//mq日志
|
//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);
|
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
|
else
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ apr_status_t init_rdb()
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
//log_error("process", buf);
|
//log_error("process", buf);
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ apr_status_t init_rdb()
|
|||||||
//char buf[256];
|
//char buf[256];
|
||||||
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
//format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
//log_error("process", buf);
|
//log_error("process", buf);
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -220,7 +220,7 @@ apr_status_t init_rdb()
|
|||||||
if (rv != APR_SUCCESS) {
|
if (rv != APR_SUCCESS) {
|
||||||
echo_errg("Failed to parse report log define ini file! \n");
|
echo_errg("Failed to parse report log define ini file! \n");
|
||||||
|
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程报告初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程报告初始化失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -228,7 +228,7 @@ apr_status_t init_rdb()
|
|||||||
if (app_get_private_config(g_my_conf_fname) != APR_SUCCESS) {
|
if (app_get_private_config(g_my_conf_fname) != APR_SUCCESS) {
|
||||||
echo_errg("Failed when processing private configuration\n");
|
echo_errg("Failed when processing private configuration\n");
|
||||||
|
|
||||||
DIY_ERRORLOG("process","前置的%s%d号进程读取mms配置失败", get_front_msg_from_subdir(), g_front_seg_index);
|
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程读取mms配置失败", get_front_msg_from_subdir(), g_front_seg_index);
|
||||||
|
|
||||||
return APR_EGENERAL;
|
return APR_EGENERAL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user