remove user-specified zero dimensions with nonzero option
remove dimensions that have been specified by the user if all values are zeros and nonzero option was also set
Stefan Forstenlechner committed
Jan 26, 2017 at 13:12 UTC
048f7f7e4ad518adad428302da70fdc5dedde273
1 file changed
+5
-4
src/rrd2json.c
+5
-4
@@ -541,7 +541,7 @@ static void rrdr_dump(RRDR *r)
541
}
542
*/
543
544
-void rrdr_disable_not_selected_dimensions(RRDR *r, const char *dims)
544
+void rrdr_disable_not_selected_dimensions(RRDR *r, uint32_t options, const char *dims)
545
{
546
char b[strlen(dims) + 1];
547
char *o = b, *tok;
@@ -567,7 +567,8 @@ void rrdr_disable_not_selected_dimensions(RRDR *r, const char *dims)
567
// since the user needs this dimension
568
// make it appear as NONZERO, to return it
569
// even if the dimension has only zeros
570
- r->od[c] |= RRDR_NONZERO;
570
+ // unless option non_zero is set
571
+ if (!(options & RRDR_OPTION_NONZERO)) r->od[c] |= RRDR_NONZERO;
572
}
573
}
574
}
@@ -1778,7 +1779,7 @@ int rrd2value(RRDSET *st, BUFFER *wb, calculated_number *n, const char *dimensio
1779
options = rrdr_check_options(r, options, dimensions);
1780
1781
if(dimensions)
1781
- rrdr_disable_not_selected_dimensions(r, dimensions);
1782
+ rrdr_disable_not_selected_dimensions(r, options, dimensions);
1783
1784
if(db_after) *db_after = r->after;
1785
if(db_before) *db_before = r->before;
@@ -1806,7 +1807,7 @@ int rrd2format(RRDSET *st, BUFFER *wb, BUFFER *dimensions, uint32_t format, long
1807
options = rrdr_check_options(r, options, (dimensions)?buffer_tostring(dimensions):NULL);
1808
1809
if(dimensions)
1809
- rrdr_disable_not_selected_dimensions(r, buffer_tostring(dimensions));
1810
+ rrdr_disable_not_selected_dimensions(r, options, buffer_tostring(dimensions));
1811
1812
if(latest_timestamp && rrdr_rows(r) > 0)
1813
*latest_timestamp = r->before;