diff options
| author | fumingwei <[email protected]> | 2023-03-01 09:56:52 +0800 |
|---|---|---|
| committer | fumingwei <[email protected]> | 2023-03-01 09:56:52 +0800 |
| commit | 65d87a9d6eca81a80520246582c60b17d66ad59b (patch) | |
| tree | f2c49c1b70b022b75a8ea15870882dcd1cd959a5 | |
| parent | 0c526d87110e6e83c19a461ca4d06a2f73c20767 (diff) | |
feature:新增table line protocol输出
| -rw-r--r-- | src/fieldstat.cpp | 98 | ||||
| -rw-r--r-- | test/fs2_test.cpp | 31 |
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++) { |
