summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfumingwei <[email protected]>2023-06-06 10:31:54 +0800
committerfumingwei <[email protected]>2023-06-06 10:32:01 +0800
commit1518429de72e89af6c943b740eaa5df5df155853 (patch)
tree7e731b47d49aaa9aa26b5fc53e74a0e721d71114
parentcf3354b9682748c86977635a22cd136f0529d03b (diff)
bugfix:修复文件输出table column0信息显示不全的问题v3.0.6
-rw-r--r--src/file_output.cpp161
-rw-r--r--test/src/gtest_fieldstat_interface.cpp43
-rw-r--r--test/src/gtest_fieldstat_output.cpp4
-rw-r--r--test/src/gtest_fieldstat_output_file_instance.cpp21
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);