]> pilppa.org Git - lib1wire.git/blobdiff - src/DeviceData.cc
cleanups, renamed get_*_values functions to get_*_data
[lib1wire.git] / src / DeviceData.cc
index 259d821ae38310cebc583baeab048c4e637af82c..59327ba68c0a1abdd6c561ce6b94ac31c60b467d 100644 (file)
@@ -39,10 +39,10 @@ DeviceData::~DeviceData() {
 
 Data *DeviceData::find_oldest_data(vector<string> year_vector) {
        unsigned int    ii;
-       string          year_dir;
-       string          month_dir;
-       vector<string>  month_vector;
-       vector<string>  data_vector;
+       string          year_dr;
+       string          mon_dr;
+       vector<string>  mon_vcr;
+       vector<string>  d_vcr;
        string          f_name;
        W1Store         *store;
        Data            *ret_val;
@@ -50,17 +50,17 @@ Data *DeviceData::find_oldest_data(vector<string> year_vector) {
        ret_val = NULL;
        if (year_vector.size() > 0) {
                // dirs are alphabetically sorted
-               year_dir        = year_vector.at(0);
-               year_dir        = W1Util::concat_paths(device_dir, year_dir);
-               month_vector    = W1Util::get_subdirectories(year_dir);
-               for (ii = 0; ii < month_vector.size(); ii++) {
-                       month_dir       = month_vector.at(ii);
-                       month_dir       = W1Util::concat_paths(year_dir, month_dir);
+               year_dr = year_vector.at(0);
+               year_dr = W1Util::concat_paths(device_dir, year_dr);
+               mon_vcr = W1Util::get_subdirectories(year_dr);
+               for (ii = 0; ii < mon_vcr.size(); ii++) {
+                       mon_dr  = mon_vcr.at(ii);
+                       mon_dr  = W1Util::concat_paths(year_dr, mon_dr);
                        // scan data files from month dir
-                       data_vector     = W1Util::get_data_files(month_dir);
-                       if (data_vector.size() > 0) {
-                               f_name  = data_vector.at(0);
-                               f_name  = W1Util::concat_paths(month_dir, f_name);
+                       d_vcr   = W1Util::get_data_files(mon_dr);
+                       if (d_vcr.size() > 0) {
+                               f_name  = d_vcr.at(0);
+                               f_name  = W1Util::concat_paths(mon_dr, f_name);
                                store   = new W1Store(f_name);
                                ret_val = store->get_oldest_data();
                                delete(store);
@@ -73,10 +73,10 @@ Data *DeviceData::find_oldest_data(vector<string> year_vector) {
 
 Data *DeviceData::find_newest_data(vector<string> year_vector) {
        int             ii;
-       string          year_dir;
-       string          month_dir;
-       vector<string>  month_vector;
-       vector<string>  data_vector;
+       string          year_dr;
+       string          mon_dr;
+       vector<string>  mon_vcr;
+       vector<string>  d_vcr;
        string          f_name;
        Data            *ret_val;
        int             size;
@@ -86,18 +86,18 @@ Data *DeviceData::find_newest_data(vector<string> year_vector) {
        size    = year_vector.size();
        if (size > 0) {
                // dirs are alphabetically sorted
-               year_dir        = year_vector.at(size - 1);
-               year_dir        = W1Util::concat_paths(device_dir, year_dir);
-               month_vector    = W1Util::get_subdirectories(year_dir);
-               for (ii = month_vector.size() - 1; ii >= 0; ii--) {
-                       month_dir       = month_vector.at(ii);
-                       month_dir       = W1Util::concat_paths(year_dir, month_dir);
+               year_dr = year_vector.at(size - 1);
+               year_dr = W1Util::concat_paths(device_dir, year_dr);
+               mon_vcr = W1Util::get_subdirectories(year_dr);
+               for (ii = mon_vcr.size() - 1; ii >= 0; ii--) {
+                       mon_dr  = mon_vcr.at(ii);
+                       mon_dr  = W1Util::concat_paths(year_dr, mon_dr);
                        // scan data files from month dir
-                       data_vector     = W1Util::get_data_files(month_dir);
-                       size    = data_vector.size();
+                       d_vcr   = W1Util::get_data_files(mon_dr);
+                       size    = d_vcr.size();
                        if (size > 0) {
-                               f_name  = data_vector.at(size - 1);
-                               f_name  = W1Util::concat_paths(month_dir, f_name);
+                               f_name  = d_vcr.at(size - 1);
+                               f_name  = W1Util::concat_paths(mon_dr, f_name);
                                store   = new W1Store(f_name);
                                ret_val = store->get_newest_data();
                                delete(store);
@@ -169,59 +169,138 @@ long int get_interval_type(Date *start_date,
        return ret_val;
 }
 
-Data *DeviceData::get_daily_summary(Date *date) {
+Data *DeviceData::get_day_summary(Date *date) {
        Data    *ret_val;
        W1Store *store;
+       bool    suc_flg;
+
+       ret_val = NULL;
+       store   = new W1Store(device_id, date);
+       if (store != NULL) {
+               suc_flg = store->load();
+               if (suc_flg == true) {
+                       switch(summary_calc_type) {
+                               case SUM:
+                                       ret_val = store->get_sum();
+                                       break;
+                               case DELTA:
+                                       ret_val = store->get_delta();
+                                       break;
+                               case MEAN:
+                               default:
+                                       ret_val = store->get_mean();
+                                       break;
+                               case MAX:
+                                       ret_val = store->get_max();
+                                       break;
+                               case MIN:
+                                       ret_val = store->get_min();
+                                       break;
+                       }
+                       if (ret_val != NULL) {
+                               ret_val->printout();
+                       }
+                       else {
+                               log_error("Could not read data log for device: %s\n", device_id.c_str());
+                       }
+               }
+               else {
+                       log_error("Could not read data log for device: %s. Data file open load failed.\n", device_id.c_str());
+               }
+       }
+       else {
+               log_error("Could not read data log for device: %s\n", device_id.c_str());
+       }
+       delete(store);
+       return ret_val;
+}
+
+DataRange *DeviceData::get_daily_summary(Date *start_date,
+                                       Date *end_date) {
+       DataRange       *ret_val;
+       Data            *data;
+       Date            *date;
+
+       ret_val = NULL;
+       date    = start_date->clone();
+       while(date->before(*end_date)) {
+               data    = get_day_summary(date);
+               if (data != NULL) {
+                       if (ret_val == NULL) {
+                               ret_val = new DataRange(*data);
+                       }
+                       else {
+                               ret_val->add_data(*data);
+                       }
+                       delete(data);
+               }
+               date->tomorrow();
+       }
+       delete(date);
+       return ret_val;
+}
+
+vector<Data *> DeviceData::get_hourly_summary(Date *date) {
+       vector<Data *>  ret_val;
+       W1Store *       store;
 
        store   = new W1Store(device_id, date);
        store->load();
        switch(summary_calc_type) {
+/*
                case SUM:
                        ret_val = store->get_sum();
                        break;
+*/
                case DELTA:
-                       ret_val = store->get_delta();
+                       ret_val = store->get_delta(3600);
                        break;
                case MEAN:
                default:
-                       ret_val = store->get_mean();
+                       ret_val = store->get_mean(3600);
                        break;
+/*
                case MAX:
                        ret_val = store->get_max();
                        break;
                case MIN:
                        ret_val = store->get_min();
                        break;
+*/
        }
-       ret_val->printout();
        delete(store);
-
        return ret_val;
 }
 
-DataRange *DeviceData::get_daily_summary(Date *start_date,
+DataRange *DeviceData::get_hourly_summary(Date *start_date,
                                        Date *end_date) {
-       DataRange       *ret_val;
-       Data            *data;
-       Date            *date;
+       DataRange                       *ret_val;
+       vector<Data *>                  dta_list;
+       Data                            *data;
+       Date                            *date;
+       vector<Data *>::iterator        iter;
 
        ret_val = NULL;
        date    = start_date->clone();
        while(date->before(*end_date)) {
-               data    = get_daily_summary(date);
-               if (ret_val == NULL) {
-                       ret_val = new DataRange(*data);
-               }
-               else {
-                       ret_val->add_data(*data);
+               dta_list        = get_hourly_summary(date);
+               for(iter = dta_list.begin(); iter != dta_list.end(); iter++) {
+                       data    = (Data *)*iter;
+                       if (data != NULL) {
+                               if (ret_val == NULL) {
+                                       ret_val = new DataRange(*data);
+                               }
+                               else {
+                                       ret_val->add_data(*data);
+                               }
+                               delete(data);
+                       }
                }
-               delete(data);
                date->tomorrow();
        }
        delete(date);
        return ret_val;
 }
-
 DataRange *DeviceData::get_data(Date *start_date,
                                Date *end_date) {
        DataRange       *ret_val;
@@ -237,6 +316,7 @@ DataRange *DeviceData::get_data(Date *start_date,
                        break;
                case 1:
                        log_debug("get monthly summary\n");
+                       ret_val = get_daily_summary(start_date, end_date);
                        break;
                case 2:
                        log_debug("get daily summary\n");
@@ -244,6 +324,7 @@ DataRange *DeviceData::get_data(Date *start_date,
                        break;
                case 3:
                        log_debug("get hourly summary\n");
+                       ret_val = get_hourly_summary(start_date, end_date);
                        break;
                case 4:
                        log_debug("get minute summary data\n");