diff options
| author | jixinyi <[email protected]> | 2019-02-14 15:06:36 +0800 |
|---|---|---|
| committer | jixinyi <[email protected]> | 2019-02-14 15:06:36 +0800 |
| commit | 1ded5b5d951f73462f9452423a27ef582a07ca69 (patch) | |
| tree | a150baa66d46ee8ceceb7a8a11bffe928341d612 /src/mctrl.cpp | |
| parent | 4768c875928b5ed528af85be5ce6b60421c450ff (diff) | |
增加库表数据统计功能develop
Diffstat (limited to 'src/mctrl.cpp')
| -rw-r--r-- | src/mctrl.cpp | 98 |
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; |
