From 782ee7558dc53f308edd9c0ad1813d43bb22b33c Mon Sep 17 00:00:00 2001 From: root Date: Fri, 19 Jul 2024 10:02:16 +0000 Subject: update to fieldstat4, not complete --- shaping/src/shaper_global_stat.cpp | 279 ++++++++++++++----------------------- 1 file changed, 104 insertions(+), 175 deletions(-) (limited to 'shaping/src/shaper_global_stat.cpp') diff --git a/shaping/src/shaper_global_stat.cpp b/shaping/src/shaper_global_stat.cpp index d59b290..74ae4fa 100644 --- a/shaping/src/shaper_global_stat.cpp +++ b/shaping/src/shaper_global_stat.cpp @@ -2,70 +2,64 @@ #include #include -#include +#include #include "log.h" #include "utils.h" #include "shaper.h" #include "shaper_global_stat.h" -struct shaping_global_stat_conf { - int is_self_test; -}; - -static int shaper_global_stat_conf_load(struct shaping_global_stat *stat, struct shaping_global_stat_conf *conf) +static int shaper_global_stat_conf_load(struct shaping_global_stat *stat) { MESA_load_profile_int_def(SHAPING_GLOBAL_CONF_FILE, "METRIC", "GLOBAL_STAT_OUTPUT_INTERVAL_S", &stat->output_interval_s, 1); - MESA_load_profile_int_def(SHAPING_GLOBAL_CONF_FILE, "METRIC", "SELF_TEST", &conf->is_self_test, 0); return 0; } static void shaper_global_stat_fieldstat_reg(struct shaping_global_stat *stat) { - const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; - stat->swarmkv_latency_summary_id = fieldstat_register_summary(stat->instance, "async_delay(us)", NULL, 0, quantiles, 1, 500000, 3, 1); - - stat->column_ids[CURR_SESSION_NUM_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_GAUGE, "curr_session_num", NULL, 0); - stat->column_ids[QUEUEING_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_GAUGE, "curr_queueing_pkts", NULL, 0); - stat->column_ids[QUEUEING_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_GAUGE, "curr_queueing_bytes", NULL, 0); - - stat->column_ids[CTRL_ERR_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_error", NULL, 0); - stat->column_ids[CTRL_OPENING_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_open", NULL, 0); - stat->column_ids[CTRL_ACTIVE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_active", NULL, 0); - stat->column_ids[CTRL_CLOSE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_close", NULL, 0); - stat->column_ids[CTRL_ACTIVE_CLOSE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_sf_close", NULL, 0); - stat->column_ids[CTRL_RESETALL_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "ctrl_reset", NULL, 0); - stat->column_ids[SESSION_LOG_SEND_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "sess_log_send", NULL, 0); - - stat->column_ids[ASYNC_INVOKE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "async", NULL, 0); - stat->column_ids[ASYNC_CALLBACK_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "async_cb", NULL, 0); - - stat->column_ids[ASYNC_TCONSUME_INVOKE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "tconsume", NULL, 0); - stat->column_ids[ASYNC_TCONSUME_CALLBACK_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "tconsume_cb", NULL, 0); - stat->column_ids[ASYNC_HINCRBY_INVOKE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hincrby", NULL, 0); - stat->column_ids[ASYNC_HINCRBY_CALLBACK_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hincrby_cb", NULL, 0); - stat->column_ids[ASYNC_HMGET_INVOKE_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hmget", NULL, 0); - stat->column_ids[ASYNC_HMGET_CALLBACK_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hmget_cb", NULL, 0); - - stat->column_ids[ASYNC_TCONSUME_FAILED] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "tconsume_failed", NULL, 0); - stat->column_ids[ASYNC_HINCRBY_FAILED] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hincrby_failed", NULL, 0); - stat->column_ids[ASYNC_HMGET_FAILED] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "hmget_failed", NULL, 0); - - stat->column_ids[RX_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_rx_pkts", NULL, 0); - stat->column_ids[RX_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_rx_bytes", NULL, 0); - stat->column_ids[TX_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_tx_pkts", NULL, 0); - stat->column_ids[TX_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_tx_bytes", NULL, 0); - stat->column_ids[DROP_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_drop_pkts", NULL, 0); - stat->column_ids[DROP_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "all_drop_bytes", NULL, 0); - - stat->column_ids[HIT_POLICY_RX_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_rx_pkts", NULL, 0); - stat->column_ids[HIT_POLICY_RX_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_rx_bytes", NULL, 0); - stat->column_ids[HIT_POLICY_TX_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_tx_pkts", NULL, 0); - stat->column_ids[HIT_POLICY_TX_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_tx_bytes", NULL, 0); - stat->column_ids[HIT_POLICY_TX_SYN_ACK_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_tx_syn_ack_pkts", NULL, 0); - stat->column_ids[HIT_POLICY_DROP_PKTS_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_drop_pkts", NULL, 0); - stat->column_ids[HIT_POLICY_DROP_BYTES_IDX] = fieldstat_register(stat->instance, FIELD_TYPE_COUNTER, "shape_drop_bytes", NULL, 0); + stat->swarmkv_latency_summary_id = fieldstat_easy_register_histogram(stat->instance, "async_delay(us)", 1, 500000, 1); + + stat->column_ids[CURR_SESSION_NUM_IDX] = fieldstat_easy_register_counter(stat->instance, "curr_session_num"); + stat->column_ids[QUEUEING_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "curr_queueing_pkts"); + stat->column_ids[QUEUEING_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "curr_queueing_bytes"); + + stat->column_ids[CTRL_ERR_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_error"); + stat->column_ids[CTRL_OPENING_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_open"); + stat->column_ids[CTRL_ACTIVE_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_active"); + stat->column_ids[CTRL_CLOSE_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_close"); + stat->column_ids[CTRL_ACTIVE_CLOSE_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_sf_close"); + stat->column_ids[CTRL_RESETALL_IDX] = fieldstat_easy_register_counter(stat->instance, "ctrl_reset"); + stat->column_ids[SESSION_LOG_SEND_IDX] = fieldstat_easy_register_counter(stat->instance, "sess_log_send"); + + stat->column_ids[ASYNC_INVOKE_IDX] = fieldstat_easy_register_counter(stat->instance, "async"); + stat->column_ids[ASYNC_CALLBACK_IDX] = fieldstat_easy_register_counter(stat->instance, "async_cb"); + + stat->column_ids[ASYNC_TCONSUME_INVOKE_IDX] = fieldstat_easy_register_counter(stat->instance, "tconsume"); + stat->column_ids[ASYNC_TCONSUME_CALLBACK_IDX] = fieldstat_easy_register_counter(stat->instance, "tconsume_cb"); + stat->column_ids[ASYNC_HINCRBY_INVOKE_IDX] = fieldstat_easy_register_counter(stat->instance, "hincrby"); + stat->column_ids[ASYNC_HINCRBY_CALLBACK_IDX] = fieldstat_easy_register_counter(stat->instance, "hincrby_cb"); + stat->column_ids[ASYNC_HMGET_INVOKE_IDX] = fieldstat_easy_register_counter(stat->instance, "hmget"); + stat->column_ids[ASYNC_HMGET_CALLBACK_IDX] = fieldstat_easy_register_counter(stat->instance, "hmget_cb"); + + stat->column_ids[ASYNC_TCONSUME_FAILED] = fieldstat_easy_register_counter(stat->instance, "tconsume_failed"); + stat->column_ids[ASYNC_HINCRBY_FAILED] = fieldstat_easy_register_counter(stat->instance, "hincrby_failed"); + stat->column_ids[ASYNC_HMGET_FAILED] = fieldstat_easy_register_counter(stat->instance, "hmget_failed"); + + stat->column_ids[RX_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "all_rx_pkts"); + stat->column_ids[RX_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "all_rx_bytes"); + stat->column_ids[TX_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "all_tx_pkts"); + stat->column_ids[TX_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "all_tx_bytes"); + stat->column_ids[DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "all_drop_pkts"); + stat->column_ids[DROP_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "all_drop_bytes"); + + stat->column_ids[HIT_POLICY_RX_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_rx_pkts"); + stat->column_ids[HIT_POLICY_RX_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_rx_bytes"); + stat->column_ids[HIT_POLICY_TX_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_tx_pkts"); + stat->column_ids[HIT_POLICY_TX_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_tx_bytes"); + stat->column_ids[HIT_POLICY_TX_SYN_ACK_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_tx_syn_ack_pkts"); + stat->column_ids[HIT_POLICY_DROP_PKTS_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_drop_pkts"); + stat->column_ids[HIT_POLICY_DROP_BYTES_IDX] = fieldstat_easy_register_counter(stat->instance, "shape_drop_bytes"); return; } @@ -73,49 +67,38 @@ static void shaper_global_stat_fieldstat_reg(struct shaping_global_stat *stat) struct shaping_global_stat* shaper_global_stat_init(int work_thread_num) { struct shaping_global_stat *stat = NULL; - struct shaping_global_stat_conf conf; + struct fieldstat_tag tag; + int ret = 0; stat = (struct shaping_global_stat*)calloc(1, sizeof(struct shaping_global_stat)); - stat->stat_data = (struct shaping_global_stat_data*)calloc(work_thread_num, sizeof(struct shaping_global_stat_data)); - if (shaper_global_stat_conf_load(stat, &conf) != 0) { + if (shaper_global_stat_conf_load(stat) != 0) { LOG_ERROR("%s: shaping init metric conf failed", LOG_TAG_STAT); goto ERROR; } - stat->instance = fieldstat_instance_new("shaping_global"); + tag.key = "shaping_global"; + tag.type = TAG_CSTRING; + tag.value_str = "shaping_global"; + stat->instance = fieldstat_easy_new(work_thread_num, "shaping_global", &tag, 1); if (stat->instance == NULL) { LOG_ERROR("%s: shaping global init fieldstat instance failed", LOG_TAG_STAT); goto ERROR; } shaper_global_stat_fieldstat_reg(stat); - - fieldstat_disable_background_thread(stat->instance); - if (conf.is_self_test) { - fieldstat_set_local_output(stat->instance, "shaping_global_metric", "json"); - } else { - fieldstat_set_local_output(stat->instance, "shaping_global_metric", "default"); - } - - if (fieldstat_global_enable_prometheus_endpoint(9007, NULL) != 0) { - LOG_ERROR("%s: shaping global fieldstat enable prometheus endpoint failed", LOG_TAG_STAT); + ret = fieldstat_easy_enable_auto_output(stat->instance, "./metric/shaping_global_stat.json", stat->output_interval_s); + if (ret < 0) { + LOG_ERROR("%s: shaping global enable auto output failed, ret %d", LOG_TAG_STAT, ret); goto ERROR; } - if (fieldstat_enable_prometheus_output(stat->instance) != 0) { - LOG_ERROR("%s: shaping global fieldstat enable prometheus output failed", LOG_TAG_STAT); - goto ERROR; - } - - fieldstat_instance_start(stat->instance); - return stat; ERROR: if (stat) { if (stat->instance) { - fieldstat_instance_free(stat->instance); + fieldstat_easy_free(stat->instance); } free(stat); } @@ -128,21 +111,17 @@ void shaper_global_stat_destroy(struct shaping_global_stat *stat) return; } - if (stat->stat_data) { - free(stat->stat_data); - } - if (stat->instance) { - fieldstat_instance_free(stat->instance); + fieldstat_easy_free(stat->instance); } free(stat); return; } -void shaper_global_stat_swarmkv_latency_update(struct shaping_global_stat *stat, long long latency_us) +void shaper_global_stat_swarmkv_latency_update(struct shaping_global_stat *stat, long long latency_us, int thread_idx) { - fieldstat_value_set(stat->instance, stat->swarmkv_latency_summary_id, latency_us); + fieldstat_easy_histogram_record(stat->instance, thread_idx, stat->swarmkv_latency_summary_id, NULL, 0, latency_us); return; } @@ -360,103 +339,53 @@ void shaper_global_stat_hit_policy_drop_inc(struct shaping_global_stat_data *thr return; } -void shaper_global_stat_refresh(struct shaping_ctx *ctx) +void shaper_thread_global_stat_refresh(struct shaping_thread_ctx *ctx) { - static struct shaping_global_stat_data sum; + struct shaping_global_stat_data *stat_data = &ctx->thread_global_stat; struct shaping_global_stat *global_stat = ctx->global_stat; - struct shaping_global_stat_data *stat_data = global_stat->stat_data; - - for (int i = 0; i < ctx->thread_num; i++) { - memcpy(&stat_data[i], &ctx->thread_ctx[i].thread_global_stat, sizeof(struct shaping_global_stat_data)); - } - memset(&sum, 0, sizeof(struct shaping_global_stat_data)); - for (int i = 0; i < ctx->thread_num; i++) { - sum.curr_session_num += stat_data[i].curr_session_num; - sum.queueing_pkts += stat_data[i].queueing_pkts; - sum.queueing_bytes += stat_data[i].queueing_bytes; - - sum.ctrl_error += stat_data[i].ctrl_error; - sum.ctrl_opening += stat_data[i].ctrl_opening; - sum.ctrl_active += stat_data[i].ctrl_active; - sum.ctrl_close += stat_data[i].ctrl_close; - sum.ctrl_active_close += stat_data[i].ctrl_active_close; - sum.ctrl_resetall += stat_data[i].ctrl_resetall; - sum.session_log_send += stat_data[i].session_log_send; - - sum.async_invoke += stat_data[i].async_invoke; - sum.async_callback += stat_data[i].async_callback; - - sum.async_tconsume_invoke += stat_data[i].async_tconsume_invoke; - sum.async_tconsume_callback += stat_data[i].async_tconsume_callback; - sum.async_hincrby_invoke += stat_data[i].async_hincrby_invoke; - sum.async_hincrby_callback += stat_data[i].async_hincrby_callback; - sum.async_hmget_invoke += stat_data[i].async_hmget_invoke; - sum.async_hmget_callback += stat_data[i].async_hmget_callback; - - sum.async_tconsume_failed += stat_data[i].async_tconsume_failed; - sum.async_hincrby_failed += stat_data[i].async_hincrby_failed; - sum.async_hmget_failed += stat_data[i].async_hmget_failed; - - sum.all_traffic.rx_pkts += stat_data[i].all_traffic.rx_pkts; - sum.all_traffic.rx_bytes += stat_data[i].all_traffic.rx_bytes; - sum.all_traffic.tx_pkts += stat_data[i].all_traffic.tx_pkts; - sum.all_traffic.tx_bytes += stat_data[i].all_traffic.tx_bytes; - sum.all_traffic.drop_pkts += stat_data[i].all_traffic.drop_pkts; - sum.all_traffic.drop_bytes += stat_data[i].all_traffic.drop_bytes; - - sum.hit_policy_traffic.rx_pkts += stat_data[i].hit_policy_traffic.rx_pkts; - sum.hit_policy_traffic.rx_bytes += stat_data[i].hit_policy_traffic.rx_bytes; - sum.hit_policy_traffic.tx_pkts += stat_data[i].hit_policy_traffic.tx_pkts; - sum.hit_policy_traffic.tx_bytes += stat_data[i].hit_policy_traffic.tx_bytes; - sum.hit_policy_traffic.tx_syn_ack_pkts += stat_data[i].hit_policy_traffic.tx_syn_ack_pkts; - sum.hit_policy_traffic.drop_pkts += stat_data[i].hit_policy_traffic.drop_pkts; - sum.hit_policy_traffic.drop_bytes += stat_data[i].hit_policy_traffic.drop_bytes; - } - - struct shaping_global_stat_traffic_data *all_traffic_data = &sum.all_traffic; - struct shaping_global_stat_traffic_data *hit_policy_traffic_data = &sum.hit_policy_traffic; - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CURR_SESSION_NUM_IDX], sum.curr_session_num); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[QUEUEING_PKTS_IDX], sum.queueing_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[QUEUEING_BYTES_IDX], sum.queueing_bytes); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_ERR_IDX], sum.ctrl_error); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_OPENING_IDX], sum.ctrl_opening); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_ACTIVE_IDX], sum.ctrl_active); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_CLOSE_IDX], sum.ctrl_close); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_ACTIVE_CLOSE_IDX], sum.ctrl_active_close); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[CTRL_RESETALL_IDX], sum.ctrl_resetall); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[SESSION_LOG_SEND_IDX], sum.session_log_send); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_INVOKE_IDX], sum.async_invoke); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_CALLBACK_IDX], sum.async_callback); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_TCONSUME_INVOKE_IDX], sum.async_tconsume_invoke); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_TCONSUME_CALLBACK_IDX], sum.async_tconsume_callback); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HINCRBY_INVOKE_IDX], sum.async_hincrby_invoke); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HINCRBY_CALLBACK_IDX], sum.async_hincrby_callback); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HMGET_INVOKE_IDX], sum.async_hmget_invoke); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HMGET_CALLBACK_IDX], sum.async_hmget_callback); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_TCONSUME_FAILED], sum.async_tconsume_failed); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HINCRBY_FAILED], sum.async_hincrby_failed); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[ASYNC_HMGET_FAILED], sum.async_hmget_failed); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[RX_PKTS_IDX], all_traffic_data->rx_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[RX_BYTES_IDX], all_traffic_data->rx_bytes); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[TX_PKTS_IDX], all_traffic_data->tx_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[TX_BYTES_IDX], all_traffic_data->tx_bytes); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[DROP_PKTS_IDX], all_traffic_data->drop_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[DROP_BYTES_IDX], all_traffic_data->drop_bytes); - - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_RX_PKTS_IDX], hit_policy_traffic_data->rx_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_RX_BYTES_IDX], hit_policy_traffic_data->rx_bytes); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_TX_PKTS_IDX], hit_policy_traffic_data->tx_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_TX_BYTES_IDX], hit_policy_traffic_data->tx_bytes); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_TX_SYN_ACK_PKTS_IDX], hit_policy_traffic_data->tx_syn_ack_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_DROP_PKTS_IDX], hit_policy_traffic_data->drop_pkts); - fieldstat_value_set(global_stat->instance, global_stat->column_ids[HIT_POLICY_DROP_BYTES_IDX], hit_policy_traffic_data->drop_bytes); - - fieldstat_passive_output(global_stat->instance); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CURR_SESSION_NUM_IDX], NULL, 0, stat_data->curr_session_num); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[QUEUEING_PKTS_IDX], NULL, 0, stat_data->queueing_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[QUEUEING_BYTES_IDX], NULL, 0, stat_data->queueing_bytes); + + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_ERR_IDX], NULL, 0, stat_data->ctrl_error); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_OPENING_IDX], NULL, 0, stat_data->ctrl_opening); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_ACTIVE_IDX], NULL, 0, stat_data->ctrl_active); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_CLOSE_IDX], NULL, 0, stat_data->ctrl_close); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_ACTIVE_CLOSE_IDX], NULL, 0, stat_data->ctrl_active_close); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[CTRL_RESETALL_IDX], NULL, 0, stat_data->ctrl_resetall); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[SESSION_LOG_SEND_IDX], NULL, 0, stat_data->session_log_send); + + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_INVOKE_IDX], NULL, 0, stat_data->async_invoke); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_CALLBACK_IDX], NULL, 0, stat_data->async_callback); + + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_TCONSUME_INVOKE_IDX], NULL, 0, stat_data->async_tconsume_invoke); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_TCONSUME_CALLBACK_IDX], NULL, 0, stat_data->async_tconsume_callback); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HINCRBY_INVOKE_IDX], NULL, 0, stat_data->async_hincrby_invoke); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HINCRBY_CALLBACK_IDX], NULL, 0, stat_data->async_hincrby_callback); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HMGET_INVOKE_IDX], NULL, 0, stat_data->async_hmget_invoke); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HMGET_CALLBACK_IDX], NULL, 0, stat_data->async_hmget_callback); + + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_TCONSUME_FAILED], NULL, 0, stat_data->async_tconsume_failed); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HINCRBY_FAILED], NULL, 0, stat_data->async_hincrby_failed); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[ASYNC_HMGET_FAILED], NULL, 0, stat_data->async_hmget_failed); + + struct shaping_global_stat_traffic_data *all_traffic_data = &stat_data->all_traffic; + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[RX_PKTS_IDX], NULL, 0, all_traffic_data->rx_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[RX_BYTES_IDX], NULL, 0, all_traffic_data->rx_bytes); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[TX_PKTS_IDX], NULL, 0, all_traffic_data->tx_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[TX_BYTES_IDX], NULL, 0, all_traffic_data->tx_bytes); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[DROP_PKTS_IDX], NULL, 0, all_traffic_data->drop_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[DROP_BYTES_IDX], NULL, 0, all_traffic_data->drop_bytes); + + struct shaping_global_stat_traffic_data *hit_policy_traffic_data = &stat_data->hit_policy_traffic; + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_RX_PKTS_IDX], NULL, 0, hit_policy_traffic_data->rx_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_RX_BYTES_IDX], NULL, 0, hit_policy_traffic_data->rx_bytes); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_TX_PKTS_IDX], NULL, 0, hit_policy_traffic_data->tx_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_TX_BYTES_IDX], NULL, 0, hit_policy_traffic_data->tx_bytes); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_TX_SYN_ACK_PKTS_IDX], NULL, 0, hit_policy_traffic_data->tx_syn_ack_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_DROP_PKTS_IDX], NULL, 0, hit_policy_traffic_data->drop_pkts); + fieldstat_easy_counter_incrby(global_stat->instance, 0, global_stat->column_ids[HIT_POLICY_DROP_BYTES_IDX], NULL, 0, hit_policy_traffic_data->drop_bytes); + + memset(&ctx->thread_global_stat, 0, sizeof(struct shaping_global_stat_data)); } \ No newline at end of file -- cgit v1.2.3 From b1877c79630a88b8a88edc3da0c75f67e879e3e0 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 23 Jul 2024 07:20:03 +0000 Subject: fix test case --- ci/travis.sh | 2 +- shaping/include/shaper_global_stat.h | 2 +- shaping/src/shaper.cpp | 2 +- shaping/src/shaper_global_stat.cpp | 32 ++++++--- shaping/src/shaper_stat.cpp | 5 +- shaping/test/gtest_shaper.cpp | 90 ++++++++++++----------- shaping/test/telegraf/self_test_shaping.conf | 102 --------------------------- shaping/test/test_conf/shaping.conf | 1 + 8 files changed, 78 insertions(+), 158 deletions(-) delete mode 100644 shaping/test/telegraf/self_test_shaping.conf (limited to 'shaping/src/shaper_global_stat.cpp') diff --git a/ci/travis.sh b/ci/travis.sh index a8b7553..e3965d4 100644 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -38,7 +38,7 @@ yum install -y systemd-devel yum install -y tsg_master-devel yum install -y framework_env yum install -y mrzcpd-corei7 -yum install -y libfieldstat3-devel +yum install -y libfieldstat4-devel yum install -y libmaatframe-devel yum install -y libswarmkv-devel yum install -y libMESA_handle_logger-devel diff --git a/shaping/include/shaper_global_stat.h b/shaping/include/shaper_global_stat.h index cd40320..ec68453 100644 --- a/shaping/include/shaper_global_stat.h +++ b/shaping/include/shaper_global_stat.h @@ -95,7 +95,7 @@ void shaper_global_stat_curr_session_inc(struct shaping_global_stat_data *thread void shaper_global_stat_curr_session_dec(struct shaping_global_stat_data *thread_global_stat); void shaper_global_stat_queueing_inc(struct shaping_global_stat_data *thread_global_stat, int pkt_len); void shaper_global_stat_queueing_dec(struct shaping_global_stat_data *thread_global_stat, int pkt_len); -long long shaper_global_stat_queueing_pkts_get(struct shaping_global_stat_data *thread_global_stat); +long long shaper_global_stat_queueing_pkts_get(); void shaper_global_stat_ctrlpkt_err_inc(struct shaping_global_stat_data *thread_global_stat); void shaper_global_stat_ctrlpkt_opening_inc(struct shaping_global_stat_data *thread_global_stat); diff --git a/shaping/src/shaper.cpp b/shaping/src/shaper.cpp index a662df4..9c2a49f 100644 --- a/shaping/src/shaper.cpp +++ b/shaping/src/shaper.cpp @@ -1291,7 +1291,7 @@ void polling_entry(struct shaper *sp, struct shaping_stat *stat, struct shaping_ cnt++; } - if (shaper_global_stat_queueing_pkts_get(&ctx->thread_global_stat) == 0) { + if (shaper_global_stat_queueing_pkts_get() == 0) { return; } diff --git a/shaping/src/shaper_global_stat.cpp b/shaping/src/shaper_global_stat.cpp index 74ae4fa..c039fda 100644 --- a/shaping/src/shaper_global_stat.cpp +++ b/shaping/src/shaper_global_stat.cpp @@ -9,9 +9,17 @@ #include "shaper.h" #include "shaper_global_stat.h" -static int shaper_global_stat_conf_load(struct shaping_global_stat *stat) +struct shping_global_stat_conf +{ + int self_test; +}; + +thread_local unsigned long long g_queueing_pkts = 0; + +static int shaper_global_stat_conf_load(struct shaping_global_stat *stat, struct shping_global_stat_conf *conf) { MESA_load_profile_int_def(SHAPING_GLOBAL_CONF_FILE, "METRIC", "GLOBAL_STAT_OUTPUT_INTERVAL_S", &stat->output_interval_s, 1); + MESA_load_profile_int_def(SHAPING_GLOBAL_CONF_FILE, "METRIC", "GLOBAL_STAT_SELF_TEST", &conf->self_test, 0); return 0; } @@ -67,12 +75,12 @@ static void shaper_global_stat_fieldstat_reg(struct shaping_global_stat *stat) 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 fieldstat_tag tag; - int ret = 0; stat = (struct shaping_global_stat*)calloc(1, sizeof(struct shaping_global_stat)); - if (shaper_global_stat_conf_load(stat) != 0) { + if (shaper_global_stat_conf_load(stat, &conf) != 0) { LOG_ERROR("%s: shaping init metric conf failed", LOG_TAG_STAT); goto ERROR; } @@ -87,10 +95,12 @@ struct shaping_global_stat* shaper_global_stat_init(int work_thread_num) } shaper_global_stat_fieldstat_reg(stat); - ret = fieldstat_easy_enable_auto_output(stat->instance, "./metric/shaping_global_stat.json", stat->output_interval_s); - if (ret < 0) { - LOG_ERROR("%s: shaping global enable auto output failed, ret %d", LOG_TAG_STAT, ret); - goto ERROR; + if (!conf.self_test) { + int ret = fieldstat_easy_enable_auto_output(stat->instance, "./metric/shaping_global_stat.json", stat->output_interval_s); + if (ret < 0) { + LOG_ERROR("%s: shaping global enable auto output failed, ret %d", LOG_TAG_STAT, ret); + goto ERROR; + } } return stat; @@ -145,6 +155,8 @@ void shaper_global_stat_queueing_inc(struct shaping_global_stat_data *thread_glo thread_global_stat->queueing_pkts++; thread_global_stat->queueing_bytes += pkt_len; + g_queueing_pkts++; + return; } @@ -153,12 +165,14 @@ void shaper_global_stat_queueing_dec(struct shaping_global_stat_data *thread_glo thread_global_stat->queueing_pkts--; thread_global_stat->queueing_bytes -= pkt_len; + g_queueing_pkts--; + return; } -long long shaper_global_stat_queueing_pkts_get(struct shaping_global_stat_data *thread_global_stat) +long long shaper_global_stat_queueing_pkts_get() { - return thread_global_stat->queueing_pkts; + return g_queueing_pkts; } void shaper_global_stat_ctrlpkt_err_inc(struct shaping_global_stat_data *thread_global_stat) diff --git a/shaping/src/shaper_stat.cpp b/shaping/src/shaper_stat.cpp index a68a85e..f629425 100644 --- a/shaping/src/shaper_stat.cpp +++ b/shaping/src/shaper_stat.cpp @@ -73,6 +73,7 @@ static void shaper_stat_kafka_init(struct shaping_stat *stat, struct shaper_stat rd_kafka_conf_set(rdkafka_conf, "socket.keepalive.enable", "true", kafka_errstr, sizeof(kafka_errstr)); rd_kafka_conf_set(rdkafka_conf, "bootstrap.servers", conf->kafka_brokers, kafka_errstr, sizeof(kafka_errstr)); rd_kafka_conf_set(rdkafka_conf, "security.protocol", "sasl_plaintext", kafka_errstr, sizeof(kafka_errstr)); + rd_kafka_conf_set(rdkafka_conf, "client.id", conf->kafka_topic, kafka_errstr, sizeof(kafka_errstr)); rd_kafka_conf_set(rdkafka_conf, "sasl.mechanisms", "PLAIN", kafka_errstr, sizeof(kafka_errstr)); rd_kafka_conf_set(rdkafka_conf, "sasl.username", conf->kafka_username, kafka_errstr, sizeof(kafka_errstr)); rd_kafka_conf_set(rdkafka_conf, "sasl.password", conf->kafka_brokers, kafka_errstr, sizeof(kafka_errstr)); @@ -331,8 +332,8 @@ static void shaper_stat_profile_metirc_refresh(struct shaping_thread_ctx *ctx, s 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_histogram_record(stat->instance, thread_id, stat->in_latency_histogram_id, tags, TAG_PROFILE_TYPE_IDX, profile_stat->in.max_latency); - fieldstat_easy_histogram_record(stat->instance, thread_id, stat->out_latency_histogram_id, tags, TAG_PROFILE_TYPE_IDX, profile_stat->out.max_latency); + fieldstat_easy_histogram_record(stat->instance, thread_id, stat->in_latency_histogram_id, tags, TAG_IDX_MAX, profile_stat->in.max_latency); + fieldstat_easy_histogram_record(stat->instance, thread_id, stat->out_latency_histogram_id, tags, TAG_IDX_MAX, profile_stat->out.max_latency); if (need_update_guage) { if (profile_type == PROFILE_IN_RULE_TYPE_PRIMARY) { diff --git a/shaping/test/gtest_shaper.cpp b/shaping/test/gtest_shaper.cpp index 47130c1..fbe98eb 100644 --- a/shaping/test/gtest_shaper.cpp +++ b/shaping/test/gtest_shaper.cpp @@ -102,7 +102,7 @@ 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 rule_id, int profile_id, int priority, +static void shaping_stat_judge(char *file_line, int 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[]) @@ -116,9 +116,14 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int json = cJSON_Parse(file_line); ASSERT_TRUE(json != NULL); + ASSERT_EQ(json->type, cJSON_Array); + ASSERT_GT(cJSON_GetArraySize(json), json_array_idx); + + json = cJSON_GetArrayItem(json, json_array_idx); + tmp_obj = cJSON_GetObjectItem(json, "name"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_STREQ("traffic_shaping_rule_hits", tmp_obj->valuestring); + EXPECT_STREQ("shaping_stat", tmp_obj->valuestring); /******************parse tags***********************************/ tags_json = cJSON_GetObjectItem(json, "tags"); @@ -126,19 +131,19 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int tmp_obj = cJSON_GetObjectItem(tags_json, "vsys_id"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_EQ(atoi(tmp_obj->valuestring), STUB_TEST_VSYS_ID); + EXPECT_EQ(tmp_obj->valueint, STUB_TEST_VSYS_ID); tmp_obj = cJSON_GetObjectItem(tags_json, "rule_id"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_EQ(rule_id, atoi(tmp_obj->valuestring)); + EXPECT_EQ(rule_id, tmp_obj->valueint); tmp_obj = cJSON_GetObjectItem(tags_json, "profile_id"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_EQ(profile_id, atoi(tmp_obj->valuestring)); + EXPECT_EQ(profile_id, tmp_obj->valueint); tmp_obj = cJSON_GetObjectItem(tags_json, "priority"); ASSERT_TRUE(tmp_obj != NULL); - EXPECT_EQ(priority, atoi(tmp_obj->valuestring)); + EXPECT_EQ(priority, tmp_obj->valueint); tmp_obj = cJSON_GetObjectItem(tags_json, "profile_type"); ASSERT_TRUE(tmp_obj != NULL); @@ -163,17 +168,19 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int ASSERT_TRUE(tmp_obj != NULL); EXPECT_EQ(drop_pkts, tmp_obj->valueint); - if (max_latency != -1) { + //TODO: api to parse histogram + /*if (max_latency != -1) { snprintf(attr_name, sizeof(attr_name), "%s_max_latency_us", direction == SHAPING_DIR_OUT ? "out" : "in"); tmp_obj = cJSON_GetObjectItem(fields_json, attr_name); ASSERT_TRUE(tmp_obj != NULL); EXPECT_EQ(max_latency, tmp_obj->valueint); - } + }*/ snprintf(attr_name, sizeof(attr_name), "%s_queue_len", direction == SHAPING_DIR_OUT ? "out" : "in"); tmp_obj = cJSON_GetObjectItem(fields_json, attr_name); - ASSERT_TRUE(tmp_obj != NULL); - EXPECT_EQ(queue_len, tmp_obj->valueint); + if (tmp_obj != NULL) { + EXPECT_EQ(queue_len, tmp_obj->valueint); + } cJSON_Delete(json); @@ -182,14 +189,11 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int static int shaping_global_stat_field_get(cJSON *metrics, const char *field_name) { - int metrics_size = cJSON_GetArraySize(metrics); + cJSON *tmp_obj = NULL; - for (int i = 0; i < metrics_size; i++) { - cJSON *tmp = cJSON_GetArrayItem(metrics, i); - char *column_name = cJSON_GetObjectItem(tmp, "name")->valuestring; - if (strcmp(column_name, field_name) == 0) { - return cJSON_GetObjectItem(tmp, "diff")->valueint; - } + tmp_obj = cJSON_GetObjectItem(metrics, field_name); + if (tmp_obj != NULL) { + return tmp_obj->valueint; } return -1; @@ -200,7 +204,9 @@ static void shaping_global_stat_judge(char *file_line, int tx_pkts, int tx_bytes cJSON *metrics = NULL; cJSON *json = cJSON_Parse(file_line); - metrics = cJSON_GetObjectItem(json, "metrics"); + json = cJSON_GetArrayItem(json, 0); + + metrics = cJSON_GetObjectItem(json, "fields"); EXPECT_EQ(tx_pkts, shaping_global_stat_field_get(metrics, "all_tx_pkts")); EXPECT_EQ(tx_bytes, shaping_global_stat_field_get(metrics, "all_tx_bytes")); @@ -283,7 +289,7 @@ TEST(single_session, udp_tx_in_order) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts + 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 //judge shaping global metric shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); @@ -422,7 +428,7 @@ TEST(max_min_host_fairness_profile, udp_tx_in_order) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts + 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 //judge shaping global metric shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); @@ -474,8 +480,9 @@ TEST(single_session, tcp_tx_in_order) char *stat_str = (char*)malloc(FIELDSTAT_OUTPUT_BUF_LEN); size_t stat_str_len = sizeof(stat_str); + 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, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);//*test statistics + shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);//*test statistics stub_refresh_token_bucket(0); @@ -503,7 +510,7 @@ TEST(single_session, tcp_tx_in_order) /*******test statistics***********/ - shaping_stat_judge(stat_str, 0, 0, 1, 10, 1000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 0, 0, 0, 1, 30, 3000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary); free(stat_str); } @@ -572,8 +579,8 @@ TEST(single_session, udp_diff_direction) /*******test statistics***********/ - shaping_stat_judge(stat_str, 0, 0, 1, 20, 2000, 0, 0, 21000, SHAPING_DIR_OUT, profile_type_primary); - shaping_stat_judge(stat_str, 0, 0, 1, 20, 2000, 0, 0, 0, SHAPING_DIR_IN, profile_type_primary); + 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); } @@ -644,13 +651,13 @@ TEST(single_session, udp_multi_rules) /*******test statistics***********/ //profile_id 0 - shaping_stat_judge(stat_str, 0, 0, 1, 100, 10000, 0, 0, 507000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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, 100, 10000, 0, 0, 1000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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, 1, 100, 10000, 0, 0, 91000, SHAPING_DIR_OUT, profile_type_primary);//max latency is first queued pkt + 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 free(stat_str); } @@ -714,10 +721,10 @@ TEST(single_session, udp_borrow) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 1, 1, 1, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(stat_str, 1, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); free(stat_str); } @@ -784,15 +791,13 @@ TEST(single_session, udp_borrow_same_priority_9) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 0, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary); -#if 0 //fieldstat don't output a row when all values is zero - ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2, borrow - shaping_stat_judge(line, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); -#endif + //profile_id 2, borrow + shaping_stat_judge(stat_str, 1, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); //profile_id 3, borrow - shaping_stat_judge(stat_str, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(stat_str, 2, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); free(stat_str); } @@ -948,13 +953,13 @@ TEST(two_session_diff_priority_same_profile, udp_borrow_in_order) /*******test statistics***********/ //profile_id 1, primary - shaping_stat_judge(stat_str, 1, 1, 1, 0, 0, 0, 0, 1471000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow); + shaping_stat_judge(stat_str, 1, 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, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 2, 2, 2, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary); free(stat_str); } @@ -1522,7 +1527,7 @@ TEST(statistics, udp_drop_pkt) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 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(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 //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); @@ -1575,7 +1580,7 @@ TEST(statistics, udp_queueing_pkt) fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len); /*******judge metric********/ - shaping_stat_judge(stat_str, 0, 0, 1, 10, 1000, 0, 90, 0, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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); //first 10 packets @@ -1593,6 +1598,7 @@ TEST(statistics, udp_queueing_pkt) shaping_flow_free(&ctx->thread_ctx[0], sf); /***********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); @@ -1602,10 +1608,10 @@ TEST(statistics, udp_queueing_pkt) /*******test statistics***********/ //judge shaping metric - shaping_stat_judge(stat_str, 0, 0, 1, 90, 9000, 0, 0, 90000, SHAPING_DIR_OUT, profile_type_primary); + shaping_stat_judge(stat_str, 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, 90, 9000, 0, 0, -90, -9000); + shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0); free(global_stat_str); free(stat_str); diff --git a/shaping/test/telegraf/self_test_shaping.conf b/shaping/test/telegraf/self_test_shaping.conf deleted file mode 100644 index 6059161..0000000 --- a/shaping/test/telegraf/self_test_shaping.conf +++ /dev/null @@ -1,102 +0,0 @@ -# Telegraf Configuration -[global_tags] - device_id = "88888888" - #vsys_id = "1" -[agent] - interval = "1s" - round_interval = true - metric_batch_size = 1000 - metric_buffer_limit = 10000 - collection_jitter = "0s" - flush_interval = "1s" - flush_jitter = "0s" - precision = "" - debug = false - quiet = false - logfile = "" - hostname = "" - omit_hostname = true - - -[[inputs.socket_listener]] - service_address = "udp4://:6667" - data_format = "influx" - -#[[processors.converter]] -# [processors.converter.tags] -# measurement = ["topic"] - -[[processors.rename]] - [[processors.rename.replace]] - field = "active_sessions_sum" - dest = "active_sessions" - - [[processors.rename.replace]] - field = "in_drop_pkts_sum" - dest = "in_drop_pkts" - - [[processors.rename.replace]] - field = "in_max_latency_us_max" - dest = "in_max_latency_us" - - [[processors.rename.replace]] - field = "in_queue_len_sum" - dest = "in_queue_len" - - [[processors.rename.replace]] - field = "in_bytes_sum" - dest = "in_bytes" - - [[processors.rename.replace]] - field = "in_pkts_sum" - dest = "in_pkts" - - [[processors.rename.replace]] - field = "out_drop_pkts_sum" - dest = "out_drop_pkts" - - [[processors.rename.replace]] - field = "out_max_latency_us_max" - dest = "out_max_latency_us" - - [[processors.rename.replace]] - field = "out_queue_len_sum" - dest = "out_queue_len" - - [[processors.rename.replace]] - field = "out_bytes_sum" - dest = "out_bytes" - - [[processors.rename.replace]] - field = "out_pkts_sum" - dest = "out_pkts" - - [[processors.rename.replace]] - field = "queueing_sessions_sum" - dest = "queueing_sessions" - -#[[aggregators.basicstats]] -# period = "1s" -# drop_original = true -# stats = ["sum", "max"] - -[[outputs.file]] -files = ["/tmp/shaping_metrics.json", "stdout"] -data_format = "json" -fielddrop = ["*pkts*max", "*bytes*max", "*session*max", "*queue*max", "*latency*sum"] -json_timestamp_units = "1ms" -#json_transformation = ''' -# $merge([{"timestamp": timestamp}, tags, fields]) -# ''' - -#[[outputs.kafka]] -# sasl_username = "admin" -# sasl_password = "galaxy2019" -# brokers = [ "192.168.44.12:9094" ] -# topic = "POLICY-RULE-METRICS" -# fielddrop = ["*pkts*max", "*bytes*max", "*session*max", "*queue*max", "*latency*sum"] -# data_format = "json" -# json_timestamp_units = "1ms" -# json_transformation = ''' -# $merge([{"timestamp": timestamp}, tags, fields]) -# ''' diff --git a/shaping/test/test_conf/shaping.conf b/shaping/test/test_conf/shaping.conf index 325803f..3e71225 100644 --- a/shaping/test/test_conf/shaping.conf +++ b/shaping/test/test_conf/shaping.conf @@ -34,6 +34,7 @@ FIELDSTAT_OUTPUT_INTERVAL_S=999999000 DEVICE_GROUP="test_device_group" DEVICE_ID="2333333333333333" DATA_CENTER="center-xxg-tsgx" +GLOBAL_STAT_SELF_TEST=1 [CONFIG] #PROFILE_QUEUE_LEN_PER_PRIORITY_MAX=128 -- cgit v1.2.3