summaryrefslogtreecommitdiff
path: root/src/mctrl.cpp
diff options
context:
space:
mode:
authorjixinyi <[email protected]>2019-02-14 15:06:36 +0800
committerjixinyi <[email protected]>2019-02-14 15:06:36 +0800
commit1ded5b5d951f73462f9452423a27ef582a07ca69 (patch)
treea150baa66d46ee8ceceb7a8a11bffe928341d612 /src/mctrl.cpp
parent4768c875928b5ed528af85be5ce6b60421c450ff (diff)
增加库表数据统计功能develop
Diffstat (limited to 'src/mctrl.cpp')
-rw-r--r--src/mctrl.cpp98
1 files changed, 82 insertions, 16 deletions
diff --git a/src/mctrl.cpp b/src/mctrl.cpp
index e29ca5c..744f57a 100644
--- a/src/mctrl.cpp
+++ b/src/mctrl.cpp
@@ -3,12 +3,10 @@
#include <assert.h>
#include <unistd.h>
#include <time.h>
+#include <pthread.h>
#include "MESA_prof_load.h"
-#include "MESA_handle_logger.h"
-#include "Maat_rule.h"
-#include "Maat_command.h"
#include "mctrl.h"
-#include "MESA_htable.h"
+
struct mctrl_glocal_info mctrl_g;
@@ -137,16 +135,19 @@ void del_ir_redis_info(int flag,const char* table_line,int rule_id)
if(flag & INTERCEPT_FLAG)
{
del_ir_line(mctrl_g.i_feather,(char*)INTERCEPT_TABLE_NAME,table_line,rule_id);
+ mctrl_g.fs_status_num[INTERCEPT_ID]--;
}
if(flag & NOMINEE_FLAG)
{
del_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE_NAME,table_line,rule_id);
+ mctrl_g.fs_status_num[NOMINEE_ID]--;
}
if(flag & CANDIDATE_FLAG)
{
del_ir_line(mctrl_g.n_feather,(char*)CANDIDATE_TABLE_NAME,table_line,rule_id);
+ mctrl_g.fs_status_num[CANDIDATE_ID]--;
}
return;
@@ -198,12 +199,15 @@ void table_id_change_name(int table_id,char **table_name)
{
case STATIC_NOMINEE_ID:
*table_name=(char*)STATIC_NOMINEE_TABLE_NAME;
+ mctrl_g.fs_status_num[STATIC_NOMINEE_ID]--;
break;
case DYNAMIC_NOMINEE_ID:
*table_name=(char*)DYNAMIC_NOMINEE_TABLE_NAME;
+ mctrl_g.fs_status_num[DYNAMIC_NOMINEE_ID]--;
break;
case DNAT_POLICY_ID:
*table_name=(char*)DNAT_POLICY_TABLE_NAME;
+ mctrl_g.fs_status_num[DNAT_POLICY_ID]--;
break;
case NOMINEE_ID:
*table_name=(char*)NOMINEE_TABLE_NAME;
@@ -241,7 +245,19 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch
switch(table_id)
{
+ case STATIC_NOMINEE_ID:
+ mctrl_g.fs_status_num[STATIC_NOMINEE_ID]++;
+ memcpy(mctrl_info.user_region,"0",sizeof("0"));
+ mctrl_info.htable_flag=STATIC_NOMINEE_FLAG;
+ sscanf(table_line,"%d\t%d\t%d\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%d\t%d\t%d\t%d\t%d\t%*d\t%*s\t%*s",
+ &mctrl_info.region_id,&mctrl_info.group_id,&mctrl_info.addr_type,mctrl_info.src_ip,mctrl_info.src_port,
+ mctrl_info.dst_ip,mctrl_info.dst_port,&mctrl_info.procotol,&mctrl_info.direction,
+ &mctrl_info.addr_pool_id,&mctrl_info.is_valid,&mctrl_info.action);
+ mctrl_info.region_id=(mctrl_info.region_id%DNAT_NUMBER)+DNAT_NUMBER;
+ table_name=(char*)STATIC_NOMINEE_TABLE_NAME;
+ break;
case DYNAMIC_NOMINEE_ID:
+ mctrl_g.fs_status_num[DYNAMIC_NOMINEE_ID]++;
mctrl_info.addr_pool_id=0;
memcpy(mctrl_info.src_port,"0",sizeof("0"));
memcpy(mctrl_info.dst_ip,"0.0.0.0",sizeof("0.0.0.0"));
@@ -255,17 +271,8 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch
mctrl_info.group_id=mctrl_info.region_id;
table_name=(char*)DYNAMIC_NOMINEE_TABLE_NAME;
break;
- case STATIC_NOMINEE_ID:
- memcpy(mctrl_info.user_region,"0",sizeof("0"));
- mctrl_info.htable_flag=STATIC_NOMINEE_FLAG;
- sscanf(table_line,"%d\t%d\t%d\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%d\t%d\t%d\t%d\t%d\t%*d\t%*s\t%*s",
- &mctrl_info.region_id,&mctrl_info.group_id,&mctrl_info.addr_type,mctrl_info.src_ip,mctrl_info.src_port,
- mctrl_info.dst_ip,mctrl_info.dst_port,&mctrl_info.procotol,&mctrl_info.direction,
- &mctrl_info.addr_pool_id,&mctrl_info.is_valid,&mctrl_info.action);
- mctrl_info.region_id=(mctrl_info.region_id%DNAT_NUMBER)+DNAT_NUMBER;
- table_name=(char*)STATIC_NOMINEE_TABLE_NAME;
- break;
case DNAT_POLICY_ID:
+ mctrl_g.fs_status_num[DNAT_POLICY_ID]++;
memcpy(mctrl_info.src_ip,"0.0.0.0",sizeof("0.0.0.0"));
memcpy(mctrl_info.src_port,"0",sizeof("0"));
memcpy(mctrl_info.user_region,"0",sizeof("0"));
@@ -389,6 +396,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key,
if(!(htable_flag & INTERCEPT_FLAG))
{
htable_flag+=INTERCEPT_FLAG;
+ mctrl_g.fs_status_num[INTERCEPT_ID]++;
}
table_name=(char*)INTERCEPT_TABLE_NAME;
break;
@@ -396,6 +404,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key,
if(!(htable_flag & NOMINEE_FLAG))
{
htable_flag+=NOMINEE_FLAG;
+ mctrl_g.fs_status_num[NOMINEE_ID]++;
}
table_name=(char*)NOMINEE_TABLE_NAME;
break;
@@ -403,6 +412,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key,
if(!(htable_flag & CANDIDATE_FLAG))
{
htable_flag+=CANDIDATE_FLAG;
+ mctrl_g.fs_status_num[CANDIDATE_ID]++;
}
table_name=(char*)CANDIDATE_TABLE_NAME;
break;
@@ -437,6 +447,7 @@ void nominee_intercept_candidate_table_new_cb(int table_id, const char* key, con
if(*(int*)argp==NOMINEE_FLAG&&rule_id<DNAT_NUMBER)
{
del_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE_NAME,table_line,rule_id);
+ mctrl_g.fs_status_num[NOMINEE_ID]--;
return;
}
@@ -507,7 +518,7 @@ void htable_iterate(const uchar * key, uint size, void * data, void * user)
int rule_id=0;
char *table_line=(char*)data;
sscanf(table_line,"%d\t%d",&htable_flag,&rule_id);
-
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"htable_iterate", "The data rule_id:%d,htable_flag:%d",rule_id,htable_flag);
set_ir_redis_info(htable_flag,table_line,rule_id);
return;
@@ -523,6 +534,7 @@ void Maat_init()
const char *section_n = "Mctrl_NOMINEE";
char table_info_path[MAX_PATH_LEN];
char logger_path[MAX_PATH_LEN];
+
int max_thread_num=0;
int logger_level=0;
@@ -638,12 +650,66 @@ int htable_init()
}
}
+void *mctrl_fieldstat2(void* arg)
+{
+ int i=0;
+
+ while(1)
+ {
+ for(i=0;i<STATUS_MAX_NUM;i++)
+ {
+ FS_operate(mctrl_g.stat_handle,mctrl_g.fs_status_id[i],0,FS_OP_SET,mctrl_g.fs_status_num[i]);
+ }
+ sleep(1);
+ }
+ return NULL;
+}
+
+
+void stat_init()
+{
+ char stat_path[]="log/mctrl_stat.log";
+ const char* app_name="mctrl_fs2";
+ int value=1;
+ pthread_t mctrl_fs2tid;
+ int err=0;
+
+ mctrl_g.stat_handle = FS_create_handle();
+
+ FS_set_para(mctrl_g.stat_handle, OUTPUT_DEVICE, stat_path, strlen(stat_path)+1);
+ FS_set_para(mctrl_g.stat_handle, PRINT_MODE, &value, sizeof(value));
+ FS_set_para(mctrl_g.stat_handle, CREATE_THREAD, &value, sizeof(value));
+ FS_set_para(mctrl_g.stat_handle, STAT_CYCLE, &value, sizeof(value));
+ FS_set_para(mctrl_g.stat_handle, APP_NAME, &app_name,strlen(app_name)+1);
+
+ mctrl_g.fs_status_id[STATIC_NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "static_nominee_num");
+ mctrl_g.fs_status_id[DYNAMIC_NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dynamic_nominee_num");
+ mctrl_g.fs_status_id[DNAT_POLICY_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_policy_num");
+ mctrl_g.fs_status_id[NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "nominee_num");
+ mctrl_g.fs_status_id[INTERCEPT_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "intercept_num");
+ mctrl_g.fs_status_id[CANDIDATE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "candidate_num");
+
+ FS_start(mctrl_g.stat_handle);
+
+ err=pthread_create(&mctrl_fs2tid,NULL,mctrl_fieldstat2,NULL);
+
+ if(err!=0)
+ {
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"field_stat2", "can't create thread:%s",strerror(err));
+ assert(0);
+ }
+
+ return;
+
+}
+
int main(int argc, char * argv [ ])
{
Maat_init();
htable_init();
-
+ stat_init();
+
int static_flag=STATIC_NOMINEE_FLAG;
int dynamic_flag=DYNAMIC_NOMINEE_FLAG;
int dnat_policy_flag=DNAT_POLICY_FLAG;