]> arthur.barton.de Git - netdata.git/blobdiff - src/rrd.c
Merge pull request #643 from paulfantom/master
[netdata.git] / src / rrd.c
index 208d741c9a4d7a11b460a811b01a4c3c77d5ac43..dd7698ab8d443cbfd526e11f2512a45e20e15e33 100644 (file)
--- a/src/rrd.c
+++ b/src/rrd.c
@@ -277,7 +277,12 @@ char *rrdset_cache_dir(const char *id)
        char *ret = NULL;
 
        static char *cache_dir = NULL;
-       if(!cache_dir) cache_dir = config_get("global", "cache directory", CACHE_DIR);
+       if(!cache_dir) {
+               cache_dir = config_get("global", "cache directory", CACHE_DIR);
+               int r = mkdir(cache_dir, 0755);
+               if(r != 0 && errno != EEXIST)
+                       error("Cannot create directory '%s'", cache_dir);
+       }
 
        char b[FILENAME_MAX + 1];
        char n[FILENAME_MAX + 1];
@@ -855,7 +860,7 @@ unsigned long long rrdset_done(RRDSET *st)
                // calculate the proper last_collected_time, using usec_since_last_update
                unsigned long long ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec + st->usec_since_last_update;
                st->last_collected_time.tv_sec = (time_t) (ut / 1000000ULL);
-               st->last_collected_time.tv_usec = (useconds_t) (ut % 1000000ULL);
+               st->last_collected_time.tv_usec = (suseconds_t) (ut % 1000000ULL);
        }
 
        // if this set has not been updated in the past
@@ -865,7 +870,7 @@ unsigned long long rrdset_done(RRDSET *st)
                // set a fake last_updated, in the past using usec_since_last_update
                unsigned long long ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - st->usec_since_last_update;
                st->last_updated.tv_sec = (time_t) (ut / 1000000ULL);
-               st->last_updated.tv_usec = (useconds_t) (ut % 1000000ULL);
+               st->last_updated.tv_usec = (suseconds_t) (ut % 1000000ULL);
 
                // the first entry should not be stored
                store_this_entry = 0;
@@ -885,7 +890,7 @@ unsigned long long rrdset_done(RRDSET *st)
 
                unsigned long long ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - st->usec_since_last_update;
                st->last_updated.tv_sec = (time_t) (ut / 1000000ULL);
-               st->last_updated.tv_usec = (useconds_t) (ut % 1000000ULL);
+               st->last_updated.tv_usec = (suseconds_t) (ut % 1000000ULL);
 
                // the first entry should not be stored
                store_this_entry = 0;
@@ -1242,6 +1247,7 @@ unsigned long long rrdset_done(RRDSET *st)
        if(likely(stored_entries || !store_this_entry)) {
                st->last_updated.tv_sec = st->last_collected_time.tv_sec;
                st->last_updated.tv_usec = st->last_collected_time.tv_usec;
+               st->last_collected_total  = st->collected_total;
        }
 
        for( rd = st->dimensions; likely(rd) ; rd = rd->next ) {
@@ -1271,7 +1277,6 @@ unsigned long long rrdset_done(RRDSET *st)
                        , rd->calculated_value
                        );
        }
-       st->last_collected_total  = st->collected_total;
 
        // ALL DONE ABOUT THE DATA UPDATE
        // --------------------------------------------------------------------