]> pilppa.org Git - libplp.git/blobdiff - src/DataReader.cc
Data read optimizations
[libplp.git] / src / DataReader.cc
index 72a44bd65a20ce6cbc0bbfd2592689e288ef2388..c1dfb489c65ecd51b9388e616916f437e71f64e0 100644 (file)
@@ -34,12 +34,14 @@ bool string_to_number(NumberDataType& result,
 DataReader::DataReader(string device_id_param) {
        string  base_dir;
 
-       device_config   = NULL;
-       device_id       = device_id_param;
-       base_dir        = DeviceConfig::get_base_dir_name();
-       device_dir      = FileUtil::concat_paths(base_dir, device_id);
-       device_ch_dir   = FileUtil::concat_paths(base_dir, "cache");
-       device_ch_dir   = FileUtil::concat_paths(device_ch_dir, device_id);
+       log_debug("device_id: %s\n", device_id_param.c_str());
+       summary_calc_type       = MEAN;
+       device_config           = NULL;
+       device_id               = device_id_param;
+       base_dir                = DeviceConfig::get_base_dir_name();
+       device_dir              = FileUtil::concat_paths(base_dir, device_id);
+       device_ch_dir           = FileUtil::concat_paths(base_dir, "cache");
+       device_ch_dir           = FileUtil::concat_paths(device_ch_dir, device_id);
 }
 
 DataReader::~DataReader() {
@@ -192,11 +194,15 @@ DataRange *DataReader::get_summary(Date *date_param,
                        ret_val->printout();
                }
                else {
-                       log_error("Could not read data log for device: %s\n", device_id.c_str());
+                       log_error("%s: Could not read data log for device %s. Data not found.\n",
+                               date_param->to_string().c_str(),
+                               device_id.c_str());
                }
        }
        else {
-               log_error("Could not read data log for device: %s\n", device_id.c_str());
+               log_error("%s: Could not read data log for device: %s. Memory allocation error..\n",
+                       date_param->to_string().c_str(),
+                       device_id.c_str());
        }
        delete(store);
        return ret_val;
@@ -227,15 +233,17 @@ DataRange *DataReader::get_yearly_summary(Date *start_date,
        ret_val = NULL;
        date    = start_date->clone();
        while(date->before_or_equal_year(end_date)) {
-               data    = get_yearly_summary(date);
-               if (data != NULL) {
-                       if (ret_val == NULL) {
-                               ret_val = new DataRange(data);
-                       }
-                       else {
-                               ret_val->add(data);
+               if (StoreDay::exist_in_year(device_id, date, false)) {
+                       data    = get_yearly_summary(date);
+                       if (data != NULL) {
+                               if (ret_val == NULL) {
+                                       ret_val = new DataRange(data);
+                               }
+                               else {
+                                       ret_val->add(data);
+                               }
+                               delete(data);
                        }
-                       delete(data);
                }
                date->next_year();
        }
@@ -268,17 +276,19 @@ DataRange *DataReader::get_monthly_summary(Date *start_date,
        ret_val = NULL;
        date    = start_date->clone();
        while(date->before_or_equal_month(end_date)) {
-               data    = get_monthly_summary(date);
-               if (data != NULL) {
-                       if (ret_val == NULL) {
-                               ret_val = new DataRange(data);
-                       }
-                       else {
-                               ret_val->add(data);
+               if (StoreDay::exist_in_month(device_id, date, false)) {
+                       data    = get_monthly_summary(date);
+                       if (data != NULL) {
+                               if (ret_val == NULL) {
+                                       ret_val = new DataRange(data);
+                               }
+                               else {
+                                       ret_val->add(data);
+                               }
+                               delete(data);
                        }
-                       delete(data);
+                       date->next_month();
                }
-               date->next_month();
        }
        delete(date);
        return ret_val;
@@ -308,6 +318,7 @@ DataRange *DataReader::get_daily_summary(EnumSummaryCalculationType calc_type_pa
        if (data != NULL) {
                date    = data->get_date();
                ret_val = get_daily_summary(&date, calc_type_param);
+               delete(data);
        }
        return ret_val;
 }
@@ -337,15 +348,17 @@ DataRange *DataReader::get_daily_summary(Date *start_date,
        ret_val = NULL;
        date    = start_date->clone();
        while(date->before_or_equal_day(end_date)) {
-               data    = get_daily_summary(date);
-               if (data != NULL) {
-                       if (ret_val == NULL) {
-                               ret_val = new DataRange(data);
-                       }
-                       else {
-                               ret_val->add(data);
+               if (StoreDay::exist(device_id, date, false)) {
+                       data    = get_daily_summary(date);
+                       if (data != NULL) {
+                               if (ret_val == NULL) {
+                                       ret_val = new DataRange(data);
+                               }
+                               else {
+                                       ret_val->add(data);
+                               }
+                               delete(data);
                        }
-                       delete(data);
                }
                date->next_day();
        }
@@ -441,14 +454,20 @@ string DataReader::get_device_id() {
 }
 
 /**
- * Read device type from the device specific config file
+ * Read device type from the device specific config file.
+ *
+ * @rerurn string representing device type.
+ * In the case of error, an empty string is returned.
  */
-string DataReader::get_device_type() {
-       string  ret_val;
+bool DataReader::get_device_type(string& type_param) {
+       bool    ret_val;
 
+       ret_val = false;
        if (device_config == NULL) {
                device_config   = DeviceConfig::get_device_config(device_id);
-               ret_val         = device_config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
+       }
+       if (device_config != NULL) {
+               ret_val = device_config->get_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE, type_param);
        }
        return ret_val;
 }