summaryrefslogtreecommitdiff
path: root/src/line_protocol_output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/line_protocol_output.cpp')
-rw-r--r--src/line_protocol_output.cpp64
1 files changed, 44 insertions, 20 deletions
diff --git a/src/line_protocol_output.cpp b/src/line_protocol_output.cpp
index 5d820c0..f8b3108 100644
--- a/src/line_protocol_output.cpp
+++ b/src/line_protocol_output.cpp
@@ -56,7 +56,7 @@ static int output_line_protocol_tag_set_buf(char *tag_key[], char *tag_value[],
}
-static void output_line_protocol_table(struct fieldstat_instance *instance)
+static void output_line_protocol_table(struct fieldstat_instance *instance,int tables_line_cnt[], int current_table_cnt)
{
int i = 0, j = 0, k = 0;
metric_t *metric = NULL;
@@ -72,23 +72,21 @@ static void output_line_protocol_table(struct fieldstat_instance *instance)
struct table_metric *table = NULL;
struct table_line *line = NULL;
+ int line_value_is_not_zero = 0;
- for(i = 0; i < instance->table_num; i++)
+ for(i = 0; i < current_table_cnt; i++)
{
table = instance->table_metrics[i];
- for(j = 0; j < table->line_cnt; j++)
+ for(j = 0; j < tables_line_cnt[i]; j++)
{
line = read_table_line(table, j);
- tag_pos += snprintf(tag_pos,
- sizeof(tag_set_buff) - (tag_pos - tag_set_buff),
- ",app_name=%s,table_name=%s",
- instance->name,
- table->name
- );
-
- tag_pos += output_line_protocol_tag_set_buf(line->tag_key, line->tag_value, line->n_tag, tag_pos,
- sizeof(tag_set_buff) - (tag_pos - tag_set_buff));
-
+ if(line == NULL)
+ {
+ continue;
+ }
+ line_value_is_not_zero = 0;
+ tag_pos = tag_set_buff;
+ field_pos = field_set_buff;
for(k = 0; k < table->column_cnt; k ++)
{
metric = get_metric(instance, line->metric_id_belong_to_line[k]);
@@ -96,7 +94,10 @@ static void output_line_protocol_table(struct fieldstat_instance *instance)
value = metric->field_type == FIELD_TYPE_GAUGE ?
get_metric_unit_val(metric, FS_CALC_CURRENT, 1):
get_metric_unit_val(metric, FS_CALC_SPEED, 1);
-
+ if(value != 0)
+ {
+ line_value_is_not_zero = 1;
+ }
field_pos += snprintf(field_pos,
sizeof(field_set_buff) - (field_set_buff - field_set_buff),
"%s=%lld,",
@@ -105,15 +106,28 @@ static void output_line_protocol_table(struct fieldstat_instance *instance)
);
}
+ if(line_value_is_not_zero == 0)
+ {
+ continue;
+ }
+
+ tag_pos += snprintf(tag_pos,
+ sizeof(tag_set_buff) - (tag_pos - tag_set_buff),
+ ",app_name=%s,table_name=%s",
+ instance->name,
+ table->name
+ );
+
+ tag_pos += output_line_protocol_tag_set_buf(line->tag_key, line->tag_value, line->n_tag, tag_pos,
+ sizeof(tag_set_buff) - (tag_pos - tag_set_buff));
+
+
if(field_pos - field_set_buff > 0)
{
*(field_pos - 1) = '\0';
}
// measurement,tag_set field_set
append_line_protocol_line(instance, metric->field_name, tag_set_buff, field_set_buff);
- tag_pos = tag_set_buff;
- field_pos = field_set_buff;
-
}
}
@@ -130,10 +144,20 @@ int line_protocol_output(struct fieldstat_instance *instance)
memset(field_set_buff, 0, sizeof(field_set_buff));
memset(tag_set_buff, 0, sizeof(tag_set_buff));
char *tag_pos = tag_set_buff;
-
- for(i = 0; i < instance->metric_cnt; i++)
+ //print current time instance start
+ int tables_line_cnt[TABLE_MAX_NUM];
+ int current_table_cnt = instance->table_num;
+ get_current_table_line_cnt(instance, current_table_cnt, tables_line_cnt);
+ int current_metric_cnt = instance->metric_cnt;
+ //print current time instance end
+
+ for(i = 0; i < current_metric_cnt; i++)
{
metric = get_metric(instance, i);
+ if(metric == NULL)
+ {
+ continue;
+ }
if(metric->is_ratio == 1)
{
continue;
@@ -183,7 +207,7 @@ int line_protocol_output(struct fieldstat_instance *instance)
}
}
- output_line_protocol_table(instance);
+ output_line_protocol_table(instance,tables_line_cnt,current_table_cnt);
flush_line_protocol_metric(instance);
return 0;