diff options
| author | fumingwei <[email protected]> | 2023-06-06 10:31:54 +0800 |
|---|---|---|
| committer | fumingwei <[email protected]> | 2023-06-06 10:32:01 +0800 |
| commit | 1518429de72e89af6c943b740eaa5df5df155853 (patch) | |
| tree | 7e731b47d49aaa9aa26b5fc53e74a0e721d71114 | |
| parent | cf3354b9682748c86977635a22cd136f0529d03b (diff) | |
bugfix:修复文件输出table column0信息显示不全的问题v3.0.6
| -rw-r--r-- | src/file_output.cpp | 161 | ||||
| -rw-r--r-- | test/src/gtest_fieldstat_interface.cpp | 43 | ||||
| -rw-r--r-- | test/src/gtest_fieldstat_output.cpp | 4 | ||||
| -rw-r--r-- | test/src/gtest_fieldstat_output_file_instance.cpp | 21 |
4 files changed, 152 insertions, 77 deletions
diff --git a/src/file_output.cpp b/src/file_output.cpp index a6ae655..5b49d51 100644 --- a/src/file_output.cpp +++ b/src/file_output.cpp @@ -249,40 +249,133 @@ static int output_file_format_default_type_counter(struct fieldstat_instance *in return used_len; } -static int output_file_format_default_table(struct fieldstat_instance *instance,int tables_line_cnt[], int current_table_cnt,long long interval_ms,char*print_buf, unsigned int size) + +static int build_table_cloumn0_format(struct table_metric *table, int n_table_line, char *format, + unsigned int size) +{ + int max_len_column0 = 0, used_len = 0; + struct table_line *line = NULL; + memset(format, 0, size); + + for(int j = 0; j < n_table_line; j++) + { + line = read_table_line(table, j); + if(line == NULL) + { + continue; + } + max_len_column0 = (int)strlen(line->name) > max_len_column0? + (int)strlen(line->name) : max_len_column0; + } + if(max_len_column0 > 0) + { + used_len += snprintf(format, size, "\n%%-%d.%ds", max_len_column0, max_len_column0); + } + return max_len_column0; +} + + +static int build_table_head(struct table_metric *table, char *column0_format, char *print_buf, + unsigned int print_buf_size) +{ + int used_len = 0; + + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "table name: %-s", + table->name); + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, column0_format, " "); + + for(int i = 0; i < table->column_cnt; i ++) + { + //print table column + if(table->column_invisible[i] == 1) + { + continue; + } + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "%20.19s", + table->column_name[i]); + } + return used_len; +} + + +static int build_table_metrics_point(struct fieldstat_instance *instance, struct metric *metric, + long long interval_ms,char *print_buf, unsigned int print_buf_size) +{ + int used_len = 0; + long long value = 0; + double ratio = 0.0; + + if(metric->is_invisible == 1) + { + return used_len; + } + switch(metric->field_type) + { + case FIELD_TYPE_GAUGE: + if(metric->is_ratio == 0) + { + value = get_metric_unit_val(metric, FS_CALC_CURRENT, 0); + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "%20lld", + value); + } + else + { + ratio = get_ratio_value(instance, metric, FS_CALC_CURRENT); + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "%20.2e", + ratio); + } + break; + + case FIELD_TYPE_COUNTER: + if(metric->is_ratio == 0) + { + value = get_metric_unit_val(metric, FS_CALC_SPEED, 0); + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "%20.2e", + (double)value*1000/interval_ms); + } + else + { + ratio = get_ratio_value(instance, metric, FS_CALC_SPEED); + used_len += snprintf(print_buf + used_len, print_buf_size - used_len, "%20.2e", + (double)ratio*1000/interval_ms); + } + break; + default: + break; + } + return used_len; +} + + + +static int output_file_format_default_table(struct fieldstat_instance *instance,int tables_line_cnt[], + int current_table_cnt, long long interval_ms, char*print_buf, + unsigned int size) { int i = 0, j = 0, k = 0; struct table_metric *table = NULL; struct table_line *line = NULL; int metric_id = 0; struct metric *metric = NULL; - long long value = 0; int used_len = 0; - double ratio = 0.0; + char column0_format[256] = {0}; for(i = 0; i < current_table_cnt; i++) //per table { table = instance->table_metrics[i]; - used_len += snprintf(print_buf + used_len, size - used_len, "table name: %-s\n", table->name); - used_len += snprintf(print_buf + used_len, size - used_len, "%-22.22s", " "); - for(j = 0; j < table->column_cnt; j ++) - { - //print table column - if(table->column_invisible[j] == 1) - { - continue; - } - used_len += snprintf(print_buf + used_len, size - used_len, "%20.19s", table->column_name[j]); - } + build_table_cloumn0_format(table, tables_line_cnt[i], column0_format, sizeof(column0_format)); + + used_len += build_table_head(table, column0_format, print_buf + used_len, size - used_len); + for(j = 0; j < tables_line_cnt[i]; j++) //per line { - line = read_table_line(table,j); + line = read_table_line(table, j); if(line == NULL) { continue; } //print table line name + tag - used_len += snprintf(print_buf + used_len, size - used_len, "\n%-22.22s", line->name); + used_len += snprintf(print_buf + used_len, size - used_len, column0_format, line->name); used_len += append_tags_to_print_buf(line->tag_key, line->tag_value, line->n_tag, print_buf + used_len, size - used_len); @@ -292,40 +385,8 @@ static int output_file_format_default_table(struct fieldstat_instance *instance, //print table metric value metric_id = line->metric_id_belong_to_line[k]; metric = get_metric(instance,metric_id); - if(metric->is_invisible == 1) - { - continue; - } - switch(metric->field_type) - { - case FIELD_TYPE_GAUGE: - if(metric->is_ratio == 0) - { - value = get_metric_unit_val(metric, FS_CALC_CURRENT, 0); - used_len += snprintf(print_buf + used_len, size - used_len, "%20lld", value); - } - else - { - ratio = get_ratio_value(instance, metric, FS_CALC_CURRENT); - used_len += snprintf(print_buf + used_len, size - used_len, "%20.2e", ratio); - } - break; - - case FIELD_TYPE_COUNTER: - if(metric->is_ratio == 0) - { - value = get_metric_unit_val(metric, FS_CALC_SPEED, 0); - used_len += snprintf(print_buf + used_len, size - used_len, "%20.2e", (double)value*1000/interval_ms); - } - else - { - ratio = get_ratio_value(instance, metric, FS_CALC_SPEED); - used_len += snprintf(print_buf + used_len, size - used_len, "%20.2e", (double)ratio*1000/interval_ms); - } - break; - default: - break; - } + used_len += build_table_metrics_point(instance, metric, interval_ms, print_buf + used_len, + size - used_len); } } diff --git a/test/src/gtest_fieldstat_interface.cpp b/test/src/gtest_fieldstat_interface.cpp index 6d3c105..95c9e65 100644 --- a/test/src/gtest_fieldstat_interface.cpp +++ b/test/src/gtest_fieldstat_interface.cpp @@ -394,27 +394,35 @@ TEST(FeildStatAPI, SetMetricRatioPara) const char *output_file_path = "/tmp/fieldstat.txt"; const char *output_telegraf_path = "/tmp/metrics.out"; - const char *table_column_name[] = {"rule", "reg/v6", "stream", "IN_Bps", "cpu_us", "PROC_Bps", "IN_Tps", "PROC_Tps","hit_cnt", "hit_rate"}; - const char *compared_file_output = "Sum 0" - " 0 0.00e+00 5.00e+02" - " 5.00e+00 5.00e+01 0.00e+00" - " 0.00e+00 0.00e+00 0.00e+00\n"; + const char *table_column_name[] = { + "rule", "reg/v6", "stream", "IN_Bps", "cpu_us", "PROC_Bps", "IN_Tps", "PROC_Tps", "hit_cnt", + "hit_rate" + }; + const char *compared_file_output = "Sum 0" + " 0 0.00e+00 5.00e+02" + " 5.00e+00 5.00e+01 0.00e+00" + " 0.00e+00 0.00e+00 0.00e+00\n"; const char *compare = "{\"fields\":{\"IN_Bps\":1000,\"IN_Tps\":0,\"PROC_Tps\":0,\"cpu_us\":10," "\"hit_cnt\":0,\"hit_rate\":0,\"reg/v6\":0,\"rule\":0,\"stream\":0}," "\"name\":\"Sum\",\"tags\":{\"app_name\":\"maat\",\"table_name\":\"maat_info\"}}"; - enum field_type table_column_type[10] = {FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER}; + enum field_type table_column_type[10] = { + FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER + }; instance = fieldstat_instance_new("maat"); EXPECT_STREQ("maat", instance->name); - table_id = fieldstat_register_table(instance, "maat_info", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0])); + table_id = fieldstat_register_table(instance, "maat_info", table_column_name, table_column_type, + sizeof(table_column_name)/sizeof(table_column_name[0])); EXPECT_EQ(0, table_id); ret = fieldstat_register_table_row(instance, table_id, "Sum", NULL, 0, output_metric_ids); EXPECT_EQ(0, ret); - ret = fieldstat_set_metric_ratio_para(instance, output_metric_ids[5], output_metric_ids[3], output_metric_ids[4], 1); + ret = fieldstat_set_metric_ratio_para(instance, output_metric_ids[5], output_metric_ids[3], + output_metric_ids[4], 1); EXPECT_EQ(0, ret); ret = fieldstat_set_local_output(instance, output_file_path, "default"); EXPECT_EQ(0, ret); @@ -511,16 +519,15 @@ TEST(FeildStatAPI, SetMetricInvisible) FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER }; - const char *compared_file_data_line = "Sum " - " 0 0 0.00e+00" - " 5.00e+02 5.00e+01 0.00e+00" - " 0.00e+00 0.00e+00 0.00e+00\n"; - - const char *compared_file_column_line = " " - " rule reg/v6 stream" - " IN_Bps PROC_Bps IN_Tps" - " PROC_Tps hit_cnt hit_rate\n"; - + const char *compared_file_data_line = "Sum 0" + " 0 0.00e+00 5.00e+02" + " 5.00e+01 0.00e+00 0.00e+00" + " 0.00e+00 0.00e+00\n"; + + const char *compared_file_column_line = " rule" + " reg/v6 stream IN_Bps" + " PROC_Bps IN_Tps PROC_Tps" + " hit_cnt hit_rate\n"; const char *compare_telegraf_output = "{\"fields\":{\"IN_Bps\":1000," "\"IN_Tps\":0,\"PROC_Tps\":0,\"hit_cnt\":0,\"hit_rate\":0," diff --git a/test/src/gtest_fieldstat_output.cpp b/test/src/gtest_fieldstat_output.cpp index d9b8fd5..198875a 100644 --- a/test/src/gtest_fieldstat_output.cpp +++ b/test/src/gtest_fieldstat_output.cpp @@ -36,7 +36,7 @@ enum field_type table_column_type[] = { const char *file_output_path = "/tmp/fieldstat.txt"; const char *desired_file_table_name = "table name: network_activity\n"; -const char *desired_file_table_info = " new_conn_num established_conn_nu" +const char *desired_file_table_info = " new_conn_num established_conn_nu" " close_conn_num total_in_bytes total_out_bytes total_in_packets" " total_out_packets default_conn_num default_in_bytes default_out_bytes" " default_in_packets default_out_packets allow_conn_num allow_in_bytes" @@ -51,7 +51,7 @@ const char *desired_file_table_info = " new_conn_nu " udp_in_packets udp_in_bytes udp_out_packets udp_out_bytes" " alert_bytes block_bytes pinning_num maybe_pinning_num" " not_pinning_num\n"; -const char *desired_file_table_data = "TRAFFIC 5.00e+02 0.00e+00" +const char *desired_file_table_data = "TRAFFIC 5.00e+02 0.00e+00" " 0.00e+00 0.00e+00 0.00e+00 0.00e+00" " 0.00e+00 0.00e+00 0.00e+00 0.00e+00" " 0.00e+00 0.00e+00 0.00e+00 0.00e+00" diff --git a/test/src/gtest_fieldstat_output_file_instance.cpp b/test/src/gtest_fieldstat_output_file_instance.cpp index 5f3a962..2556223 100644 --- a/test/src/gtest_fieldstat_output_file_instance.cpp +++ b/test/src/gtest_fieldstat_output_file_instance.cpp @@ -19,17 +19,24 @@ TEST(FeildStatOutput, OutputMaatTable) char line[2048] = {0}; const char *output_file_path = "/tmp/fieldstat.txt"; - const char *table_column_name[] = {"rule", "reg", "v6", "stream", "scan_cnt", "scan_bytes", "scan_cpu_time", "hit_cnt"}; - const char *compared_table_row = "PXY_PROFILE_RUN_SCRIPT" - " 9223372036854775807 0 0 0" - " 0 0 0 0\n"; - - enum field_type table_column_type[8] = {FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE}; + const char *table_column_name[] = { + "rule", "reg", "v6", "stream", "scan_cnt", "scan_bytes", "scan_cpu_time", "hit_cnt" + }; + const char *compared_table_row = "PXY_PROFILE_RUN_SCRIPTS 9223372036854775807" + " 0 0 0" + " 0 0 0" + " 0\n"; + + enum field_type table_column_type[8] = { + FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, + FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE, FIELD_TYPE_GAUGE + }; instance = fieldstat_instance_new("maat"); EXPECT_STREQ("maat", instance->name); - table_id = fieldstat_register_table(instance, "maat_info", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0])); + table_id = fieldstat_register_table(instance, "maat_info", table_column_name, table_column_type, + sizeof(table_column_name)/sizeof(table_column_name[0])); EXPECT_EQ(0, table_id); ret = fieldstat_register_table_row(instance, table_id, "Sum", NULL, 0, output_metric_ids); EXPECT_EQ(0, ret); |
