@cryptotaxi247 / netdata-1 / commits / 592adc22b

make sure charts are aligned to their update_every, so that data collection, db and presentation are all synchronized

Costa Tsaousis (ktsaou) committed Nov 14, 2016 at 01:33 UTC 592adc22bc84f33e6dd8dba613015b315c0c901a
1 file changed +18
src/rrd.c
+18
@@ -525,6 +525,12 @@ RRDSET *rrdset_create(const char *type, const char *id, const char *name, const
525 error("File %s is too old. Clearing it.", fullfilename);
526 memset(st, 0, size);
527 }
528 +
529 + // make sure the database is aligned
530 + if(st->last_updated.tv_sec % update_every) {
531 + st->last_updated.tv_sec -= st->last_updated.tv_sec % update_every;
532 + st->last_updated.tv_usec = 0;
533 + }
534 }
535
536 if(st) {
@@ -1094,6 +1100,11 @@ unsigned long long rrdset_done(RRDSET *st)
1100 // it is the first entry
1101 // set the last_collected_time to now
1102 gettimeofday(&st->last_collected_time, NULL);
1103 +
1104 + // align it to update_every
1105 + st->last_collected_time.tv_sec -= st->last_collected_time.tv_sec % st->update_every;
1106 + st->last_collected_time.tv_usec = 0;
1107 +
1108 last_collect_ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - update_every_ut;
1109
1110 // the first entry should not be stored
@@ -1136,6 +1147,10 @@ unsigned long long rrdset_done(RRDSET *st)
1147
1148 gettimeofday(&st->last_collected_time, NULL);
1149
1150 + // align it to update_every
1151 + st->last_collected_time.tv_sec -= st->last_collected_time.tv_sec % st->update_every;
1152 + st->last_collected_time.tv_usec = 0;
1153 +
1154 unsigned long long ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - st->usec_since_last_update;
1155 st->last_updated.tv_sec = (time_t) (ut / 1000000ULL);
1156 st->last_updated.tv_usec = (suseconds_t) (ut % 1000000ULL);
@@ -1349,6 +1364,9 @@ unsigned long long rrdset_done(RRDSET *st)
1364 if(unlikely(now_collect_ut < next_store_ut)) {
1365 // this is collected in the same interpolation point
1366 if(unlikely(st->debug)) debug(D_RRD_STATS, "%s: THIS IS IN THE SAME INTERPOLATION POINT", st->name);
1367 +#ifdef NETDATA_INTERNAL_CHECKS
1368 + info("%s is collected in the same interpolation point: short by %llu microseconds", st->name, next_store_ut - now_collect_ut);
1369 +#endif
1370 }
1371
1372 unsigned long long first_ut = last_stored_ut;