@cryptotaxi247 / netdata-1 / commits / 1b5b5ed55

align before and after parameters to update_every; so that e.g. after=-1 will also return a point when update_every > 1; fixes #1241

Costa Tsaousis (ktsaou) committed Nov 14, 2016 at 01:35 UTC 1b5b5ed55110520c99334f575eedea329d398b49
2 files changed +19 -4
src/rrd2json.c
+17 -4
@@ -1209,19 +1209,32 @@ RRDR *rrd2rrdr(RRDSET *st, long points, long long after, long long before, int g
1209 time_t last_entry_t = rrdset_last_entry_t(st);
1210
1211 if(before == 0 && after == 0) {
1212 + // dump the all the data
1213 before = last_entry_t;
1214 after = first_entry_t;
1215 absolute_period_requested = 0;
1216 }
1217
1217 - // allow relative for before and after (smaller than 3 years)
1218 - if(((before < 0)?-before:before) <= (3 * 365 * 86400)) {
1219 - before = last_entry_t + before;
1218 + // allow relative for before (smaller than API_RELATIVE_TIME_MAX)
1219 + if(((before < 0)?-before:before) <= API_RELATIVE_TIME_MAX) {
1220 + if(abs(before) % st->update_every) {
1221 + // make sure it is multiple of st->update_every
1222 + if(before < 0) before = before - st->update_every - before % st->update_every;
1223 + else before = before + st->update_every - before % st->update_every;
1224 + }
1225 + if(before > 0) before = first_entry_t + before;
1226 + else before = last_entry_t + before;
1227 absolute_period_requested = 0;
1228 }
1229
1223 - if(((after < 0)?-after:after) <= (3 * 365 * 86400)) {
1230 + // allow relative for after (smaller than API_RELATIVE_TIME_MAX)
1231 + if(((after < 0)?-after:after) <= API_RELATIVE_TIME_MAX) {
1232 if(after == 0) after = -st->update_every;
1233 + if(abs(after) % st->update_every) {
1234 + // make sure it is multiple of st->update_every
1235 + if(after < 0) after = after - st->update_every - after % st->update_every;
1236 + else after = after + st->update_every - after % st->update_every;
1237 + }
1238 after = before + after;
1239 absolute_period_requested = 0;
1240 }
src/rrd2json.h
+2
@@ -4,6 +4,8 @@
4 #define HOSTNAME_MAX 1024
5 extern char *hostname;
6
7 +#define API_RELATIVE_TIME_MAX (3 * 365 * 86400)
8 +
9 // type of JSON generations
10 #define DATASOURCE_INVALID -1
11 #define DATASOURCE_JSON 0