summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author刘畅 <[email protected]>2024-08-16 02:12:32 +0000
committer刘畅 <[email protected]>2024-08-16 02:12:32 +0000
commit1ab14decc6d7aee9505b7f0226ec4f922a5a4cae (patch)
treed67620a40e27e1e4a6c6140068b9738a6df19c59
parent5b19aac02fb7b453cc0e6ae30eef1465352d92aa (diff)
parent357969886357d382092acdfa92b1d1899b9ec8d1 (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.h3
-rw-r--r--shaping/src/shaper_global_stat.cpp6
-rw-r--r--shaping/src/shaper_stat.cpp94
-rw-r--r--shaping/test/gtest_shaper.cpp170
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)