4 * Created on: Nov 7, 2010
13 #include "W1DataList.hh"
22 W1DataList::W1DataList(string device_id_param) {
25 device_id = device_id_param;
26 base_dir = W1Store::get_store_base_dir();
27 device_dir = W1Util::concat_paths(base_dir, device_id);
28 device_ch_dir = W1Util::concat_paths(base_dir, "cache");
29 device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id);
32 W1DataList::~W1DataList() {
36 Data *W1DataList::find_oldest_data(vector<string> year_vector) {
40 vector<string> month_vector;
41 vector<string> data_vector;
47 if (year_vector.size() > 0) {
48 // dirs are alphabetically sorted
49 year_dir = year_vector.at(0);
50 year_dir = W1Util::concat_paths(device_dir, year_dir);
51 month_vector = W1Util::get_subdirectories(year_dir);
52 for (ii = 0; ii < month_vector.size(); ii++) {
53 month_dir = month_vector.at(ii);
54 month_dir = W1Util::concat_paths(year_dir, month_dir);
55 // scan data files from month dir
56 data_vector = W1Util::get_data_files(month_dir);
57 if (data_vector.size() > 0) {
58 f_name = data_vector.at(0);
59 f_name = W1Util::concat_paths(month_dir, f_name);
60 store = new W1Store(f_name);
61 ret_val = store->get_oldest_data();
70 Data *W1DataList::find_newest_data(vector<string> year_vector) {
74 vector<string> month_vector;
75 vector<string> data_vector;
82 size = year_vector.size();
84 // dirs are alphabetically sorted
85 year_dir = year_vector.at(size - 1);
86 year_dir = W1Util::concat_paths(device_dir, year_dir);
87 month_vector = W1Util::get_subdirectories(year_dir);
88 for (ii = month_vector.size() - 1; ii >= 0; ii--) {
89 month_dir = month_vector.at(ii);
90 month_dir = W1Util::concat_paths(year_dir, month_dir);
91 // scan data files from month dir
92 data_vector = W1Util::get_data_files(month_dir);
93 size = data_vector.size();
95 f_name = data_vector.at(size - 1);
96 f_name = W1Util::concat_paths(month_dir, f_name);
97 store = new W1Store(f_name);
98 ret_val = store->get_newest_data();
107 DataRange *W1DataList::get_data_range() {
110 struct dirent *year_dirent;
111 vector<string> year_list;
116 year_list = W1Util::get_subdirectories(device_dir);
117 first_data = find_oldest_data(year_list);
118 if (first_data != NULL) {
119 newest_data = find_newest_data(year_list);
120 if (newest_data != NULL) {
121 ret_val = new DataRange(*first_data);
122 ret_val->add_data(*newest_data);
130 long int get_interval_type(Date *start_date,
136 diff = end_date->year - start_date->year;
141 diff = end_date->month - start_date->month;
146 diff = end_date->day - start_date->day;
151 diff = end_date->hour - start_date->hour;
156 diff = end_date->min - start_date->min;
170 string W1DataList::get_day_data(Date *date) {
173 ret_val = W1Store::get_store_file_name(device_id, date);
177 Data *W1DataList::get_avg_day_data(Date *date) {
181 store = new W1Store(device_id, date);
183 data = store->get_mean();
190 DataRange *W1DataList::get_avg_day_data(Date *start_date,
197 date = start_date->clone();
198 while(date->before(*end_date)) {
199 data = get_avg_day_data(date);
200 if (ret_val == NULL) {
201 ret_val = new DataRange(*data);
204 ret_val->add_data(*data);
213 DataRange *W1DataList::get_data(Date *start_date,
219 start_date->printout();
220 end_date->printout();
221 int_type = get_interval_type(start_date, end_date);
224 log_debug("get avg year data\n");
227 log_debug("get avg month data\n");
230 log_debug("get avg day data\n");
231 ret_val = get_avg_day_data(start_date, end_date);
234 log_debug("get avg hour data\n");
237 log_debug("get avg min data\n");
240 log_debug("get avg sec data\n");