4 * Created on: Nov 7, 2010
13 #include "DeviceData.hh"
15 #include "DeviceConfig.hh"
24 DeviceData::DeviceData(string device_id_param) {
27 device_config = Factory::get_device_config(device_id_param);
28 summary_calc_type = device_config->get_summary_calculation_type();
29 device_id = device_id_param;
30 base_dir = DeviceConfig::get_base_dir_name();
31 device_dir = W1Util::concat_paths(base_dir, device_id);
32 device_ch_dir = W1Util::concat_paths(base_dir, "cache");
33 device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id);
36 DeviceData::~DeviceData() {
37 delete(device_config);
40 Data *DeviceData::find_oldest_data(vector<string> year_vector) {
44 vector<string> mon_vcr;
45 vector<string> dta_vcr;
51 if (year_vector.size() > 0) {
52 // dirs are alphabetically sorted
53 year_dr = year_vector.at(0);
54 year_dr = W1Util::concat_paths(device_dir, year_dr);
55 mon_vcr = W1Util::get_subdirectories(year_dr);
56 for (ii = 0; ii < mon_vcr.size(); ii++) {
57 mon_dr = mon_vcr.at(ii);
58 mon_dr = W1Util::concat_paths(year_dr, mon_dr);
59 // scan data files from month dir
60 dta_vcr = W1Util::get_data_files(mon_dr);
61 if (dta_vcr.size() > 0) {
62 f_name = dta_vcr.at(0);
63 f_name = W1Util::concat_paths(mon_dr, f_name);
64 store = new Store(f_name);
65 ret_val = store->get_oldest_data();
74 Data *DeviceData::find_newest_data(vector<string> year_vector) {
78 vector<string> mon_vcr;
86 size = year_vector.size();
88 // dirs are alphabetically sorted
89 year_dr = year_vector.at(size - 1);
90 year_dr = W1Util::concat_paths(device_dir, year_dr);
91 mon_vcr = W1Util::get_subdirectories(year_dr);
92 for (ii = mon_vcr.size() - 1; ii >= 0; ii--) {
93 mon_dr = mon_vcr.at(ii);
94 mon_dr = W1Util::concat_paths(year_dr, mon_dr);
95 // scan data files from month dir
96 d_vcr = W1Util::get_data_files(mon_dr);
99 f_name = d_vcr.at(size - 1);
100 f_name = W1Util::concat_paths(mon_dr, f_name);
101 store = new Store(f_name);
102 ret_val = store->get_newest_data();
111 DataRange *DeviceData::get_data_range() {
113 vector<string> y_list;
118 y_list = W1Util::get_subdirectories(device_dir);
119 o_data = find_oldest_data(y_list);
120 if (o_data != NULL) {
121 n_data = find_newest_data(y_list);
122 if (n_data != NULL) {
123 ret_val = new DataRange(o_data);
124 ret_val->add_data(n_data);
132 long int get_interval_type(Date *start_date,
138 diff = end_date->year - start_date->year;
143 diff = end_date->month - start_date->month;
148 diff = end_date->day - start_date->day;
153 diff = end_date->hour - start_date->hour;
158 diff = end_date->min - start_date->min;
172 Data *DeviceData::get_daily_summary(Date *date,
177 //Store *cache_store;
180 store = new Store(device_id, date);
182 suc_flg = store->load();
183 if (suc_flg == true) {
186 ret_val = store->get_sum();
189 ret_val = store->get_delta();
192 ret_val = store->get_max();
195 ret_val = store->get_min();
199 ret_val = store->get_mean();
202 if (ret_val != NULL) {
206 log_error("Could not read data log for device: %s\n", device_id.c_str());
210 log_error("Could not read data log for device: %s. Data file open load failed.\n", device_id.c_str());
214 log_error("Could not read data log for device: %s\n", device_id.c_str());
220 Data *DeviceData::get_daily_summary(Date *date) {
223 ret_val = get_daily_summary(date, summary_calc_type);
227 DataRange *DeviceData::get_daily_summary(Date *start_date,
234 date = start_date->clone();
235 while(date->before(end_date)) {
236 data = get_daily_summary(date);
238 if (ret_val == NULL) {
239 ret_val = new DataRange(data);
242 ret_val->add_data(data);
252 vector<Data *> *DeviceData::get_hourly_summary(Date *date,
254 vector<Data *> *ret_val;
258 store = new Store(device_id, date);
262 ret_val = store->get_sum(3600);
265 ret_val = store->get_delta(3600);
269 ret_val = store->get_mean(3600);
272 ret_val = store->get_max(3600);
275 ret_val = store->get_min(3600);
282 vector<Data *> *DeviceData::get_hourly_summary(Date *date) {
283 vector<Data *> *ret_val;
285 ret_val = get_hourly_summary(date, summary_calc_type);
289 DataRange *DeviceData::get_hourly_summary(Date *start_date,
292 vector<Data *> *dta_lst;
295 vector<Data *>::iterator iter;
298 date = start_date->clone();
299 while(date->before(end_date)) {
300 dta_lst = get_hourly_summary(date);
301 for(iter = dta_lst->begin(); iter != dta_lst->end(); iter++) {
302 data = (Data *)*iter;
304 if (ret_val == NULL) {
305 ret_val = new DataRange(data);
308 ret_val->add_data(data);
319 DataRange *DeviceData::get_data(Date *start_date,
325 start_date->printout();
326 end_date->printout();
327 int_type = get_interval_type(start_date, end_date);
330 log_debug("get yearly summary\n");
333 log_debug("get monthly summary\n");
334 ret_val = get_daily_summary(start_date, end_date);
337 log_debug("get daily summary\n");
338 ret_val = get_daily_summary(start_date, end_date);
341 log_debug("get hourly summary\n");
342 ret_val = get_hourly_summary(start_date, end_date);
345 log_debug("get minute summary data\n");
348 log_debug("get second summary data\n");