add log4cplus

This commit is contained in:
lnk
2025-05-09 16:53:07 +08:00
parent 92117de97e
commit 8a2e6ea537
109 changed files with 18240 additions and 4034 deletions

View File

@@ -1,6 +1,6 @@
/**
* @file: $RCSfile: rdb_client.c,v $
* @brief: $PROFIBUS <EFBFBD><EFBFBD>SSRTDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief: $PROFIBUS SSRTDB交互
*
* @version: $Revision: 1.11 $
* @date: $Date: 2020/10/28 05:21:18 $
@@ -14,7 +14,7 @@
#include "rdb_client.h"
#include "db_interface.h"
#include "node.h"
#include <pthread.h>//lnk20250114<EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include <pthread.h>//lnk20250114给台账添加互斥锁
/*lnk10-10 */////////////////////////////////
extern int HTTP_PORT;
@@ -23,7 +23,7 @@ extern int G_TEST_FLAG;
extern int g_front_seg_index;
extern int g_front_seg_num;
#include "../include/rocketmq/SimpleProducer.h"
#include "../rocketmq/SimpleProducer.h"
#include "../cfg_parse/custom_printf.h"//lnk20250225
////////////////////////////////////////////
@@ -42,11 +42,11 @@ apr_pool_t* g_init_pool;
apr_pool_t* g_run_pool;
apr_pool_t* g_temp_dev_pool;
//lnk20250114<EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//lnk20250114给台账添加互斥锁
pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
extern char g_onlyIP[255]; //ֱ<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern char g_onlyIP[255]; //直连某个IP仅仅为方便测试
//为无锡西径变调档添加
uint8_t set_mx_q;
pt61850app_t* g_pt61850app;
@@ -186,21 +186,23 @@ apr_status_t init_rdb()
GetServerIndexFromDB();
rv = parse_device_cfg_web();
if (rv != APR_SUCCESS) {
echo_errg("Parsed device config xml file with error,try to run! \n");
return rv;
}
//台账读取过后初始化各级的日志
rv = parse_model_cfg_web();
if (rv != APR_SUCCESS) {
echo_errg("Parsed model with error,try to run! \n");
return rv;
}
Set_xml_nodeinfo();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xmlģ<EFBFBD><EFBFBD>
Set_xml_nodeinfo();//解析xml模型
rv = parse_rpt_log_ini();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
rv = parse_rpt_log_ini();//报告块初始化
if (rv != APR_SUCCESS) {
echo_errg("Failed to parse report log define ini file! \n");
return rv;
@@ -216,7 +218,7 @@ apr_status_t init_rdb()
extern int SOCKETENABLE;
extern int HTTPENABLE;
/*--------------------------- <EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> -----------------------------------*/
/*--------------------------- 规约初始化 -----------------------------------*/
apr_status_t run_protocol()
{
apr_status_t rv;
@@ -224,9 +226,9 @@ apr_status_t run_protocol()
static apr_threadattr_t* worker_attr = NULL;
//lnk20250214//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>0<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ˣ<EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD>̺<EFBFBD>
if (g_onlyIP[0] != 0 && g_front_seg_index == 0 && g_front_seg_num >= 10){ //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>web<EFBFBD>˿<EFBFBD><EFBFBD>ƴ򿪵ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_front_seg_index = g_front_seg_num; //<EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>̺<EFBFBD>Ϊ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õĽ<EFBFBD><EFBFBD>̺ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ<EFBFBD><EFBFBD>־
//lnk20250214//单连模式进程先通过进程号0获取所有台账然后再更新自己的进程号
if (g_onlyIP[0] != 0 && g_front_seg_index == 0 && g_front_seg_num >= 10){ //这是web端控制打开的单连进程
g_front_seg_index = g_front_seg_num; //更新进程号为:为这个单连进程设置的进程号,用来控制实时日志
}
init_MMS();
@@ -248,20 +250,20 @@ apr_status_t run_protocol()
if ((rv = apr_thread_create(&rtdb_thread, worker_attr, rtdb_worker, NULL, g_run_pool)) != APR_SUCCESS)
return rv;
try_start_kafka_thread();//mq<EFBFBD>߳<EFBFBD>
try_start_kafka_thread();//mq线程
//lnk20241213<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mq<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
//lnk20241213添加mq消费者线程
try_start_mqconsumer_thread();
///////////////////WW 2023-08-22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>WebSocket<EFBFBD>߳<EFBFBD>
///////////////////WW 2023-08-22 增加数据库和WebSocket线程
if (g_onlyIP[0] != 0 || g_node_id == NEW_HIS_DATA_BASE_NODE_ID || g_node_id == HIS_DATA_BASE_NODE_ID || g_node_id == RECALL_ALL_DATA_BASE_NODE_ID)
{
printf("g_onlyIP[0] != 0!\n\a");
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socket<EFBFBD><EFBFBD>http<EFBFBD>߳<EFBFBD>
//单连进程不打开sockethttp线程
}
else //socket<EFBFBD><EFBFBD>http<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵߳Ŀ<EFBFBD><EFBFBD><EFBFBD>
else //sockethttp、测试线程的开启
{
printf("g_onlyIP[0] == 0!\n\a");
if (1 == SOCKETENABLE)
@@ -272,16 +274,16 @@ apr_status_t run_protocol()
exit(1);
}
int ServerPort = 13000;//WW <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ж<EFBFBD>ȡ
if (g_node_id == STAT_DATA_BASE_NODE_ID)//ͳ<EFBFBD>Ʋɼ<EFBFBD>
int ServerPort = 13000;//WW 这里后面需要从数据库的表中读取
if (g_node_id == STAT_DATA_BASE_NODE_ID)//统计采集
ServerPort = SOCKET_PORT + STAT_DATA_BASE_NODE_ID + g_front_seg_index;
else if (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//补召
ServerPort = SOCKET_PORT + RECALL_HIS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//3<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
else if (g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//3秒采集
ServerPort = SOCKET_PORT + THREE_SECS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//<EFBFBD><EFBFBD>̬¼<EFBFBD><EFBFBD>
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//暂态录波
ServerPort = SOCKET_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
@@ -312,23 +314,23 @@ apr_status_t run_protocol()
if (1 == HTTPENABLE)
{
//lnk20241029<EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD>߳<EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////////
if (g_node_id == STAT_DATA_BASE_NODE_ID)//ͳ<EFBFBD>Ʋɼ<EFBFBD>
//lnk20241029增加http线程///////////////////////////////////////////////////////////////////////////////////////////////
if (g_node_id == STAT_DATA_BASE_NODE_ID)//统计采集
HTTP_PORT = HTTP_PORT + STAT_DATA_BASE_NODE_ID + g_front_seg_index;
else if (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//补召
HTTP_PORT = HTTP_PORT + RECALL_HIS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//3<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
else if (g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//3秒采集
HTTP_PORT = HTTP_PORT + THREE_SECS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//<EFBFBD><EFBFBD>̬¼<EFBFBD><EFBFBD>
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//暂态录波
HTTP_PORT = HTTP_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
printf("try_start_web_http_thread \n");
try_start_web_http_thread();
printf("try_start_http_thread \n");
try_start_http_thread();
//lnk20241029<EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD>߳<EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////////////
//lnk20241029增加http线程///////////////////////////////////////////////////////////////////////////////////////////////////
}
@@ -342,32 +344,32 @@ apr_status_t run_protocol()
extern uint32_t g_dead_lock_counter;
extern uint32_t g_thread_blocked_times;
/*--------------------------- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ<EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> -----------------------------------*/
/*--------------------------- 连接实时库线程 -----------------------------------*/
static void* APR_THREAD_FUNC rtdb_worker(apr_thread_t* thd, void* data)
{
while (1) {
doCommService();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>61850<EFBFBD><EFBFBD>Ϣ
doCommService();//处理61850消息
check_3s_config();//3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>̶<EFBFBD>ȡ3<EFBFBD><EFBFBD><EFBFBD>
check_3s_config();//3秒数据进程读取3秒触发
CheckNextNotConnectedChannel();//<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
CheckNextNotConnectedChannel();//所有长连接进程判断连接状态
CheckAllConnectedChannel();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD>١<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CheckAllConnectedChannel();//触发报告、日志补召、发送心跳
create_recall_xml();//<EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD>ļ<EFBFBD>
create_recall_xml();//生成待补招xml文件
pthread_mutex_lock(&mtx);
check_ledger_update();//lnk20250113<EFBFBD><EFBFBD>ȡ̨<EFBFBD>˸<EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>
check_ledger_update();//lnk20250113读取台账更新,触发台账更新
pthread_mutex_unlock(&mtx);
check_disk_quota();//<EFBFBD>жϴ<EFBFBD><EFBFBD>̿ռ<EFBFBD>
check_disk_quota();//判断磁盘空间
apr_pool_clear(g_pt61850app->tmp_pool);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
apr_pool_clear(g_pt61850app->tmp_pool);//清除临时缓存
g_dead_lock_counter = 0;
g_thread_blocked_times = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
g_thread_blocked_times = 0;//监控线程
}
echo_msg("rtdb worker thread terminated...");
@@ -406,7 +408,7 @@ apr_time_t convert_btime6_to_apr_time(MMS_BTIME6* bTime6)
{
apr_time_t ticks;
if ((TIME_T_1984_JAN_1 + (bTime6->day * SECONDS_PER_DAY)) > TIME_T_2036) {
echo_warn("ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬳<EFBFBD><EFBFBD><EFBFBD>2036<EFBFBD>");
echo_warn("时标错误,超过2036年!");
}
ticks = TIME_T_1984_JAN_1;
ticks += (bTime6->day * SECONDS_PER_DAY);
@@ -418,7 +420,7 @@ apr_time_t convert_btime6_to_apr_time(MMS_BTIME6* bTime6)
/*
61850
λ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֵ
位 属性名称 值
0-1 Good 00
Invalid 01
Reserved 10
@@ -437,15 +439,15 @@ apr_time_t convert_btime6_to_apr_time(MMS_BTIME6* bTime6)
*/
/*
60870
λ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֵ
0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
5 <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
6 <EFBFBD>ǵ<EFBFBD>ǰֵ
7 <EFBFBD><EFBFBD>Ч
位 属性名称 值
0 溢出
1 保留
2 保留
3 保留
4 被封锁
5 被取代
6 非当前值
7 无效
*/
byte_t get_mx_q_from_61850(char* q_61850)
{
@@ -480,15 +482,15 @@ byte_t get_mx_q_from_61850(char* q_61850)
/*
60870
λ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֵ
0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
5 <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
6 <EFBFBD>ǵ<EFBFBD>ǰֵ
7 <EFBFBD><EFBFBD>Ч
位 属性名称 值
0 保留
1 保留
2 保留
3 保留
4 被封锁
5 被取代
6 非当前值
7 无效
*/
byte_t get_st_q_from_61850(char* q_61850)
{