summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfumingwei <[email protected]>2023-03-01 09:56:52 +0800
committerfumingwei <[email protected]>2023-03-01 09:56:52 +0800
commit65d87a9d6eca81a80520246582c60b17d66ad59b (patch)
treef2c49c1b70b022b75a8ea15870882dcd1cd959a5
parent0c526d87110e6e83c19a461ca4d06a2f73c20767 (diff)
feature:新增table line protocol输出
-rw-r--r--src/fieldstat.cpp98
-rw-r--r--test/fs2_test.cpp31
2 files changed, 116 insertions, 13 deletions
diff --git a/src/fieldstat.cpp b/src/fieldstat.cpp
index 4d5fb52..5133dea 100644
--- a/src/fieldstat.cpp
+++ b/src/fieldstat.cpp
@@ -409,7 +409,7 @@ void append_line_protocol_line(struct fieldstat_instance *instance, const char*
{
flush_line_protocol_metric(instance);
}
- //printf("Line_protocol metric: %s%s %s\n",measurement,tag_set,field_set);
+ printf("Line_protocol metric: %s%s %s\n",measurement,tag_set,field_set);
instance->line_protocol_send_buff_offset += snprintf(instance->line_protocol_send_buff + instance->line_protocol_send_buff_offset,
sizeof(instance->line_protocol_send_buff) - instance->line_protocol_send_buff_offset,
"%s%s %s\n",
@@ -503,11 +503,90 @@ static int output_file_format_default_table(struct fieldstat_instance *instance)
}
*/
+static int output_line_protocol_tag_set_buf(metric_t *metric, char *tag_set_buff, unsigned int size)
+{
+ int i = 0;
+ char *tag_set_buff_append = tag_set_buff;
+ for(i = 0; i < (int)metric->n_tag; i++)
+ {
+ tag_set_buff_append += snprintf(tag_set_buff_append, size - (tag_set_buff_append - tag_set_buff), ",%s=%s", metric->tag_key[i],metric->tag_value[i]);
+ }
+ return tag_set_buff_append - tag_set_buff;
+}
+
+
+
+static void output_line_protocol_table(struct fieldstat_instance *instance)
+{
+ int i = 0, j = 0;
+ metric_t *metric = NULL;
+ long long value = 0;
+ //double ratio = 0.0;
+ size_t table_column_size = 0;
+
+ int table_metric_number[NUM_MAX_TABLE];
+ memset(table_metric_number,0, sizeof(table_metric_number));
+ int metric_id = 0;
+ char field_set_buff[UDP_PAYLOAD_SIZE];
+ char tag_set_buff[UDP_PAYLOAD_SIZE];
+
+ memset(field_set_buff, 0, sizeof(field_set_buff));
+ memset(tag_set_buff, 0, sizeof(tag_set_buff));
+ char *tag_set_buff_append = tag_set_buff;
+ char *field_set_buff_append = field_set_buff;
+
+
+ for(i = 0; i < instance->table_num; i++)
+ {
+ table_column_size = instance->table_metrics[i].column_size;
+
+ for(j = 0; j < instance->per_table_metric_number[i]; j++)
+ {
+ metric_id = instance->index_table[i][j];
+ metric = instance->metric[metric_id];
+
+ switch(metric->field_type)
+ {
+ case FIELD_TYPE_GAUGE:
+ value = get_metric_unit_val(metric, FS_CALC_CURRENT, 1);
+ break;
+ case FIELD_TYPE_COUNTER:
+ value = get_metric_unit_val(metric, FS_CALC_SPEED, 1);
+ break;
+ default:
+ break;
+ }
+
+ field_set_buff_append += snprintf(field_set_buff_append, sizeof(field_set_buff) - (field_set_buff - field_set_buff), "%s=%lld,", metric->table_column_name, value);
+
+ if((j + 1) % table_column_size == 0) //per line edge
+ {
+ tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ output_line_protocol_tag_set_buf(metric, tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff));
+ /*
+ for(k = 0; k < (int)metric->n_tag; k++)
+ {
+ tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",%s=%s", metric->tag_key[i],metric->tag_value[i]);
+ }
+ */
+
+ if(field_set_buff_append - field_set_buff > 0)
+ {
+ field_set_buff[field_set_buff_append - field_set_buff - 1] = '\0';
+ }
+ append_line_protocol_line(instance, metric->field_name, tag_set_buff, field_set_buff);
+ tag_set_buff_append = tag_set_buff;
+ field_set_buff_append = field_set_buff;
+ }
+ }
+ }
+}
+
int line_protocol_output(struct fieldstat_instance *instance)
{
metric_t *metric = NULL;
long long value=0;
- int i=0,j=0;
+ int i=0;
char field_set_buff[UDP_PAYLOAD_SIZE];
char tag_set_buff[UDP_PAYLOAD_SIZE];
@@ -536,13 +615,16 @@ int line_protocol_output(struct fieldstat_instance *instance)
{
snprintf(field_set_buff, UDP_PAYLOAD_SIZE, "%s=%lld", metric->field_name, value);
tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ /*
for(j = 0; j < (int)metric->n_tag; j++)
{
tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",%s=%s", metric->tag_key[i],metric->tag_value[i]);
}
+ */
+ output_line_protocol_tag_set_buf(metric, tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff));
append_line_protocol_line(instance, metric->field_name, tag_set_buff, field_set_buff);
tag_set_buff_append = tag_set_buff;
-
+
}
break;
case FIELD_TYPE_COUNTER:
@@ -551,10 +633,13 @@ int line_protocol_output(struct fieldstat_instance *instance)
{
snprintf(field_set_buff, UDP_PAYLOAD_SIZE, "%s=%lld", metric->field_name, value);
tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ /*
for(j = 0; j < (int)metric->n_tag; j++)
{
tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",%s=%s", metric->tag_key[i],metric->tag_value[i]);
}
+ */
+ output_line_protocol_tag_set_buf(metric, tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff));
append_line_protocol_line(instance, metric->field_name, tag_set_buff, field_set_buff);
tag_set_buff_append = tag_set_buff;
}
@@ -564,14 +649,13 @@ int line_protocol_output(struct fieldstat_instance *instance)
}
}
+
+ output_line_protocol_table(instance);
flush_line_protocol_metric(instance);
+
return 0;
}
-
-
-
-
static int print_buf_tag_append_position(metric_t *metric, char *print_buf_tags, unsigned int size)
{
int i = 0;
diff --git a/test/fs2_test.cpp b/test/fs2_test.cpp
index f312c34..9db75f3 100644
--- a/test/fs2_test.cpp
+++ b/test/fs2_test.cpp
@@ -23,7 +23,26 @@ int main(int argc, char *argv[])
int i = 0;
struct fieldstat_instance * test_instance = NULL;
const char *tag_key[] = {"A","B","C"};
- const char *tag_value[] = {"a1","b1","c1","b1","f1"};
+ const char *tag_value[] = {"a","b","c"};
+
+ const char *tag_key0[] = {"A0","B0","C0"};
+ const char *tag_value0[] = {"a0","b0","c0"};
+
+ const char *tag_key1[] = {"A1","B1","C1"};
+ const char *tag_value1[] = {"a1","b1","c1"};
+
+ const char *tag_key2[] = {"A2","B2","C2"};
+ const char *tag_value2[] = {"a2","b2","c2"};
+
+ const char *tag_key3[] = {"A3","B3","C3"};
+ const char *tag_value3[] = {"a3","b3","c3"};
+
+ const char *tag_key4[] = {"A4","B4","C4"};
+ const char *tag_value4[] = {"a4","b4","c4"};
+
+ const char *tag_key5[] = {"A5","B5","C5"};
+ const char *tag_value5[] = {"a5","b5","c5"};
+
enum field_type table_type[] = {FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER};
const char *field_list[] = {"column_0", "colunm_1", "column_2"};
const char *field_list_0[] = {"c0", "c1", "c2"};
@@ -78,13 +97,13 @@ int main(int argc, char *argv[])
printf("Failed to register metric!\n");
}
- ret = fieldstat_register(test_instance, FIELD_TYPE_COUNTER, "metric_1", tag_key, tag_value, sizeof(tag_key)/sizeof(tag_key[0]));
+ ret = fieldstat_register(test_instance, FIELD_TYPE_COUNTER, "metric_1", tag_key0, tag_value0, sizeof(tag_key0)/sizeof(tag_key0[0]));
if(ret == -1)
{
printf("Failed to register metric!\n");
}
- ret = fieldstat_register(test_instance, FIELD_TYPE_GAUGE, "gauge_0",tag_key, tag_value, sizeof(tag_key)/sizeof(tag_key[0]));
+ ret = fieldstat_register(test_instance, FIELD_TYPE_GAUGE, "gauge_0",tag_key1, tag_value1, sizeof(tag_key1)/sizeof(tag_key1[0]));
if(ret == -1)
{
printf("Failed to register metric gauge_0\n");
@@ -106,13 +125,13 @@ int main(int argc, char *argv[])
printf("Failed to register metric table\n");
}
- id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_0", tag_key, tag_value, sizeof(tag_key)/sizeof(tag_key[0]));
+ id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_0", tag_key2, tag_value2, sizeof(tag_key2)/sizeof(tag_key2[0]));
for(i = 0; i < id_list.num; i++)
{
printf("%d\n", id_list.id[i]);
}
- id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_2", tag_key, tag_value, sizeof(tag_key)/sizeof(tag_key[0]));
+ id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_2", tag_key3, tag_value3, sizeof(tag_key3)/sizeof(tag_key3[0]));
for(i = 0; i < id_list.num; i++)
{
printf("%d\n", id_list.id[i]);
@@ -124,7 +143,7 @@ int main(int argc, char *argv[])
printf("Failed to register metric table list_0\n");
}
- id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_0", tag_key, tag_value, sizeof(tag_key)/sizeof(tag_key[0]));
+ id_list = fieldstat_register_table_metrics(test_instance, table_id, "line_0", tag_key4, tag_value4, sizeof(tag_key4)/sizeof(tag_key4[0]));
printf("id_list.num:%d\n",id_list.num);
for(i = 0; i < id_list.num; i++)
{