4 * Created on: Nov 7, 2010
13 #include "W1DataList.hh"
15 #include "DeviceConfig.hh"
23 W1DataList::W1DataList(string device_id_param) {
26 device_config = new DeviceConfig(device_id_param);
27 summary_calc_type = device_config->get_summary_calculation_type();
28 device_id = device_id_param;
29 base_dir = DeviceConfig::get_base_dir_name();
30 device_dir = W1Util::concat_paths(base_dir, device_id);
31 device_ch_dir = W1Util::concat_paths(base_dir, "cache");
32 device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id);
35 W1DataList::~W1DataList() {
36 delete(device_config);
39 Data *W1DataList::find_oldest_data(vector<string> year_vector) {
43 vector<string> month_vector;
44 vector<string> data_vector;
50 if (year_vector.size() > 0) {
51 // dirs are alphabetically sorted
52 year_dir = year_vector.at(0);
53 year_dir = W1Util::concat_paths(device_dir, year_dir);
54 month_vector = W1Util::get_subdirectories(year_dir);
55 for (ii = 0; ii < month_vector.size(); ii++) {
56 month_dir = month_vector.at(ii);
57 month_dir = W1Util::concat_paths(year_dir, month_dir);
58 // scan data files from month dir
59 data_vector = W1Util::get_data_files(month_dir);
60 if (data_vector.size() > 0) {
61 f_name = data_vector.at(0);
62 f_name = W1Util::concat_paths(month_dir, f_name);
63 store = new W1Store(f_name);
64 ret_val = store->get_oldest_data();
73 Data *W1DataList::find_newest_data(vector<string> year_vector) {
77 vector<string> month_vector;
78 vector<string> data_vector;
85 size = year_vector.size();
87 // dirs are alphabetically sorted
88 year_dir = year_vector.at(size - 1);
89 year_dir = W1Util::concat_paths(device_dir, year_dir);
90 month_vector = W1Util::get_subdirectories(year_dir);
91 for (ii = month_vector.size() - 1; ii >= 0; ii--) {
92 month_dir = month_vector.at(ii);
93 month_dir = W1Util::concat_paths(year_dir, month_dir);
94 // scan data files from month dir
95 data_vector = W1Util::get_data_files(month_dir);
96 size = data_vector.size();
98 f_name = data_vector.at(size - 1);
99 f_name = W1Util::concat_paths(month_dir, f_name);
100 store = new W1Store(f_name);
101 ret_val = store->get_newest_data();
110 DataRange *W1DataList::get_data_range() {
112 vector<string> year_list;
117 year_list = W1Util::get_subdirectories(device_dir);
118 first_data = find_oldest_data(year_list);
119 if (first_data != NULL) {
120 newest_data = find_newest_data(year_list);
121 if (newest_data != NULL) {
122 ret_val = new DataRange(*first_data);
123 ret_val->add_data(*newest_data);
131 long int get_interval_type(Date *start_date,
137 diff = end_date->year - start_date->year;
142 diff = end_date->month - start_date->month;
147 diff = end_date->day - start_date->day;
152 diff = end_date->hour - start_date->hour;
157 diff = end_date->min - start_date->min;
171 Data *W1DataList::get_daily_summary(Date *date) {
175 store = new W1Store(device_id, date);
177 switch(summary_calc_type) {
179 ret_val = store->get_sum();
182 ret_val = store->get_delta();
186 ret_val = store->get_mean();
189 ret_val = store->get_max();
192 ret_val = store->get_min();
201 DataRange *W1DataList::get_daily_summary(Date *start_date,
208 date = start_date->clone();
209 while(date->before(*end_date)) {
210 data = get_daily_summary(date);
211 if (ret_val == NULL) {
212 ret_val = new DataRange(*data);
215 ret_val->add_data(*data);
224 DataRange *W1DataList::get_data(Date *start_date,
230 start_date->printout();
231 end_date->printout();
232 int_type = get_interval_type(start_date, end_date);
235 log_debug("get yearly summary\n");
238 log_debug("get monthly summary\n");
241 log_debug("get daily summary\n");
242 ret_val = get_daily_summary(start_date, end_date);
245 log_debug("get hourly summary\n");
248 log_debug("get minute summary data\n");
251 log_debug("get second summary data\n");