diff options
| author | 刘畅 <[email protected]> | 2024-08-16 02:12:32 +0000 |
|---|---|---|
| committer | 刘畅 <[email protected]> | 2024-08-16 02:12:32 +0000 |
| commit | 1ab14decc6d7aee9505b7f0226ec4f922a5a4cae (patch) | |
| tree | d67620a40e27e1e4a6c6140068b9738a6df19c59 | |
| parent | 5b19aac02fb7b453cc0e6ae30eef1465352d92aa (diff) | |
| parent | 357969886357d382092acdfa92b1d1899b9ec8d1 (diff) | |
Merge branch 'separate_counter_and_guage_with_fieldstat4_easy_output' into 'rel'v3.1.40
单独注册一个fieldstat4_easy句柄发送queue_len的统计
See merge request tango/shaping-engine!102
| -rw-r--r-- | shaping/include/shaper_stat.h | 3 | ||||
| -rw-r--r-- | shaping/src/shaper_global_stat.cpp | 6 | ||||
| -rw-r--r-- | shaping/src/shaper_stat.cpp | 94 | ||||
| -rw-r--r-- | shaping/test/gtest_shaper.cpp | 170 |
4 files changed, 176 insertions, 97 deletions
diff --git a/shaping/include/shaper_stat.h b/shaping/include/shaper_stat.h index e508d63..198b87d 100644 --- a/shaping/include/shaper_stat.h +++ b/shaping/include/shaper_stat.h @@ -46,7 +46,8 @@ struct shaping_stat_for_profile { }; struct shaping_stat { - struct fieldstat_easy *instance; + struct fieldstat_easy *counter_instance; + struct fieldstat_easy *guage_instance; rd_kafka_t *kafka_handle; rd_kafka_topic_t *topic_rkt; int output_interval_s; diff --git a/shaping/src/shaper_global_stat.cpp b/shaping/src/shaper_global_stat.cpp index 1fb3764..14baa81 100644 --- a/shaping/src/shaper_global_stat.cpp +++ b/shaping/src/shaper_global_stat.cpp @@ -75,7 +75,6 @@ struct shaping_global_stat* shaper_global_stat_init(int work_thread_num) { struct shaping_global_stat *stat = NULL; struct shping_global_stat_conf conf; - struct field tag; stat = (struct shaping_global_stat*)calloc(1, sizeof(struct shaping_global_stat)); @@ -84,10 +83,7 @@ struct shaping_global_stat* shaper_global_stat_init(int work_thread_num) goto ERROR; } - tag.key = "shaping_global"; - tag.type = FIELD_VALUE_CSTRING; - tag.value_str = "shaping_global"; - stat->instance = fieldstat_easy_new(work_thread_num, "shaping_global", &tag, 1); + stat->instance = fieldstat_easy_new(work_thread_num, "shaping_global", NULL, 0); if (stat->instance == NULL) { LOG_ERROR("%s: shaping global init fieldstat instance failed", LOG_TAG_STAT); goto ERROR; diff --git a/shaping/src/shaper_stat.cpp b/shaping/src/shaper_stat.cpp index 1498230..6275d93 100644 --- a/shaping/src/shaper_stat.cpp +++ b/shaping/src/shaper_stat.cpp @@ -36,8 +36,11 @@ thread_local struct field tags[TAG_IDX_MAX] = void shaper_stat_destroy(struct shaping_stat *stat) { if (stat) { - if (stat->instance) { - fieldstat_easy_free(stat->instance); + if (stat->counter_instance) { + fieldstat_easy_free(stat->counter_instance); + } + if (stat->guage_instance) { + fieldstat_easy_free(stat->guage_instance); } free(stat); } @@ -170,26 +173,33 @@ struct shaping_stat* shaper_stat_init(int thread_num) global_tags[4].type = FIELD_VALUE_CSTRING; global_tags[4].value_str = "shaping_metric"; - stat->instance = fieldstat_easy_new(thread_num, "traffic_shaping_rule_hits", global_tags, 5); - if (stat->instance == NULL) { + stat->counter_instance = fieldstat_easy_new(thread_num, "traffic_shaping_rule_hits", global_tags, 5); + if (stat->counter_instance == NULL) { + LOG_ERROR("%s: shaping init fieldstat instance failed", LOG_TAG_STAT); + goto ERROR; + } + + stat->guage_instance = fieldstat_easy_new(thread_num, "traffic_shaping_rule_hits", global_tags, 5); + if (stat->guage_instance == NULL) { LOG_ERROR("%s: shaping init fieldstat instance failed", LOG_TAG_STAT); goto ERROR; } - stat->latency_histogram_id = fieldstat_easy_register_histogram(stat->instance, "latency_distribution_us", 1, 1000000, 5); + stat->latency_histogram_id = fieldstat_easy_register_histogram(stat->counter_instance, "latency_distribution_us", 1, 1000000, 5); if (stat->latency_histogram_id < 0) { LOG_ERROR("%s: shaping fieldstat register histogram failed", LOG_TAG_STAT); goto ERROR; } - stat->column_ids[IN_QUEUE_LEN_IDX] = fieldstat_easy_register_counter(stat->instance, "in_queue_len"); - stat->column_ids[OUT_QUEUE_LEN_IDX] = fieldstat_easy_register_counter(stat->instance, "out_queue_len"); - stat->column_ids[IN_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "in_pkts"); - stat->column_ids[IN_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "in_bytes"); - stat->column_ids[IN_DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "in_drop_pkts"); - stat->column_ids[OUT_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "out_pkts"); - stat->column_ids[OUT_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "out_bytes"); - stat->column_ids[OUT_DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "out_drop_pkts"); + stat->column_ids[IN_QUEUE_LEN_IDX] = fieldstat_easy_register_counter(stat->guage_instance, "in_queue_len"); + stat->column_ids[OUT_QUEUE_LEN_IDX] = fieldstat_easy_register_counter(stat->guage_instance, "out_queue_len"); + + stat->column_ids[IN_PKTS_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "in_pkts"); + stat->column_ids[IN_BYTES_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "in_bytes"); + stat->column_ids[IN_DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "in_drop_pkts"); + stat->column_ids[OUT_PKTS_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "out_pkts"); + stat->column_ids[OUT_BYTES_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "out_bytes"); + stat->column_ids[OUT_DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->counter_instance, "out_drop_pkts"); for (int i = IN_QUEUE_LEN_IDX; i < STAT_COLUNM_IDX_MAX; i++) { if (stat->column_ids[i] < 0) { @@ -201,8 +211,11 @@ struct shaping_stat* shaper_stat_init(int thread_num) return stat; ERROR: if (stat) { - if (stat->instance) { - fieldstat_easy_free(stat->instance); + if (stat->counter_instance) { + fieldstat_easy_free(stat->counter_instance); + } + if (stat->guage_instance) { + fieldstat_easy_free(stat->guage_instance); } free(stat); } @@ -351,20 +364,20 @@ static void shaper_stat_profile_metirc_refresh(struct shaping_thread_ctx *ctx, s shaper_stat_tags_build(rule->vsys_id, rule->id, profile->id, priority, profile_type); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[IN_DROP_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->in.drop_pkts); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[IN_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->in.pkts); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[IN_BYTES_IDX], tags, TAG_IDX_MAX, profile_stat->in.bytes); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[IN_DROP_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->in.drop_pkts); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[IN_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->in.pkts); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[IN_BYTES_IDX], tags, TAG_IDX_MAX, profile_stat->in.bytes); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[OUT_DROP_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->out.drop_pkts); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[OUT_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->out.pkts); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[OUT_BYTES_IDX], tags, TAG_IDX_MAX, profile_stat->out.bytes); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[OUT_DROP_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->out.drop_pkts); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[OUT_PKTS_IDX], tags, TAG_IDX_MAX, profile_stat->out.pkts); + fieldstat_easy_counter_incrby(stat->counter_instance, thread_id, stat->column_ids[OUT_BYTES_IDX], tags, TAG_IDX_MAX, profile_stat->out.bytes); - fieldstat_easy_histogram_record(stat->instance, thread_id, stat->latency_histogram_id, tags, TAG_IDX_MAX, profile_stat->out.max_latency); + fieldstat_easy_histogram_record(stat->counter_instance, thread_id, stat->latency_histogram_id, tags, TAG_IDX_MAX, profile_stat->out.max_latency); if (need_update_guage) { if (profile_type == PROFILE_IN_RULE_TYPE_PRIMARY) { - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[IN_QUEUE_LEN_IDX], tags, TAG_IDX_MAX, profile_stat->in.queue_len); - fieldstat_easy_counter_incrby(stat->instance, thread_id, stat->column_ids[OUT_QUEUE_LEN_IDX], tags, TAG_IDX_MAX, profile_stat->out.queue_len); + fieldstat_easy_counter_incrby(stat->guage_instance, thread_id, stat->column_ids[IN_QUEUE_LEN_IDX], tags, TAG_IDX_MAX, profile_stat->in.queue_len); + fieldstat_easy_counter_incrby(stat->guage_instance, thread_id, stat->column_ids[OUT_QUEUE_LEN_IDX], tags, TAG_IDX_MAX, profile_stat->out.queue_len); } memset(profile_stat, 0, sizeof(struct shaping_stat_for_profile)); @@ -523,12 +536,33 @@ void shaper_stat_max_latency_update(struct shaping_stat_for_profile *profile_sta void shaper_stat_output(struct shaping_stat *stat) { - char **output_buff_array = NULL; - size_t array_size = 0; - fieldstat_easy_output_array_and_reset(stat->instance, &output_buff_array, &array_size); + char **counter_output_buff_array = NULL; + char **guage_output_buff_array = NULL; + size_t counter_array_size = 0; + size_t guage_array_size = 0; + + if (stat->topic_rkt == NULL) { + return; + } + + fieldstat_easy_output_array_and_reset(stat->counter_instance, &counter_output_buff_array, &counter_array_size); + fieldstat_easy_output_array(stat->guage_instance, &guage_output_buff_array, &guage_array_size); + + for (unsigned int i = 0; i < counter_array_size; i++) { + int status=rd_kafka_produce(stat->topic_rkt, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_COPY, counter_output_buff_array[i], strlen(counter_output_buff_array[i]), NULL, 0, NULL); + if (status < 0) { + LOG_ERROR("%s:shaper_stat_output, rd_kafka_produce is error of code: %d %s(%s), status: %d", + LOG_TAG_STAT, + rd_kafka_last_error(), + rd_kafka_err2name(rd_kafka_last_error()), + rd_kafka_err2str(rd_kafka_last_error()), + status); + } + free(counter_output_buff_array[i]); + } - for (int i = 0; i < array_size; i++) { - int status=rd_kafka_produce(stat->topic_rkt, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_COPY, output_buff_array[i], strlen(output_buff_array[i]), NULL, 0, NULL); + for (unsigned int i = 0; i < guage_array_size; i++) { + int status=rd_kafka_produce(stat->topic_rkt, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_COPY, guage_output_buff_array[i], strlen(guage_output_buff_array[i]), NULL, 0, NULL); if (status < 0) { LOG_ERROR("%s:shaper_stat_output, rd_kafka_produce is error of code: %d %s(%s), status: %d", LOG_TAG_STAT, @@ -537,7 +571,7 @@ void shaper_stat_output(struct shaping_stat *stat) rd_kafka_err2str(rd_kafka_last_error()), status); } - free(output_buff_array[i]); + free(guage_output_buff_array[i]); } return; diff --git a/shaping/test/gtest_shaper.cpp b/shaping/test/gtest_shaper.cpp index 024717f..2f9a1b1 100644 --- a/shaping/test/gtest_shaper.cpp +++ b/shaping/test/gtest_shaper.cpp @@ -98,7 +98,8 @@ static int judge_packet_eq(struct stub_pkt_queue *expec_queue, struct stub_pkt_q return 0; } -static void shaping_stat_judge(char *file_line, int json_array_idx, int rule_id, int profile_id, int priority, +static void shaping_stat_judge(char *counter_file_line, char *guage_file_line, int counter_json_array_idx, + int guage_json_array_idx, int rule_id, int profile_id, int priority, unsigned long long tx_pkts, unsigned long long tx_bytes, unsigned long long drop_pkts, long long queue_len, long long max_latency, unsigned char direction, char profile_type[]) @@ -108,17 +109,17 @@ static void shaping_stat_judge(char *file_line, int json_array_idx, int rule_id, cJSON *tmp_obj = NULL; char attr_name[32] = {0}; - json = cJSON_Parse(file_line); + json = cJSON_Parse(counter_file_line); ASSERT_TRUE(json != NULL); ASSERT_EQ(json->type, cJSON_Array); - ASSERT_GT(cJSON_GetArraySize(json), json_array_idx); + ASSERT_GT(cJSON_GetArraySize(json), counter_json_array_idx); - json_array_element = cJSON_GetArrayItem(json, json_array_idx); + json_array_element = cJSON_GetArrayItem(json, counter_json_array_idx); tmp_obj = cJSON_GetObjectItem(json_array_element, "name"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_STREQ("shaping_stat", tmp_obj->valuestring); + EXPECT_STREQ("traffic_shaping_rule_hits", tmp_obj->valuestring); /******************parse tags***********************************/ @@ -142,7 +143,7 @@ static void shaping_stat_judge(char *file_line, int json_array_idx, int rule_id, ASSERT_TRUE(tmp_obj != NULL); EXPECT_STREQ(tmp_obj->valuestring, profile_type); - /******************parse fields**********************************/ + /******************parse counter fields**********************************/ snprintf(attr_name, sizeof(attr_name), "%s_pkts", direction == SHAPING_DIR_OUT ? "out" : "in"); tmp_obj = cJSON_GetObjectItem(json_array_element, attr_name); @@ -167,6 +168,20 @@ static void shaping_stat_judge(char *file_line, int json_array_idx, int rule_id, EXPECT_EQ(max_latency, tmp_obj->valueint); }*/ + cJSON_Delete(json); + + /******************parse guage fields**********************************/ + if (strcmp(profile_type, profile_type_borrow) == 0) { + return; + } + + json = cJSON_Parse(guage_file_line); + ASSERT_TRUE(json != NULL); + ASSERT_EQ(json->type, cJSON_Array); + ASSERT_GT(cJSON_GetArraySize(json), guage_json_array_idx); + + json_array_element = cJSON_GetArrayItem(json, guage_json_array_idx); + snprintf(attr_name, sizeof(attr_name), "%s_queue_len", direction == SHAPING_DIR_OUT ? "out" : "in"); tmp_obj = cJSON_GetObjectItem(json_array_element, attr_name); if (tmp_obj != NULL) { @@ -264,13 +279,15 @@ TEST(single_session, udp_tx_in_order) /***********send stat data here********************/ char *global_stat_str = NULL; size_t global_stat_str_len = 0; - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]); fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -279,13 +296,14 @@ TEST(single_session, udp_tx_in_order) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts //judge shaping global metric shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); free(global_stat_str); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -405,13 +423,15 @@ TEST(max_min_host_fairness_profile, udp_tx_in_order) /***********send stat data here********************/ char *global_stat_str = NULL; size_t global_stat_str_len = 0; - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]); fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -420,13 +440,14 @@ TEST(max_min_host_fairness_profile, udp_tx_in_order) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts //judge shaping global metric shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); free(global_stat_str); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -470,14 +491,16 @@ TEST(single_session, tcp_tx_in_order) /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; shaper_stat_refresh(&ctx->thread_ctx[0], sf, 1); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); - shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);//*test statistics - free(stat_str); - + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);//*test statistics + free(counter_stat_str); + free(guage_stat_str); stub_refresh_token_bucket(0); for (int i = 0; i < 10; i++) { @@ -496,7 +519,8 @@ TEST(single_session, tcp_tx_in_order) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********send stat data here********************/ - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -504,8 +528,9 @@ TEST(single_session, tcp_tx_in_order) /*******test statistics***********/ - shaping_stat_judge(stat_str, 0, 0, 0, 1, 30, 3000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary); - free(stat_str); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 30, 3000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -563,10 +588,12 @@ TEST(single_session, udp_diff_direction) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -574,9 +601,10 @@ TEST(single_session, udp_diff_direction) /*******test statistics***********/ - shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 0, 21000, SHAPING_DIR_OUT, profile_type_primary); - shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 0, 0, SHAPING_DIR_IN, profile_type_primary); - free(stat_str); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 20, 2000, 0, 0, 21000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 20, 2000, 0, 0, 0, SHAPING_DIR_IN, profile_type_primary); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1, rule2, rule3 @@ -636,10 +664,12 @@ TEST(single_session, udp_multi_rules) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -647,15 +677,16 @@ TEST(single_session, udp_multi_rules) /*******test statistics***********/ //profile_id 0 - shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 507000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 100, 10000, 0, 0, 507000, SHAPING_DIR_OUT, profile_type_primary); //profile_id 1 - shaping_stat_judge(stat_str, 1, 1, 1, 1, 100, 10000, 0, 0, 1000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 1, 1, 1, 1, 1, 100, 10000, 0, 0, 1000, SHAPING_DIR_OUT, profile_type_primary); //profile_id 2 - shaping_stat_judge(stat_str, 2, 2, 2, 1, 100, 10000, 0, 0, 91000, SHAPING_DIR_OUT, profile_type_primary);//max latency is first queued pkt + shaping_stat_judge(counter_stat_str, guage_stat_str, 2, 2, 2, 2, 1, 100, 10000, 0, 0, 91000, SHAPING_DIR_OUT, profile_type_primary);//max latency is first queued pkt - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -707,10 +738,12 @@ TEST(single_session, udp_borrow) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -718,12 +751,13 @@ TEST(single_session, udp_borrow) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 0, 1, 1, 1, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 1, 1, 1, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); //profile_id 2, borrow - shaping_stat_judge(stat_str, 1, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(counter_stat_str, guage_stat_str, 1, 0, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -778,10 +812,12 @@ TEST(single_session, udp_borrow_same_priority_9) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -789,15 +825,16 @@ TEST(single_session, udp_borrow_same_priority_9) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 0, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); //profile_id 2, borrow - shaping_stat_judge(stat_str, 1, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(counter_stat_str, guage_stat_str, 1, 0, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); //profile_id 3, borrow - shaping_stat_judge(stat_str, 2, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(counter_stat_str, guage_stat_str, 2, 0, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -942,10 +979,12 @@ TEST(two_session_diff_priority_same_profile, udp_borrow_in_order) shaping_flow_free(&ctx->thread_ctx[0], sf2); /***********send stat data here********************/ - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -953,15 +992,16 @@ TEST(two_session_diff_priority_same_profile, udp_borrow_in_order) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 0, 1, 1, 1, 0, 0, 0, 0, 1471000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1471000, SHAPING_DIR_OUT, profile_type_primary); //profile_id 2, borrow - shaping_stat_judge(stat_str, 1, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(counter_stat_str, guage_stat_str, 1, 0, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); //profile_id 2, primary - shaping_stat_judge(stat_str, 2, 2, 2, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 2, 1, 2, 2, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1; session2 match rule2 @@ -1520,13 +1560,15 @@ TEST(statistics, udp_drop_pkt) /***********send stat data here********************/ char *global_stat_str = NULL; size_t global_stat_str_len = 0; - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]); fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -1534,13 +1576,14 @@ TEST(statistics, udp_drop_pkt) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 0, 1, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 0, 228000, SHAPING_DIR_OUT, profile_type_primary);//every queued pkt's latency is max + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 0, 228000, SHAPING_DIR_OUT, profile_type_primary);//every queued pkt's latency is max //judge shaping global metric shaping_global_stat_judge(global_stat_str, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 10000, 0, 0); free(global_stat_str); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } /*session1 match rule1 @@ -1578,21 +1621,24 @@ TEST(statistics, udp_queueing_pkt) /***********send stat data here********************/ char *global_stat_str = NULL; size_t global_stat_str_len = 0; - char *stat_str = NULL; + char *counter_stat_str = NULL; + char *guage_stat_str = NULL; size_t stat_str_len = 0; shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]); shaper_stat_refresh(&ctx->thread_ctx[0], sf, 1); fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); /*******judge metric********/ - shaping_stat_judge(stat_str, 0, 0, 0, 1, 10, 1000, 0, 90, 0, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 10, 1000, 0, 90, 0, SHAPING_DIR_OUT, profile_type_primary); shaping_global_stat_judge(global_stat_str, 10, 1000, 0, 0, 90, 9000); free(global_stat_str); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); //first 10 packets ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue, actual_tx_queue, 10)); @@ -1611,7 +1657,8 @@ TEST(statistics, udp_queueing_pkt) /***********send stat data here********************/ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]); fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len); - fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->counter_instance, &counter_stat_str, &stat_str_len); + fieldstat_easy_output(ctx->thread_ctx[0].stat->guage_instance, &guage_stat_str, &stat_str_len); shaper_thread_resource_clear(); shaping_engine_destroy(ctx); @@ -1619,13 +1666,14 @@ TEST(statistics, udp_queueing_pkt) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 90000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(counter_stat_str, guage_stat_str, 0, 0, 0, 0, 1, 100, 10000, 0, 0, 90000, SHAPING_DIR_OUT, profile_type_primary); //judge global metric shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); free(global_stat_str); - free(stat_str); + free(counter_stat_str); + free(guage_stat_str); } int main(int argc, char **argv) |
