X-Git-Url: http://pilppa.org/gitweb/?p=lib1wire.git;a=blobdiff_plain;f=src%2FDataReader.cc;fp=src%2FDataReader.cc;h=0000000000000000000000000000000000000000;hp=799ead10a7fc411f6c4eaa4cfac7b006080c8418;hb=a7002b0a87c5f17b542dfbd44f482014a191df97;hpb=da203ad44792ca37320768f4cbe68587c4806910 diff --git a/src/DataReader.cc b/src/DataReader.cc deleted file mode 100644 index 799ead1..0000000 --- a/src/DataReader.cc +++ /dev/null @@ -1,418 +0,0 @@ -/* - * DataReader.cc - * - * Created on: Nov 7, 2010 - * Author: lamikr - */ -#include - -#include -#include -#include -#include - -#include "W1Util.hh" -#include "DataReader.hh" -#include "StoreDay.hh" -#include "StoreCache.hh" -#include "DeviceConfig.hh" -#include "Factory.hh" - -#include "plp/log.h" - -using namespace w1; -using namespace std; -using namespace plp; - -template -bool string_to_number(NumberDataType& result, - const std::string& string_param, - std::ios_base& (*format)(std::ios_base&)) -{ - istringstream iss(string_param); - return !(iss >> format >> result).fail(); -} - -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 = W1Util::concat_paths(base_dir, device_id); - device_ch_dir = W1Util::concat_paths(base_dir, "cache"); - device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id); -} - -DataReader::~DataReader() { - if (device_config != NULL) { - delete(device_config); - device_config = NULL; - } -} - -Data *DataReader::find_newest_data(vector year_name_vector_param) { - string year_name; - int size; - Data *ret_val; - Date date; - int val_int; - - ret_val = NULL; - size = year_name_vector_param.size(); - if (size > 0) { - // dirs are alphabetically sorted - year_name = year_name_vector_param.at(size - 1); - string_to_number(val_int, year_name, dec); - date.year = val_int; - ret_val = StoreCache::get_newest_data(&date, device_id, PERIOD_YEARLY); - } - return ret_val; -} - -Data *DataReader::find_oldest_data(vector year_name_vector_param) { - int size; - string year_name; - Data *ret_val; - Date date; - int val_int; - - ret_val = NULL; - size = year_name_vector_param.size(); - if (size > 0) { - // dirs are alphabetically sorted - year_name = year_name_vector_param.at(0); - string_to_number(val_int, year_name, dec); - date.year = val_int; - ret_val = StoreCache::get_oldest_data(&date, device_id, PERIOD_YEARLY); - } - return ret_val; -} - -DataRange *DataReader::get_data_range() { - DataRange *ret_val; - vector y_list; - Data *o_data; - Data *n_data; - - ret_val = NULL; - y_list = W1Util::get_subdirectories(device_dir); - o_data = find_oldest_data(y_list); - if (o_data != NULL) { - n_data = find_newest_data(y_list); - if (n_data != NULL) { - ret_val = new DataRange(o_data); - ret_val->add(n_data); - delete(n_data); - } - delete(o_data); - } - return ret_val; -} - -EnumSummaryPeriod get_period_type(Date *start_date, - Date *end_date) { - int diff; - EnumSummaryPeriod ret_val; - - ret_val = PERIOD_YEARLY; - diff = end_date->year - start_date->year; - if (diff != 0) { - ret_val = PERIOD_YEARLY; - } - else { - diff = end_date->month - start_date->month; - if (diff != 0) { - ret_val = PERIOD_MONTHLY; - } - else { - diff = end_date->day - start_date->day; - if (diff != 0) { - ret_val = PERIOD_DAILY; - } - else { - diff = end_date->hour - start_date->hour; - if (diff != 0) { - ret_val = PERIOD_HOURLY; - } - else { - diff = end_date->min - start_date->min; - if (diff != 0) { - ret_val = PERIOD_MINUTELY; - } - else { - ret_val = PERIOD_SECONDLY; - } - } - } - } - } - return ret_val; -} - -DataRange *DataReader::get_summary(Date *date_param, - EnumSummaryCalculationType calc_type_param, - EnumSummaryPeriod period_type_param) { - DataRange *ret_val; - StoreCache *store; - - ret_val = NULL; - //store = new StoreDay(device_id, date_param); - store = new StoreCache(device_id, date_param); - if (store != NULL) { - 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\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 *DataReader::get_yearly_summary(Date *date, - EnumSummaryCalculationType calc_type_param) { - return get_summary(date, calc_type_param, PERIOD_YEARLY); -} - -DataRange *DataReader::get_yearly_summary(Date *date) { - DataRange *ret_val; - - if (device_config == NULL) { - device_config = Factory::get_device_config(device_id); - summary_calc_type = device_config->get_summary_calculation_type(); - } - ret_val = get_yearly_summary(date, summary_calc_type); - return ret_val; -} - -DataRange *DataReader::get_yearly_summary(Date *start_date, - Date *end_date) { - DataRange *ret_val; - DataRange *data; - Date *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); - } - delete(data); - } - date->next_year(); - } - delete(date); - return ret_val; -} - -DataRange *DataReader::get_monthly_summary(Date *date, - EnumSummaryCalculationType calc_type_param) { - return get_summary(date, calc_type_param, PERIOD_MONTHLY); -} - -DataRange *DataReader::get_monthly_summary(Date *date) { - DataRange *ret_val; - - if (device_config == NULL) { - device_config = Factory::get_device_config(device_id); - summary_calc_type = device_config->get_summary_calculation_type(); - } - ret_val = get_monthly_summary(date, summary_calc_type); - return ret_val; -} - -DataRange *DataReader::get_monthly_summary(Date *start_date, - Date *end_date) { - DataRange *ret_val; - DataRange *data; - Date *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); - } - delete(data); - } - date->next_month(); - } - delete(date); - return ret_val; -} - -DataRange *DataReader::get_daily_summary(Date *date, - EnumSummaryCalculationType calc_type_param) { - return get_summary(date, calc_type_param, PERIOD_DAILY); -} - -DataRange *DataReader::get_daily_summary(Date *date) { - DataRange *ret_val; - - if (device_config == NULL) { - device_config = Factory::get_device_config(device_id); - summary_calc_type = device_config->get_summary_calculation_type(); - } - ret_val = get_daily_summary(date, summary_calc_type); - return ret_val; -} - -DataRange *DataReader::get_daily_summary(Date *start_date, - Date *end_date) { - DataRange *ret_val; - DataRange *data; - Date *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); - } - delete(data); - } - date->next_day(); - } - delete(date); - return ret_val; -} - -DataRange *DataReader::get_hourly_summary(Date *date, - EnumSummaryCalculationType calc_type_param) { - return get_summary(date, calc_type_param, PERIOD_HOURLY); -} - -DataRange *DataReader::get_hourly_summary(Date *date) { - DataRange *ret_val; - - if (device_config == NULL) { - device_config = Factory::get_device_config(device_id); - summary_calc_type = device_config->get_summary_calculation_type(); - } - ret_val = get_hourly_summary(date, summary_calc_type); - return ret_val; -} - -DataRange *DataReader::get_hourly_summary(Date *start_date, - Date *end_date) { - DataRange *ret_val; - DataRange *dta_lst; - Data *data; - Date *date; - int cnt; - int ii; - - ret_val = NULL; - date = start_date->clone(); - while(date->before_or_equal_hour(end_date)) { - dta_lst = get_hourly_summary(date); - 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); - } - delete(data); - } - } - date->next_day(); - } - delete(date); - return ret_val; -} - -DataRange *DataReader::get_data(Date *start_date, - Date *end_date) { - DataRange *ret_val; - EnumSummaryPeriod period; - - ret_val = NULL; - start_date->printout(); - end_date->printout(); - 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_yearly_summary(start_date, end_date); - break; - case PERIOD_MONTHLY: - log_debug("get monthly summary\n"); - ret_val = get_monthly_summary(start_date, end_date); - break; - case PERIOD_DAILY: - log_debug("get daily summary\n"); - ret_val = get_daily_summary(start_date, end_date); - break; - case PERIOD_HOURLY: - log_debug("get hourly summary\n"); - ret_val = get_hourly_summary(start_date, end_date); - break; - case PERIOD_MINUTELY: - log_debug("get minute summary data\n"); - break; - case PERIOD_SECONDLY: - default: - log_debug("get second summary data\n"); - break; - } - return ret_val; -} - -string DataReader::get_device_id() { - return device_id; -} - -/** - * Read device type from the device specific config file - */ -string DataReader::get_device_type() { - string ret_val; - - if (device_config == NULL) { - device_config = Factory::get_device_config(device_id); - ret_val = device_config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE); - } - return ret_val; -}