summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfumingwei <[email protected]>2023-06-02 17:39:55 +0800
committerfumingwei <[email protected]>2023-06-03 09:49:11 +0800
commitcf3354b9682748c86977635a22cd136f0529d03b (patch)
tree23b74f158a40026661611c0291042a3286fc1bca
parent2b6a1bfd1a6c41fb71b59dd50f62d2c3f4688fa8 (diff)
feature:TSG-15303:新增支持注册name中包含.的metricv3.0.5
-rw-r--r--src/fieldstat.cpp39
-rw-r--r--src/fieldstat_dynamic.cpp8
-rw-r--r--src/fieldstat_internal.h4
-rw-r--r--test/src/gtest_dynamic_fieldstat.cpp3
-rw-r--r--test/src/gtest_fieldstat_interface.cpp48
-rw-r--r--test/src/gtest_fieldstat_output.cpp839
6 files changed, 384 insertions, 557 deletions
diff --git a/src/fieldstat.cpp b/src/fieldstat.cpp
index 4be0ce2..2126d82 100644
--- a/src/fieldstat.cpp
+++ b/src/fieldstat.cpp
@@ -35,9 +35,14 @@ char* __str_dup(const char* str)
int is_valid_field_name(const char* name)
{
- const char* reserverd="|:\n\r. \t<>[]#!@";
+ const char* reserverd="|:\n\r \t<>[]#!@";
unsigned int i=0,j=0;
- for(i=0;i<strlen(name);i++)
+ unsigned int len=strlen(name);
+ if(len == 0)
+ {
+ return 0;
+ }
+ for(i=0;i<len;i++)
{
for(j=0;j<strlen(reserverd);j++)
if(name[i]==reserverd[j])
@@ -88,6 +93,30 @@ int is_valid_tags(const struct fieldstat_tag *tags, size_t n_tags)
return 1;
}
+void escaping_special_chars(char* str)
+{
+ const char *escaped = ".";
+ unsigned i = 0, j = 0;
+ unsigned int len = strlen(str);
+ if(len == 0)
+ {
+ return;
+ }
+
+ for(i = 0; i < len; i++)
+ {
+ for(j = 0; j < strlen(escaped); j++)
+ {
+ if(str[i] == escaped[j])
+ {
+ str[i] = '_';
+ }
+ }
+ }
+
+}
+
+
void get_current_table_line_cnt(struct fieldstat_instance *instance, int n_table, int *tables_line_cnt)
{
for(int i = 0; i < n_table; i++)
@@ -157,6 +186,7 @@ struct metric * metric_new(enum field_type type, const char *field_name, const s
{
struct metric *metric = (struct metric*)calloc(1, sizeof(struct metric));
metric->field_name = __str_dup(field_name);
+ escaping_special_chars(metric->field_name);
metric->field_type = type;
metric->is_ratio = 0;
metric->output_scaling = 1;
@@ -597,7 +627,7 @@ struct fieldstat_instance * fieldstat_instance_new(const char *name)
}
instance = (struct fieldstat_instance *)calloc(1, sizeof(struct fieldstat_instance));
- strcpy(instance->name, name);
+ strncpy(instance->name, name, strlen(name));
instance->running = 0;
instance->output_interval_ms = 2000;
instance->background_thread_disable = 0;
@@ -671,11 +701,13 @@ struct table_metric* table_metric_new(const char *name, const char *column_name[
table_metric->column_cnt = (int)n_column;
table_metric->name = __str_dup(name);
+ escaping_special_chars(table_metric->name);
for(i = 0; i < (int)n_column; i++)
{
table_metric->column_name[i] = __str_dup(column_name[i]);
table_metric->column_type[i] = column_type[i];
+ escaping_special_chars(table_metric->column_name[i]);
}
return table_metric;
}
@@ -792,6 +824,7 @@ struct table_line *table_line_new(const char *name, const struct fieldstat_tag t
struct table_line *table_line = (struct table_line *)calloc(1, sizeof(struct table_line));
table_line->name = __str_dup(name);
+ escaping_special_chars(table_line->name);
table_line->n_tag = n_tag;
add_tags_to_metric(tags, n_tag, table_line->tag_key, table_line->tag_value);
diff --git a/src/fieldstat_dynamic.cpp b/src/fieldstat_dynamic.cpp
index 597ee3b..dd583e6 100644
--- a/src/fieldstat_dynamic.cpp
+++ b/src/fieldstat_dynamic.cpp
@@ -16,7 +16,8 @@ struct fieldstat_dynamic_instance * fieldstat_dynamic_instance_new(const char *n
instance = (struct fieldstat_dynamic_instance *)calloc(1, sizeof(struct fieldstat_dynamic_instance));
- strcpy(instance->name, name);
+ strncpy(instance->name, name, strlen(name));
+
instance->running = 0;
instance->output_interval_ms = 2000;
instance->background_thread_disable = 0;
@@ -242,8 +243,11 @@ static int build_dynamic_metric_key(int table_id, const char *field_name, const
int i = 0;
int used_len = 0;
struct fieldstat_tag *tag = NULL;
+ char unescaped_field_name[256] = {0};
+ strncpy(unescaped_field_name, field_name, sizeof(unescaped_field_name) - 1);
+ escaping_special_chars(unescaped_field_name);
- used_len += snprintf(out_key + used_len, out_key_size - used_len, "%d%s", table_id, field_name);
+ used_len += snprintf(out_key + used_len, out_key_size - used_len, "%d%s", table_id, unescaped_field_name);
for(i = 0; i < (int)n_tags; i++)
{
diff --git a/src/fieldstat_internal.h b/src/fieldstat_internal.h
index db191c0..4ea31d4 100644
--- a/src/fieldstat_internal.h
+++ b/src/fieldstat_internal.h
@@ -273,4 +273,6 @@ struct table_line ** read_table_line_slot(struct table_metric *table, int line_i
void fieldstat_global_disable_prometheus_endpoint();
int enable_line_protocol_output(struct line_protocol_output *line_protocol_output, const char *ip, unsigned short port);
-void disable_line_protocol_output(struct line_protocol_output *line_protocol_output); \ No newline at end of file
+void disable_line_protocol_output(struct line_protocol_output *line_protocol_output);
+
+void escaping_special_chars(char* str); \ No newline at end of file
diff --git a/test/src/gtest_dynamic_fieldstat.cpp b/test/src/gtest_dynamic_fieldstat.cpp
index 28e7f4b..181557a 100644
--- a/test/src/gtest_dynamic_fieldstat.cpp
+++ b/test/src/gtest_dynamic_fieldstat.cpp
@@ -39,7 +39,8 @@ TEST(FeildStatDynamicAPI, FieldStatDynamicInstanceNew)
EXPECT_EQ(nullptr, instance);
instance = fieldstat_dynamic_instance_new("firewall.", 16);
- EXPECT_EQ(nullptr, instance);
+ EXPECT_NE(nullptr, instance);
+ fieldstat_dynamic_instance_free(instance);
instance = fieldstat_dynamic_instance_new("firewall ", 16);
EXPECT_EQ(nullptr, instance);
diff --git a/test/src/gtest_fieldstat_interface.cpp b/test/src/gtest_fieldstat_interface.cpp
index 48ebb9a..6d3c105 100644
--- a/test/src/gtest_fieldstat_interface.cpp
+++ b/test/src/gtest_fieldstat_interface.cpp
@@ -9,10 +9,54 @@ extern struct prometheus_endpoint_instance g_prometheus_endpoint_instance;
TEST(FeildStatAPI, FieldStatInstanceNew)
{
- struct fieldstat_instance *instance = fieldstat_instance_new("test");
+ struct fieldstat_instance *instance = fieldstat_instance_new("firewall");
EXPECT_NE(nullptr, instance);
- EXPECT_STREQ("test", instance->name);
+ EXPECT_STREQ("firewall", instance->name);
fieldstat_instance_free(instance);
+
+ instance = fieldstat_instance_new("firewall-name-length-more-than-32");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall\n");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall|");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall:");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall.");
+ EXPECT_NE(nullptr, instance);
+ fieldstat_instance_free(instance);
+
+ instance = fieldstat_instance_new("firewall ");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall\t");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall<");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall>");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall[");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall]");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall#");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall!");
+ EXPECT_EQ(nullptr, instance);
+
+ instance = fieldstat_instance_new("firewall@");
+ EXPECT_EQ(nullptr, instance);
+
}
diff --git a/test/src/gtest_fieldstat_output.cpp b/test/src/gtest_fieldstat_output.cpp
index a7e92d0..d9b8fd5 100644
--- a/test/src/gtest_fieldstat_output.cpp
+++ b/test/src/gtest_fieldstat_output.cpp
@@ -7,76 +7,99 @@
extern struct prometheus_endpoint_instance g_prometheus_endpoint_instance;
-TEST(FeildStatOutput, OutputFile)
+
+const char *table_column_name[] = {
+ "new_conn_num", "established_conn_num", "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", "allow_out_bytes","allow_in_packets", "allow_out_packets",
+ "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets", "deny_out_packets", "monitor_conn_num",
+ "monitor_in_bytes","monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
+ "intercept_in_bytes","intercept_out_bytes","intercept_in_packets", "intercept_out_packets", "ipv4_in_packets",
+ "ipv4_in_bytes", "ipv4_out_packets", "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets",
+ "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets","tcp_in_bytes","tcp_out_packets", "tcp_out_bytes", "udp_conn_num",
+ "udp_in_packets", "udp_in_bytes", "udp_out_packets","udp_out_bytes", "alert_bytes", "block_bytes","pinning_num",
+ "maybe_pinning_num", "not_pinning_num"
+};
+
+enum field_type table_column_type[] = {
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER,
+ FIELD_TYPE_COUNTER
+};
+
+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"
+ " 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"
+ " allow_out_bytes allow_in_packets allow_out_packets deny_conn_num"
+ " deny_in_bytes deny_out_bytes deny_in_packets deny_out_packets"
+ " monitor_conn_num monitor_in_bytes monitor_out_bytes monitor_in_packets"
+ " monitor_out_packets intercept_conn_num intercept_in_bytes intercept_out_bytes"
+ " intercept_in_packet intercept_out_packe ipv4_in_packets ipv4_in_bytes"
+ " ipv4_out_packets ipv4_out_bytes ipv6_in_packets ipv6_in_bytes"
+ " ipv6_out_packets ipv6_out_bytes tcp_conn_num tcp_in_packets"
+ " tcp_in_bytes tcp_out_packets tcp_out_bytes udp_conn_num"
+ " 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"
+ " 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 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 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 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"
+ " 0.00e+00\n";
+
+const char *lineprotocol_output_path = "/tmp/metrics.out";
+
+const char *desired_lineprotocol_output = "{\"fields\":{\"alert_bytes\":0,\"allow_conn_num\":0,\"allow_in_bytes\":0,\"all"
+ "ow_in_packets\":0,\"allow_out_bytes\":0,\"allow_out_packets\":0,\"block_bytes\""
+ ":0,\"close_conn_num\":0,\"default_conn_num\":0,\"default_in_bytes\":0,\"default"
+ "_in_packets\":0,\"default_out_bytes\":0,\"default_out_packets\":0,\"deny_conn_n"
+ "um\":0,\"deny_in_bytes\":0,\"deny_in_packets\":0,\"deny_out_bytes\":0,\"deny_ou"
+ "t_packets\":0,\"established_conn_num\":0,\"intercept_conn_num\":0,\"intercept_i"
+ "n_bytes\":0,\"intercept_in_packets\":0,\"intercept_out_bytes\":0,\"intercept_ou"
+ "t_packets\":0,\"ipv4_in_bytes\":0,\"ipv4_in_packets\":0,\"ipv4_out_bytes\":0,\""
+ "ipv4_out_packets\":0,\"ipv6_in_bytes\":0,\"ipv6_in_packets\":0,\"ipv6_out_bytes"
+ "\":0,\"ipv6_out_packets\":0,\"maybe_pinning_num\":0,\"monitor_conn_num\":0,\"mo"
+ "nitor_in_bytes\":0,\"monitor_in_packets\":0,\"monitor_out_bytes\":0,\"monitor_o"
+ "ut_packets\":0,\"new_conn_num\":1000,\"not_pinning_num\":0,\"pinning_num\":0,\""
+ "tcp_conn_num\":0,\"tcp_in_bytes\":0,\"tcp_in_packets\":0,\"tcp_out_bytes\":0,\""
+ "tcp_out_packets\":0,\"total_in_bytes\":0,\"total_in_packets\":0,\"total_out_byt"
+ "es\":0,\"total_out_packets\":0,\"udp_conn_num\":0,\"udp_in_bytes\":0,\"udp_in_p"
+ "ackets\":0,\"udp_out_bytes\":0,\"udp_out_packets\":0},\"name\":\"TRAFFIC\",\"ta"
+ "gs\":{\"app_name\":\"tsg_statistic\",\"table_name\":\"network_activity\"}}";
+
+const char *prometheus_output_path = "/tmp/prometheus.txt";
+
+const char *desired_prometheus_output = "tsg_statistic_new_conn_num{app_name=\"tsg_statistic\",table_name=\"network_activit"
+ "y\",line_name=\"TRAFFIC\"} 1000\n";
+
+
+
+void check_file_output_content(int desired_line_cnt)
{
- int ret = 0;
- int n_loops = 5;
- struct fieldstat_instance * instance = NULL;
- int table_id = -1;
- FILE *fp;
+ int n_line = 0;
char read_line_buf[2048] = {0};
-
- int output_metric_ids[54] = {0};
-
- const char *output_file_path = "/tmp/fieldstat.txt";
- const char *compared_table_name = "table name: network_activity\n";
- const char *compared_table_column = " 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"
- " allow_out_bytes allow_in_packets allow_out_packets deny_conn_num"
- " deny_in_bytes deny_out_bytes deny_in_packets deny_out_packets"
- " monitor_conn_num monitor_in_bytes monitor_out_bytes monitor_in_packets"
- " monitor_out_packets intercept_conn_num intercept_in_bytes intercept_out_bytes"
- " intercept_in_packet intercept_out_packe ipv4_in_packets ipv4_in_bytes"
- " ipv4_out_packetsipv ipv6_in_packets ipv6_in_bytes ipv6_out_packets"
- " ipv6_out_bytes tcp_conn_num tcp_in_packets tcp_in_bytes"
- " tcp_out_packets tcp_out_bytes udp_conn_num 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 *compared_table_row_value = "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"
- " 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 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 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 0.00e+00\n";
-
-
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
-
- instance = fieldstat_instance_new("tsg_statistic");
- EXPECT_STREQ("tsg_statistic", instance->name);
-
- table_id = fieldstat_register_table(instance, "network_activity", 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, "TRAFFIC", NULL, 0, output_metric_ids);
- EXPECT_EQ(0, ret);
- ret = fieldstat_set_local_output(instance, output_file_path, "default");
- EXPECT_EQ(0, ret);
- fieldstat_instance_start(instance);
- sleep(1);
- fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
- sleep(2);
- fp = fopen(output_file_path, "r");
+ FILE *fp = fopen(file_output_path, "r");
EXPECT_NE(nullptr, fp);
- int n_line = 0;
while(!feof(fp))
{
@@ -86,88 +109,43 @@ TEST(FeildStatOutput, OutputFile)
}
if(n_line == 1)
{
- EXPECT_STREQ(compared_table_name, read_line_buf);
+ EXPECT_STREQ(desired_file_table_name, read_line_buf);
}
if(n_line == 2)
{
- EXPECT_STREQ(compared_table_column, read_line_buf);
+ EXPECT_STREQ(desired_file_table_info, read_line_buf);
}
if(n_line == 3)
{
- EXPECT_STREQ(compared_table_row_value, read_line_buf);
+ EXPECT_STREQ(desired_file_table_data, read_line_buf);
}
n_line++;
}
fclose(fp);
- EXPECT_EQ(n_line, n_loops);
- fieldstat_instance_free(instance);
-
+ EXPECT_EQ(n_line, desired_line_cnt);
+ system("cat /dev/null > /tmp/fieldstat.txt");
}
-TEST(FeildStatOutput, OutputLineProtocol)
+void check_lineprotocol_output_content(int desired_line_cnt)
{
- int ret = 0;
- int n_loops = 1;
- struct fieldstat_instance * instance = NULL;
- int table_id = -1;
- int output_metric_ids[54] = {0};
- const char *telegraf_output_file = "/tmp/metrics.out";
- FILE *fp;
- char line[2048] = {0};
+ int n_line = 0;
+ char read_line_buf[2048] = {0};
+
cJSON *cjson_metric = NULL;
cJSON *cjson_tags = NULL;
- const char *compare = "{\"fields\":{\"alert_bytes\":0,\"allow_conn_num\":0,\"allow_in_bytes\":0,\"allow_in_packets\":0,\"allow_out_bytes\":0,"\
- "\"allow_out_packets\":0,\"block_bytes\":0,\"close_conn_num\":0,\"default_conn_num\":0,\"default_in_bytes\":0,"\
- "\"default_in_packets\":0,\"default_out_bytes\":0,\"default_out_packets\":0,\"deny_conn_num\":0,\"deny_in_bytes\":0,"\
- "\"deny_in_packets\":0,\"deny_out_bytes\":0,\"deny_out_packets\":0,\"established_conn_num\":0,\"intercept_conn_num\":0,"\
- "\"intercept_in_bytes\":0,\"intercept_in_packets\":0,\"intercept_out_bytes\":0,\"intercept_out_packets\":0,"\
- "\"ipv4_in_bytes\":0,\"ipv4_in_packets\":0,\"ipv4_out_packetsipv4_out_bytes\":0,\"ipv6_in_bytes\":0,\"ipv6_in_packets\":0,"\
- "\"ipv6_out_bytes\":0,\"ipv6_out_packets\":0,\"maybe_pinning_num\":0,\"monitor_conn_num\":0,\"monitor_in_bytes\":0,"\
- "\"monitor_in_packets\":0,\"monitor_out_bytes\":0,\"monitor_out_packets\":0,\"new_conn_num\":1000,\"not_pinning_num\":0,"\
- "\"pinning_num\":0,\"tcp_conn_num\":0,\"tcp_in_bytes\":0,\"tcp_in_packets\":0,\"tcp_out_bytes\":0,\"tcp_out_packets\":0,"\
- "\"total_in_bytes\":0,\"total_in_packets\":0,\"total_out_bytes\":0,\"total_out_packets\":0,\"udp_conn_num\":0,"\
- "\"udp_in_bytes\":0,\"udp_in_packets\":0,\"udp_out_bytes\":0,\"udp_out_packets\":0},\"name\":\"TRAFFIC\","\
- "\"tags\":{\"app_name\":\"tsg_statistic\",\"table_name\":\"network_activity\"}}";
char *cjson_metric_str = NULL;
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
-
- instance = fieldstat_instance_new("tsg_statistic");
- EXPECT_STREQ("tsg_statistic", instance->name);
-
- table_id = fieldstat_register_table(instance, "network_activity", 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, "TRAFFIC", NULL, 0, output_metric_ids);
- EXPECT_EQ(0, ret);
-
- ret = fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700);
- EXPECT_EQ(0, ret);
- EXPECT_EQ(4, instance->output_type);
- fieldstat_instance_start(instance);
- ret = system("cat /dev/null > /tmp/metrics.out");
- sleep(1);
- fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
- sleep(2);
- fp = fopen(telegraf_output_file, "r");
+ FILE *fp = fopen(lineprotocol_output_path, "r");
EXPECT_NE(nullptr, fp);
- int n_line = 0;
while(!feof(fp))
{
- if(NULL == fgets(line, sizeof(line), fp))
+ if(NULL == fgets(read_line_buf, sizeof(read_line_buf), fp))
{
continue;
}
- cjson_metric = cJSON_Parse(line);
+ cjson_metric = cJSON_Parse(read_line_buf);
EXPECT_NE(nullptr, cjson_metric);
cJSON_DeleteItemFromObject(cjson_metric, "timestamp");
@@ -178,7 +156,7 @@ TEST(FeildStatOutput, OutputLineProtocol)
EXPECT_NE(nullptr, cjson_metric_str);
if(cjson_metric_str)
{
- EXPECT_STREQ(compare, cjson_metric_str);
+ EXPECT_STREQ(desired_lineprotocol_output, cjson_metric_str);
free(cjson_metric_str);
cjson_metric_str = NULL;
}
@@ -186,38 +164,117 @@ TEST(FeildStatOutput, OutputLineProtocol)
n_line++;
}
fclose(fp);
- EXPECT_EQ(n_line, n_loops);
+ EXPECT_EQ(n_line, desired_line_cnt);
+ system("cat /dev/null > /tmp/metrics.out");
+}
+
+void check_prometheus_output_content(int desired_line_cnt, unsigned short listen_port)
+{
+ int n_line = 0;
+ char read_line_buf[2048] = {0};
+ char req_str[256] = {0};
+
+ system("cat /dev/null > /tmp/prometheus.txt");
+ snprintf(req_str, sizeof(req_str),
+ "curl -s http://127.0.0.1:%u/metrics -o /tmp/prometheus.txt",
+ listen_port);
+
+ system(req_str);
+
+ FILE *fp = fopen(prometheus_output_path, "r");
+ EXPECT_NE(nullptr, fp);
+ while(!feof(fp))
+ {
+ if(NULL == fgets(read_line_buf, sizeof(read_line_buf), fp))
+ {
+ continue;
+ }
+ if(n_line == 0)
+ {
+ EXPECT_STREQ(desired_prometheus_output, read_line_buf);
+ }
+ n_line++;
+ }
+ fclose(fp);
+ EXPECT_EQ(n_line, desired_line_cnt);
+ system("cat /dev/null > /tmp/prometheus.txt");
+}
+
+TEST(FeildStatOutput, OutputFile)
+{
+ int ret = 0, table_id = -1;
+ struct fieldstat_instance * instance = NULL;
+ int output_metric_ids[55] = {0};
+
+ instance = fieldstat_instance_new("tsg_statistic");
+ EXPECT_STREQ("tsg_statistic", instance->name);
+
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
+ EXPECT_EQ(0, ret);
+
+ ret = fieldstat_set_local_output(instance, file_output_path, "default");
+ EXPECT_EQ(0, ret);
+
+ system("cat /dev/null > /tmp/fieldstat.txt");
+
+ fieldstat_instance_start(instance);
+ sleep(1);
+ fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
+ sleep(2);
+
+ check_file_output_content(5);
fieldstat_instance_free(instance);
+}
+
+TEST(FeildStatOutput, OutputLineProtocol)
+{
+ int ret = 0, table_id = -1;
+ int output_metric_ids[55] = {0};
+
+ struct fieldstat_instance * instance = NULL;
+ instance = fieldstat_instance_new("tsg_statistic");
+ EXPECT_STREQ("tsg_statistic", instance->name);
+
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
+ EXPECT_EQ(0, ret);
+
+ ret = fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(4, instance->output_type);
+ fieldstat_instance_start(instance);
+ ret = system("cat /dev/null > /tmp/metrics.out");
+ sleep(1);
+ fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
+ sleep(2);
+
+ check_lineprotocol_output_content(1);
+
+ fieldstat_instance_free(instance);
}
TEST(FeildStatOutput, OutputPrometheus)
{
- int ret = 0;
- int table_id = -1;
- int n_loops = 54;
- int output_metric_ids[54] = {0};
+ int ret = 0, table_id = -1;
+ int output_metric_ids[55] = {0};
struct fieldstat_instance * instance = NULL;
- FILE *fp;
- const char *prometheus_output_file = "/tmp/prometheus.txt";
- char line[2048] = {0};
- const char *compare = "tsg_statistic_new_conn_num{app_name=\"tsg_statistic\",table_name=\"network_activity\",line_name=\"TRAFFIC\"} 1000\n";
-
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
instance = fieldstat_instance_new("tsg_statistic");
EXPECT_STREQ("tsg_statistic", instance->name);
- table_id = fieldstat_register_table(instance, "network_activity", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0]));
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
EXPECT_EQ(0, ret);
@@ -229,179 +286,41 @@ TEST(FeildStatOutput, OutputPrometheus)
fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
EXPECT_EQ(0, ret);
sleep(1);
- system("cat /dev/null > /tmp/prometheus.txt");
- system("curl -s http://127.0.0.1:9020/metrics -o /tmp/prometheus.txt");
-
- int n_line = 0;
- fp = fopen(prometheus_output_file, "r");
- EXPECT_NE(nullptr, fp);
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- if(n_line == 0)
- {
- EXPECT_STREQ(compare, line);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
-
+ check_prometheus_output_content(55, 9020);
fieldstat_global_disable_prometheus_endpoint();
fieldstat_instance_free(instance);
}
TEST(FeildStatOutput, OutputFileAndLineProtocol)
{
- int ret = 0;
- int n_loops = 1;
+ int ret = 0, table_id = -1;
struct fieldstat_instance * instance = NULL;
- int table_id = -1;
- int output_metric_ids[54] = {0};
- const char *telegraf_output_file = "/tmp/metrics.out";
- FILE *fp;
- char line[2048] = {0};
- char read_line_buf[2048] = {0};
- cJSON *cjson_metric = NULL;
- cJSON *cjson_tags = NULL;
-
- const char *output_file_path = "/tmp/fieldstat.txt";
- const char *compared_table_name = "table name: network_activity\n";
- const char *compared_table_column = " 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"
- " allow_out_bytes allow_in_packets allow_out_packets deny_conn_num"
- " deny_in_bytes deny_out_bytes deny_in_packets deny_out_packets"
- " monitor_conn_num monitor_in_bytes monitor_out_bytes monitor_in_packets"
- " monitor_out_packets intercept_conn_num intercept_in_bytes intercept_out_bytes"
- " intercept_in_packet intercept_out_packe ipv4_in_packets ipv4_in_bytes"
- " ipv4_out_packetsipv ipv6_in_packets ipv6_in_bytes ipv6_out_packets"
- " ipv6_out_bytes tcp_conn_num tcp_in_packets tcp_in_bytes"
- " tcp_out_packets tcp_out_bytes udp_conn_num 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 *compared_table_row_value = "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"
- " 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 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 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 0.00e+00\n";
-
- const char *compare = "{\"fields\":{\"alert_bytes\":0,\"allow_conn_num\":0,\"allow_in_bytes\":0,\"allow_in_packets\":0,\"allow_out_bytes\":0,"\
- "\"allow_out_packets\":0,\"block_bytes\":0,\"close_conn_num\":0,\"default_conn_num\":0,\"default_in_bytes\":0,"\
- "\"default_in_packets\":0,\"default_out_bytes\":0,\"default_out_packets\":0,\"deny_conn_num\":0,\"deny_in_bytes\":0,"\
- "\"deny_in_packets\":0,\"deny_out_bytes\":0,\"deny_out_packets\":0,\"established_conn_num\":0,\"intercept_conn_num\":0,"\
- "\"intercept_in_bytes\":0,\"intercept_in_packets\":0,\"intercept_out_bytes\":0,\"intercept_out_packets\":0,"\
- "\"ipv4_in_bytes\":0,\"ipv4_in_packets\":0,\"ipv4_out_packetsipv4_out_bytes\":0,\"ipv6_in_bytes\":0,\"ipv6_in_packets\":0,"\
- "\"ipv6_out_bytes\":0,\"ipv6_out_packets\":0,\"maybe_pinning_num\":0,\"monitor_conn_num\":0,\"monitor_in_bytes\":0,"\
- "\"monitor_in_packets\":0,\"monitor_out_bytes\":0,\"monitor_out_packets\":0,\"new_conn_num\":1000,\"not_pinning_num\":0,"\
- "\"pinning_num\":0,\"tcp_conn_num\":0,\"tcp_in_bytes\":0,\"tcp_in_packets\":0,\"tcp_out_bytes\":0,\"tcp_out_packets\":0,"\
- "\"total_in_bytes\":0,\"total_in_packets\":0,\"total_out_bytes\":0,\"total_out_packets\":0,\"udp_conn_num\":0,"\
- "\"udp_in_bytes\":0,\"udp_in_packets\":0,\"udp_out_bytes\":0,\"udp_out_packets\":0},\"name\":\"TRAFFIC\","\
- "\"tags\":{\"app_name\":\"tsg_statistic\",\"table_name\":\"network_activity\"}}";
- char *cjson_metric_str = NULL;
-
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
+ int output_metric_ids[55] = {0};
instance = fieldstat_instance_new("tsg_statistic");
EXPECT_STREQ("tsg_statistic", instance->name);
- table_id = fieldstat_register_table(instance, "network_activity", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0]));
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
EXPECT_EQ(0, ret);
ret = fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700);
EXPECT_EQ(0, ret);
- ret = fieldstat_set_local_output(instance, output_file_path, "default");
+ ret = fieldstat_set_local_output(instance, file_output_path, "default");
EXPECT_EQ(0, ret);
EXPECT_EQ(12, instance->output_type);
ret = system("cat /dev/null > /tmp/metrics.out");
- //ret = system("cat /dev/null > /tmp/fieldstat.txt");
+ ret = system("cat /dev/null > /tmp/fieldstat.txt");
fieldstat_instance_start(instance);
sleep(1);
fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
sleep(2);
- int n_line = 0;
- fp = fopen(telegraf_output_file, "r");
- EXPECT_NE(nullptr, fp);
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- cjson_metric = cJSON_Parse(line);
- EXPECT_NE(nullptr, cjson_metric);
- cJSON_DeleteItemFromObject(cjson_metric, "timestamp");
-
- cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags");
- EXPECT_NE(nullptr, cjson_tags);
- cJSON_DeleteItemFromObject(cjson_tags, "host");
- cjson_metric_str = cJSON_PrintUnformatted(cjson_metric);
- EXPECT_NE(nullptr, cjson_metric_str);
- if(cjson_metric_str)
- {
- EXPECT_STREQ(compare, cjson_metric_str);
- free(cjson_metric_str);
- cjson_metric_str = NULL;
- }
- cJSON_Delete(cjson_metric);
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
-
- fp = fopen("/tmp/fieldstat.txt", "r");
- EXPECT_NE(nullptr, fp);
- n_line = 0;
- n_loops = 5;
-
- while(!feof(fp))
- {
- if(NULL == fgets(read_line_buf, sizeof(read_line_buf), fp))
- {
- continue;
- }
- if(n_line == 1)
- {
- EXPECT_STREQ(compared_table_name, read_line_buf);
- }
- if(n_line == 2)
- {
- EXPECT_STREQ(compared_table_column, read_line_buf);
- }
- if(n_line == 3)
- {
- EXPECT_STREQ(compared_table_row_value, read_line_buf);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
-
+ check_file_output_content(5);
+ check_lineprotocol_output_content(1);
fieldstat_instance_free(instance);
@@ -410,62 +329,16 @@ TEST(FeildStatOutput, OutputFileAndLineProtocol)
TEST(FeildStatOutput, OutputFileAndPrometheus)
{
- int ret = 0;
- int n_loops = 0;
+ int ret = 0, table_id = -1;
struct fieldstat_instance * instance = NULL;
- int table_id = -1;
- int output_metric_ids[54] = {0};
- FILE *fp;
- char line[2048] = {0};
-
- const char *prometheus_output_path = "/tmp/prometheus.txt";
- const char *file_output_path = "/tmp/fieldstat.txt";
- const char *prometheus_output_result = "tsg_statistic_new_conn_num{app_name=\"tsg_statistic\",table_name=\"network_activity\",line_name=\"TRAFFIC\"} 1000\n";
- const char *compared_table_name = "table name: network_activity\n";
- const char *compared_table_column = " 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"
- " allow_out_bytes allow_in_packets allow_out_packets deny_conn_num"
- " deny_in_bytes deny_out_bytes deny_in_packets deny_out_packets"
- " monitor_conn_num monitor_in_bytes monitor_out_bytes monitor_in_packets"
- " monitor_out_packets intercept_conn_num intercept_in_bytes intercept_out_bytes"
- " intercept_in_packet intercept_out_packe ipv4_in_packets ipv4_in_bytes"
- " ipv4_out_packetsipv ipv6_in_packets ipv6_in_bytes ipv6_out_packets"
- " ipv6_out_bytes tcp_conn_num tcp_in_packets tcp_in_bytes"
- " tcp_out_packets tcp_out_bytes udp_conn_num 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 *compared_table_row_value = "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"
- " 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 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 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 0.00e+00\n";
-
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
+ int output_metric_ids[55] = {0};
instance = fieldstat_instance_new("tsg_statistic");
EXPECT_STREQ("tsg_statistic", instance->name);
- table_id = fieldstat_register_table(instance, "network_activity", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0]));
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
EXPECT_EQ(0, ret);
@@ -478,59 +351,13 @@ TEST(FeildStatOutput, OutputFileAndPrometheus)
EXPECT_EQ(9, instance->output_type);
ret = system("cat /dev/null > /tmp/prometheus.txt");
- //ret = system("cat /dev/null > /tmp/fieldstat.txt");
+ ret = system("cat /dev/null > /tmp/fieldstat.txt");
fieldstat_instance_start(instance);
sleep(1);
fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
sleep(2);
- system("curl -s http://127.0.0.1:9021/metrics -o /tmp/prometheus.txt");
- int n_line = 0;
-
- fp = fopen("/tmp/fieldstat.txt", "r");
- EXPECT_NE(nullptr, fp);
- n_line = 0;
- n_loops = 5;
-
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- if(n_line == 1)
- {
- EXPECT_STREQ(compared_table_name, line);
- }
- if(n_line == 2)
- {
- EXPECT_STREQ(compared_table_column, line);
- }
- if(n_line == 3)
- {
- EXPECT_STREQ(compared_table_row_value, line);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
- n_loops = 54;
- n_line = 0;
- fp = fopen(prometheus_output_path, "r");
- EXPECT_NE(nullptr, fp);
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- if(n_line == 0)
- {
- EXPECT_STREQ(prometheus_output_result, line);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
+ check_file_output_content(5);
+ check_prometheus_output_content(55, 9021);
fieldstat_global_disable_prometheus_endpoint();
fieldstat_instance_free(instance);
@@ -538,180 +365,39 @@ TEST(FeildStatOutput, OutputFileAndPrometheus)
TEST(FeildStatOutput, OutputFileAndPrometheusAndLineProtocol)
{
- int ret = 0;
- int n_loops = 0;
+ int ret = 0, table_id = -1;
struct fieldstat_instance * instance = NULL;
- int table_id = -1;
- int output_metric_ids[54] = {0};
- FILE *fp;
- char line[2048] = {0};
-
- const char *prometheus_output_path = "/tmp/prometheus.txt";
- const char *file_output_path = "/tmp/fieldstat.txt";
- const char *telegraf_output_file = "/tmp/metrics.out";
- const char *prometheus_output_result = "tsg_statistic_new_conn_num{app_name=\"tsg_statistic\",table_name=\"network_activity\",line_name=\"TRAFFIC\"} 1000\n";
- const char *compared_table_name = "table name: network_activity\n";
- const char *compared_table_column = " 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"
- " allow_out_bytes allow_in_packets allow_out_packets deny_conn_num"
- " deny_in_bytes deny_out_bytes deny_in_packets deny_out_packets"
- " monitor_conn_num monitor_in_bytes monitor_out_bytes monitor_in_packets"
- " monitor_out_packets intercept_conn_num intercept_in_bytes intercept_out_bytes"
- " intercept_in_packet intercept_out_packe ipv4_in_packets ipv4_in_bytes"
- " ipv4_out_packetsipv ipv6_in_packets ipv6_in_bytes ipv6_out_packets"
- " ipv6_out_bytes tcp_conn_num tcp_in_packets tcp_in_bytes"
- " tcp_out_packets tcp_out_bytes udp_conn_num 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 *compared_table_row_value = "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"
- " 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 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 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 0.00e+00\n";
-
-
-
-
- const char *table_column_name[] = {"new_conn_num", "established_conn_num", "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", "allow_out_bytes", "allow_in_packets", "allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes", "deny_in_packets",
- "deny_out_packets", "monitor_conn_num", "monitor_in_bytes", "monitor_out_bytes", "monitor_in_packets", "monitor_out_packets", "intercept_conn_num",
- "intercept_in_bytes", "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets", "ipv4_in_packets", "ipv4_in_bytes", "ipv4_out_packets"
- "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes", "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
- "tcp_out_packets", "tcp_out_bytes", "udp_conn_num", "udp_in_packets", "udp_in_bytes", "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes",
- "pinning_num", "maybe_pinning_num", "not_pinning_num"};
-
- cJSON *cjson_metric = NULL;
- cJSON *cjson_tags = NULL;
- const char *compare = "{\"fields\":{\"alert_bytes\":0,\"allow_conn_num\":0,\"allow_in_bytes\":0,\"allow_in_packets\":0,\"allow_out_bytes\":0,"\
- "\"allow_out_packets\":0,\"block_bytes\":0,\"close_conn_num\":0,\"default_conn_num\":0,\"default_in_bytes\":0,"\
- "\"default_in_packets\":0,\"default_out_bytes\":0,\"default_out_packets\":0,\"deny_conn_num\":0,\"deny_in_bytes\":0,"\
- "\"deny_in_packets\":0,\"deny_out_bytes\":0,\"deny_out_packets\":0,\"established_conn_num\":0,\"intercept_conn_num\":0,"\
- "\"intercept_in_bytes\":0,\"intercept_in_packets\":0,\"intercept_out_bytes\":0,\"intercept_out_packets\":0,"\
- "\"ipv4_in_bytes\":0,\"ipv4_in_packets\":0,\"ipv4_out_packetsipv4_out_bytes\":0,\"ipv6_in_bytes\":0,\"ipv6_in_packets\":0,"\
- "\"ipv6_out_bytes\":0,\"ipv6_out_packets\":0,\"maybe_pinning_num\":0,\"monitor_conn_num\":0,\"monitor_in_bytes\":0,"\
- "\"monitor_in_packets\":0,\"monitor_out_bytes\":0,\"monitor_out_packets\":0,\"new_conn_num\":1000,\"not_pinning_num\":0,"\
- "\"pinning_num\":0,\"tcp_conn_num\":0,\"tcp_in_bytes\":0,\"tcp_in_packets\":0,\"tcp_out_bytes\":0,\"tcp_out_packets\":0,"\
- "\"total_in_bytes\":0,\"total_in_packets\":0,\"total_out_bytes\":0,\"total_out_packets\":0,\"udp_conn_num\":0,"\
- "\"udp_in_bytes\":0,\"udp_in_packets\":0,\"udp_out_bytes\":0,\"udp_out_packets\":0},\"name\":\"TRAFFIC\","\
- "\"tags\":{\"app_name\":\"tsg_statistic\",\"table_name\":\"network_activity\"}}";
- char *cjson_metric_str = NULL;
-
- enum field_type table_column_type[54] = {FIELD_TYPE_COUNTER};
+ int output_metric_ids[55] = {0};
instance = fieldstat_instance_new("tsg_statistic");
EXPECT_STREQ("tsg_statistic", instance->name);
- table_id = fieldstat_register_table(instance, "network_activity", table_column_name, table_column_type, sizeof(table_column_name)/sizeof(table_column_name[0]));
+ table_id = fieldstat_register_table(instance, "network_activity",
+ 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, "TRAFFIC", NULL, 0, output_metric_ids);
EXPECT_EQ(0, ret);
ret = fieldstat_set_local_output(instance, file_output_path, "default");
EXPECT_EQ(0, ret);
+ ret = fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700);
+ EXPECT_EQ(0, ret);
ret = fieldstat_global_enable_prometheus_endpoint(9022, NULL);
EXPECT_EQ(0, ret);
ret = fieldstat_enable_prometheus_output(instance);
EXPECT_EQ(0, ret);
- EXPECT_EQ(9, instance->output_type);
- ret = system("cat /dev/null > /tmp/prometheus.txt");
- //ret = system("cat /dev/null > /tmp/fieldstat.txt");
+ EXPECT_EQ(13, instance->output_type);
+ system("cat /dev/null > /tmp/prometheus.txt");
+ system("cat /dev/null > /tmp/fieldstat.txt");
+ system("cat /dev/null > /tmp/lineprotocol.txt");
fieldstat_instance_start(instance);
sleep(1);
fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
sleep(2);
- system("curl -s http://127.0.0.1:9022/metrics -o /tmp/prometheus.txt");
- int n_line = 0;
-
- fp = fopen("/tmp/fieldstat.txt", "r");
- EXPECT_NE(nullptr, fp);
- n_line = 0;
- n_loops = 5;
-
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- if(n_line == 1)
- {
- EXPECT_STREQ(compared_table_name, line);
- }
- if(n_line == 2)
- {
- EXPECT_STREQ(compared_table_column, line);
- }
- if(n_line == 3)
- {
- EXPECT_STREQ(compared_table_row_value, line);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
- n_loops = 54;
- n_line = 0;
- fp = fopen(prometheus_output_path, "r");
- EXPECT_NE(nullptr, fp);
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- if(n_line == 0)
- {
- EXPECT_STREQ(prometheus_output_result, line);
- }
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
-
- n_loops = 1;
- n_line = 0;
- fp = fopen(telegraf_output_file, "r");
- EXPECT_NE(nullptr, fp);
-
- while(!feof(fp))
- {
- if(NULL == fgets(line, sizeof(line), fp))
- {
- continue;
- }
- cjson_metric = cJSON_Parse(line);
- EXPECT_NE(nullptr, cjson_metric);
- cJSON_DeleteItemFromObject(cjson_metric, "timestamp");
-
- cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags");
- EXPECT_NE(nullptr, cjson_tags);
- cJSON_DeleteItemFromObject(cjson_tags, "host");
- cjson_metric_str = cJSON_PrintUnformatted(cjson_metric);
- EXPECT_NE(nullptr, cjson_metric_str);
- if(cjson_metric_str)
- {
- EXPECT_STREQ(compare, cjson_metric_str);
- free(cjson_metric_str);
- cjson_metric_str = NULL;
- }
- cJSON_Delete(cjson_metric);
- n_line++;
- }
- fclose(fp);
- EXPECT_EQ(n_line, n_loops);
+ check_file_output_content(5);
+ check_lineprotocol_output_content(1);
+ check_prometheus_output_content(55, 9022);
fieldstat_global_disable_prometheus_endpoint();
fieldstat_instance_free(instance);
@@ -1670,6 +1356,63 @@ TEST(FeildStatOutput, SummaryOutputPrometheusChange)
fieldstat_instance_free(instance);
}
+TEST(FeildStatOutput, OutputMetricsNameWithPoint)
+{
+ int ret = 0, table_id = -1;
+ struct fieldstat_instance * instance = NULL;
+ int output_metric_ids[55] = {0};
+
+ const char *table_column_name_with_points[] = {
+ "new.conn.num", "established.conn_num", "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", "allow_out_bytes",
+ "allow_in_packets","allow_out_packets", "deny_conn_num", "deny_in_bytes", "deny_out_bytes",
+ "deny_in_packets", "deny_out_packets", "monitor_conn_num", "monitor_in_bytes","monitor_out_bytes",
+ "monitor_in_packets", "monitor_out_packets", "intercept_conn_num","intercept_in_bytes",
+ "intercept_out_bytes", "intercept_in_packets", "intercept_out_packets","ipv4_in_packets",
+ "ipv4_in_bytes","ipv4_out_packets", "ipv4_out_bytes", "ipv6_in_packets", "ipv6_in_bytes",
+ "ipv6_out_packets", "ipv6_out_bytes", "tcp_conn_num", "tcp_in_packets", "tcp_in_bytes",
+ "tcp_out_packets", "tcp_out_bytes", "udp_conn_num","udp_in_packets", "udp_in_bytes",
+ "udp_out_packets", "udp_out_bytes", "alert_bytes", "block_bytes","pinning_num", "maybe_pinning_num",
+ "not_pinning_num"
+ };
+
+ instance = fieldstat_instance_new("tsg_statistic");
+ EXPECT_STREQ("tsg_statistic", instance->name);
+
+ table_id = fieldstat_register_table(instance, "network.activity",
+ table_column_name_with_points, table_column_type,
+ sizeof(table_column_name_with_points)/sizeof(table_column_name_with_points[0]));
+ EXPECT_EQ(0, table_id);
+ ret = fieldstat_register_table_row(instance, table_id, "TRAFFIC", NULL, 0, output_metric_ids);
+ EXPECT_EQ(0, ret);
+ ret = fieldstat_set_local_output(instance, file_output_path, "default");
+ EXPECT_EQ(0, ret);
+ ret = fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700);
+ EXPECT_EQ(0, ret);
+ ret = fieldstat_global_enable_prometheus_endpoint(9028, NULL);
+ EXPECT_EQ(0, ret);
+ ret = fieldstat_enable_prometheus_output(instance);
+ EXPECT_EQ(0, ret);
+
+ EXPECT_EQ(13, instance->output_type);
+ ret = system("cat /dev/null > /tmp/prometheus.txt");
+ ret = system("cat /dev/null > /tmp/metrics.out");
+ ret = system("cat /dev/null > /tmp/fieldstat.txt");
+ fieldstat_instance_start(instance);
+ sleep(1);
+ fieldstat_value_incrby(instance, output_metric_ids[0], 1000);
+ sleep(2);
+ check_file_output_content(5);
+ check_lineprotocol_output_content(1);
+ check_prometheus_output_content(55, 9028);
+
+ fieldstat_global_disable_prometheus_endpoint();
+ fieldstat_instance_free(instance);
+
+}
+
+
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);