X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FDeviceData.cc;h=d47eb005692ef6498ee0159a572bbc4976a00532;hb=d01194ab9275bc97176071089edc2781bb4de51b;hp=d066bbdc3f96f9f423d0c58935b3709baae9547f;hpb=56242039f27dc5d36117b8d513731c7a9009d4b1;p=lib1wire.git diff --git a/src/DeviceData.cc b/src/DeviceData.cc index d066bbd..d47eb00 100644 --- a/src/DeviceData.cc +++ b/src/DeviceData.cc @@ -11,7 +11,8 @@ #include "W1Util.hh" #include "DeviceData.hh" -#include "Store.hh" +#include "StoreDay.hh" +#include "StoreCache.hh" #include "DeviceConfig.hh" #include "Factory.hh" @@ -44,7 +45,7 @@ Data *DeviceData::find_oldest_data(vector year_vector) { vector mon_vcr; vector dta_vcr; string f_name; - Store *store; + StoreDay *store; Data *ret_val; ret_val = NULL; @@ -61,7 +62,7 @@ Data *DeviceData::find_oldest_data(vector year_vector) { if (dta_vcr.size() > 0) { f_name = dta_vcr.at(0); f_name = W1Util::concat_paths(mon_dr, f_name); - store = new Store(f_name); + store = new StoreDay(f_name); ret_val = store->get_oldest_data(); delete(store); break; @@ -80,7 +81,7 @@ Data *DeviceData::find_newest_data(vector year_vector) { string f_name; Data *ret_val; int size; - Store *store; + StoreDay *store; ret_val = NULL; size = year_vector.size(); @@ -98,7 +99,7 @@ Data *DeviceData::find_newest_data(vector year_vector) { if (size > 0) { f_name = d_vcr.at(size - 1); f_name = W1Util::concat_paths(mon_dr, f_name); - store = new Store(f_name); + store = new StoreDay(f_name); ret_val = store->get_newest_data(); delete(store); break; @@ -121,7 +122,7 @@ DataRange *DeviceData::get_data_range() { n_data = find_newest_data(y_list); if (n_data != NULL) { ret_val = new DataRange(o_data); - ret_val->add_data(n_data); + ret_val->add(n_data); delete(n_data); } delete(o_data); @@ -129,38 +130,38 @@ DataRange *DeviceData::get_data_range() { return ret_val; } -long int get_interval_type(Date *start_date, +EnumSummaryPeriod get_period_type(Date *start_date, Date *end_date) { - int diff; - int ret_val; + int diff; + EnumSummaryPeriod ret_val; - ret_val = 0; + ret_val = PERIOD_YEARLY; diff = end_date->year - start_date->year; if (diff != 0) { - ret_val = 0; + ret_val = PERIOD_YEARLY; } else { diff = end_date->month - start_date->month; if (diff != 0) { - ret_val = 1; + ret_val = PERIOD_MONTHLY; } else { diff = end_date->day - start_date->day; if (diff != 0) { - ret_val = 2; + ret_val = PERIOD_DAILY; } else { diff = end_date->hour - start_date->hour; if (diff != 0) { - ret_val = 3; + ret_val = PERIOD_HOURLY; } else { diff = end_date->min - start_date->min; if (diff != 0) { - ret_val = 4; + ret_val = PERIOD_MINUTELY; } else { - ret_val = 5; + ret_val = PERIOD_SECONDLY; } } } @@ -169,45 +170,39 @@ long int get_interval_type(Date *start_date, return ret_val; } -Data *DeviceData::get_daily_summary(Date *date, - int calc_type) { - Data *ret_val; - Store *store; - bool suc_flg; - //Store *cache_store; +DataRange *DeviceData::get_summary(Date *date_param, + EnumSummaryCalculationType calc_type_param, + EnumSummaryPeriod period_type_param) { + DataRange *ret_val; + StoreCache *store; ret_val = NULL; - store = new Store(device_id, date); + //store = new StoreDay(device_id, date_param); + store = new StoreCache(device_id, date_param); if (store != NULL) { - suc_flg = store->load(); - if (suc_flg == true) { - switch(calc_type) { - case SUM: - ret_val = store->get_sum(); - break; - case DELTA: - ret_val = store->get_delta(); - break; - case MAX: - ret_val = store->get_max(); - break; - case MIN: - ret_val = store->get_min(); - break; - case MEAN: - default: - ret_val = store->get_mean(); - break; - } - if (ret_val != NULL) { - ret_val->printout(); - } - else { - log_error("Could not read data log for device: %s\n", device_id.c_str()); - } + switch(calc_type_param) { + case SUM: + ret_val = store->get_sum(period_type_param); + break; + case DELTA: + ret_val = store->get_delta(period_type_param); + break; + case MAX: + ret_val = store->get_max(period_type_param); + break; + case MIN: + ret_val = store->get_min(period_type_param); + break; + case MEAN: + default: + ret_val = store->get_mean(period_type_param); + break; + } + if (ret_val != NULL) { + ret_val->printout(); } else { - log_error("Could not read data log for device: %s. Data file open load failed.\n", device_id.c_str()); + log_error("Could not read data log for device: %s\n", device_id.c_str()); } } else { @@ -217,8 +212,13 @@ Data *DeviceData::get_daily_summary(Date *date, return ret_val; } -Data *DeviceData::get_daily_summary(Date *date) { - Data *ret_val; +DataRange *DeviceData::get_daily_summary(Date *date, + EnumSummaryCalculationType calc_type_param) { + return get_summary(date, calc_type_param, PERIOD_DAILY); +} + +DataRange *DeviceData::get_daily_summary(Date *date) { + DataRange *ret_val; ret_val = get_daily_summary(date, summary_calc_type); return ret_val; @@ -227,19 +227,19 @@ Data *DeviceData::get_daily_summary(Date *date) { DataRange *DeviceData::get_daily_summary(Date *start_date, Date *end_date) { DataRange *ret_val; - Data *data; + DataRange *data; Date *date; ret_val = NULL; date = start_date->clone(); - while(date->before(end_date)) { + 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(data); + ret_val->add(data); } delete(data); } @@ -249,38 +249,13 @@ DataRange *DeviceData::get_daily_summary(Date *start_date, return ret_val; } -vector *DeviceData::get_hourly_summary(Date *date, - int calc_type) { - vector *ret_val; - Store *store; - - ret_val = NULL; - store = new Store(device_id, date); - store->load(); - switch(calc_type) { - case SUM: - ret_val = store->get_sum(3600); - break; - case DELTA: - ret_val = store->get_delta(3600); - break; - case MEAN: - default: - ret_val = store->get_mean(3600); - break; - case MAX: - ret_val = store->get_max(3600); - break; - case MIN: - ret_val = store->get_min(3600); - break; - } - delete(store); - return ret_val; +DataRange *DeviceData::get_hourly_summary(Date *date, + EnumSummaryCalculationType calc_type_param) { + return get_summary(date, calc_type_param, PERIOD_HOURLY); } -vector *DeviceData::get_hourly_summary(Date *date) { - vector *ret_val; +DataRange *DeviceData::get_hourly_summary(Date *date) { + DataRange *ret_val; ret_val = get_hourly_summary(date, summary_calc_type); return ret_val; @@ -288,24 +263,26 @@ vector *DeviceData::get_hourly_summary(Date *date) { DataRange *DeviceData::get_hourly_summary(Date *start_date, Date *end_date) { - DataRange *ret_val; - vector *dta_lst; - Data *data; - Date *date; - vector::iterator iter; + DataRange *ret_val; + DataRange *dta_lst; + Data *data; + Date *date; + int cnt; + int ii; ret_val = NULL; date = start_date->clone(); - while(date->before(end_date)) { + while(date->before_or_equal_hour(end_date)) { dta_lst = get_hourly_summary(date); - for(iter = dta_lst->begin(); iter != dta_lst->end(); iter++) { - data = (Data *)*iter; + cnt = dta_lst->get_count(); + for(ii = 0; ii < cnt; ii++) { + data = dta_lst->get(ii); if (data != NULL) { if (ret_val == NULL) { ret_val = new DataRange(data); } else { - ret_val->add_data(data); + ret_val->add(data); } delete(data); } @@ -318,33 +295,35 @@ DataRange *DeviceData::get_hourly_summary(Date *start_date, DataRange *DeviceData::get_data(Date *start_date, Date *end_date) { - DataRange *ret_val; - int int_type; + DataRange *ret_val; + EnumSummaryPeriod period; - ret_val = NULL; + ret_val = NULL; start_date->printout(); end_date->printout(); - int_type = get_interval_type(start_date, end_date); - switch(int_type) { - case 0: - log_debug("get yearly summary\n"); + period = get_period_type(start_date, end_date); + switch(period) { + case PERIOD_YEARLY: + log_debug("get yearly summary: %s - %s\n", start_date->to_string().c_str(), end_date->to_string().c_str()); + ret_val = get_daily_summary(start_date, end_date); break; - case 1: + case PERIOD_MONTHLY: log_debug("get monthly summary\n"); ret_val = get_daily_summary(start_date, end_date); break; - case 2: + case PERIOD_DAILY: log_debug("get daily summary\n"); ret_val = get_daily_summary(start_date, end_date); break; - case 3: + case PERIOD_HOURLY: log_debug("get hourly summary\n"); ret_val = get_hourly_summary(start_date, end_date); break; - case 4: + case PERIOD_MINUTELY: log_debug("get minute summary data\n"); break; - case 5: + case PERIOD_SECONDLY: + default: log_debug("get second summary data\n"); break; }