}
}
-string StoreDay::get_dir_name(string device_id, Date *date_time_param) {
+string StoreDay::get_year_dir_name(string device_id,
+ Date *date_time_param) {
+ string ret_val;
+ char buffer[10];
+ string bd_name;
+
+ snprintf(buffer, 10, "%d", date_time_param->year);
+ bd_name = DeviceConfig::get_base_dir_name();
+ bd_name = FileUtil::concat_paths(bd_name, device_id);
+ ret_val = bd_name + "/" + buffer;
+ return ret_val;
+}
+
+string StoreDay::get_dir_name(string device_id,
+ Date *date_time_param) {
string ret_val;
char buffer[30];
string bd_name;
return ret_val;
}
-string StoreDay::get_file_name(string device_id, Date *date_time_param) {
+string StoreDay::get_file_name(string device_id,
+ Date *date_time_param) {
string ret_val;
string fname;
char buffer[30];
- snprintf(buffer, 30, "%d-%02d-%02d", date_time_param->year, date_time_param->month, date_time_param->day);
+ snprintf(buffer,
+ 30,
+ "%d-%02d-%02d",
+ date_time_param->year,
+ date_time_param->month,
+ date_time_param->day);
fname = buffer;
fname = fname + DATAFILE_SUFFIX;
ret_val = get_dir_name(device_id, date_time_param);
/* needs to be casted to long unsigned int value is "unsigned int" in some
toolchains and that would otherwise cause an warning/error
*/
- log_info("[%s] writing %lu data values to save.\n", device_id.c_str(),
+ log_info("[%s] saving %lu data values.\n", device_id.c_str(),
(long unsigned int)data_list->size());
// TODO: add mutex to protect string_list while it's read and emptied
for(iter = data_list->begin(); iter != data_list->end(); iter++) {
return Store::load(store_fname);
}
-bool StoreDay::exist(string fname_param) {
+bool StoreDay::exist(string fname_param, bool writable) {
+ bool ret_val;
+ ret_val = FileUtil::file_exist(fname_param.c_str(), writable);
+ return ret_val;
+}
+
+bool StoreDay::exist(string dev_id_param,
+ Date *date,
+ bool writable) {
+ bool ret_val;
+ string f_name;
+
+ f_name = get_file_name(dev_id_param, date);
+ ret_val = FileUtil::file_exist(f_name.c_str(), writable);
+ return ret_val;
+}
+
+bool StoreDay::exist_in_month(string dev_id_param,
+ Date *date,
+ bool writable) {
+ string dirname;
+ bool ret_val;
+
+ dirname = StoreDay::get_dir_name(dev_id_param, date);
+ ret_val = FileUtil::dir_exist(dirname.c_str(), writable);
+ return ret_val;
+}
+
+bool StoreDay::exist_in_year(string dev_id_param,
+ Date *date,
+ bool writable) {
+ string dirname;
bool ret_val;
- ret_val = (access(fname_param.c_str(), F_OK) == 0);
+
+ dirname = StoreDay::get_year_dir_name(dev_id_param, date);
+ ret_val = FileUtil::dir_exist(dirname.c_str(), writable);
return ret_val;
}
-bool StoreDay::exist() {
- return exist(store_fname);
+bool StoreDay::exist(bool writable) {
+ return exist(store_fname, writable);
}
static int get_summary_period_as_freq_seconds(EnumSummaryPeriod period_type_param) {
Date date;
DataRange *ret_val;
int frq_sec;
+ bool succ;
- ret_val = new DataRange();
+ ret_val = NULL;
calc = NULL;
limit_d = NULL;
+ succ = true;
frq_sec = get_summary_period_as_freq_seconds(period_type_param);
if (store_data == NULL) {
- load();
+ succ = load();
}
- if (store_data != NULL) {
+ if ((succ == true) &&
+ (store_data != NULL)) {
row_count = store_data->get_count();
if (row_count > 0) {
col_count = store_data->get_data_item_value_count();
if (col_count > 0) {
+ ret_val = new DataRange();
for (ii = 0; ii < row_count; ii++) {
data = store_data->get(ii);
if (data != NULL) {
limit_d->sec = 0;
limit_d->inc_seconds(frq_sec);
}
- else {
- date = data->get_date();
- if ((ii <= (row_count -1)) &&
- ((frq_sec == -1) || (date.before(limit_d)))) {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
- }
+ date = data->get_date();
+ if ((ii <= (row_count -1)) &&
+ ((frq_sec == -1) || (date.before(limit_d)))) {
+ for (jj = 0; jj < col_count; jj++) {
+ calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
}
- if ((ii >= (row_count -1)) ||
- ((frq_sec != -1) && (date.before(limit_d) == false))) {
- ret_val->add(calc);
- delete(calc);
- calc = data->clone();
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(frq_sec);
+ }
+ if ((ii >= (row_count -1)) ||
+ ((frq_sec != -1) && (date.before(limit_d) == false))) {
+ ret_val->add(calc);
+ delete(calc);
+ calc = data->clone();
+ if (limit_d != NULL) {
+ delete(limit_d);
}
+ limit_d = data->get_date().clone();
+ limit_d->min = 0;
+ limit_d->sec = 0;
+ limit_d->inc_seconds(frq_sec);
}
delete(data);
}
Date date;
DataRange *ret_val;
int frq_sec;
+ bool succ;
- ret_val = new DataRange();
+ ret_val = NULL;
calc = NULL;
limit_d = NULL;
d_count = 1;
+ succ = true;
frq_sec = get_summary_period_as_freq_seconds(period_type_param);
if (store_data == NULL) {
- load();
+ succ = load();
}
- if (store_data != NULL) {
+ if ((succ == true) &&
+ (store_data != NULL)) {
row_count = store_data->get_count();
if (row_count > 0) {
col_count = store_data->get_data_item_value_count();
if (col_count > 0) {
+ ret_val = new DataRange();
for (ii = 0; ii < row_count; ii++) {
data = store_data->get(ii);
if (data != NULL) {
limit_d->sec = 0;
limit_d->inc_seconds(frq_sec);
}
- else {
- date = data->get_date();
- if ((ii <= (row_count -1)) &&
- ((frq_sec == -1) || (date.before(limit_d)))) {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
- }
- d_count++;
+ date = data->get_date();
+ if ((ii <= (row_count -1)) &&
+ ((frq_sec == -1) || (date.before(limit_d)))) {
+ for (jj = 0; jj < col_count; jj++) {
+ calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
}
- if ((ii >= (row_count -1)) ||
- ((frq_sec != -1) && (date.before(limit_d) == false))) {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] / d_count;
- }
- ret_val->add(calc);
- delete(calc);
- d_count = 1;
- calc = data->clone();
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(frq_sec);
+ d_count++;
+ }
+ if ((ii >= (row_count -1)) ||
+ ((frq_sec != -1) && (date.before(limit_d) == false))) {
+ for (jj = 0; jj < col_count; jj++) {
+ calc->value_arr[jj] = calc->value_arr[jj] / d_count;
}
+ ret_val->add(calc);
+ delete(calc);
+ d_count = 1;
+ calc = data->clone();
+ if (limit_d != NULL) {
+ delete(limit_d);
+ }
+ limit_d = data->get_date().clone();
+ limit_d->min = 0;
+ limit_d->sec = 0;
+ limit_d->inc_seconds(frq_sec);
}
delete(data);
}
Date date;
DataRange *ret_val;
int frq_sec;
+ bool succ;
- ret_val = new DataRange();
+ ret_val = NULL;
calc1 = NULL;
calc2 = NULL;
limit_d = NULL;
+ succ = true;
frq_sec = get_summary_period_as_freq_seconds(period_type_param);
if (store_data == NULL) {
- load();
+ succ = load();
}
- if (store_data != NULL) {
+ if ((succ == true) &&
+ (store_data != NULL)) {
row_count = store_data->get_count();
if (row_count > 0) {
col_count = store_data->get_data_item_value_count();
if (col_count > 0) {
+ ret_val = new DataRange();
for (ii = 0; ii < row_count; ii++) {
data = store_data->get(ii);
if (data != NULL) {
}
calc2 = NULL;
}
- else {
- date = data->get_date();
- if ((ii <= (row_count -1)) &&
- ((frq_sec == -1) || (date.before(limit_d)))) {
- if (calc2 != NULL) {
- delete(calc2);
- }
- calc2 = data->clone();
- }
- if ((ii >= (row_count -1)) ||
- ((frq_sec != -1) && (date.before(limit_d) == false))) {
- if (calc2 == NULL) {
- calc2 = calc1->clone();
- }
- for (jj = 0; jj < col_count; jj++) {
- calc2->value_arr[jj] = calc2->value_arr[jj] - calc1->value_arr[jj];
- }
- ret_val->add(calc2);
- delete(calc1);
- calc1 = data->clone();
+ date = data->get_date();
+ if ((ii <= (row_count -1)) &&
+ ((frq_sec == -1) || (date.before(limit_d)))) {
+ if (calc2 != NULL) {
delete(calc2);
- calc2 = NULL;
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(frq_sec);
}
+ calc2 = data->clone();
+ }
+ if ((ii >= (row_count -1)) ||
+ ((frq_sec != -1) && (date.before(limit_d) == false))) {
+ if (calc2 == NULL) {
+ calc2 = calc1->clone();
+ }
+ for (jj = 0; jj < col_count; jj++) {
+ calc2->value_arr[jj] = calc2->value_arr[jj] - calc1->value_arr[jj];
+ }
+ ret_val->add(calc2);
+ delete(calc1);
+ calc1 = data->clone();
+ delete(calc2);
+ calc2 = NULL;
+ if (limit_d != NULL) {
+ delete(limit_d);
+ }
+ limit_d = data->get_date().clone();
+ limit_d->min = 0;
+ limit_d->sec = 0;
+ limit_d->inc_seconds(frq_sec);
}
delete(data);
}
Date date;
DataRange *ret_val;
int frq_sec;
+ bool succ;
- ret_val = new DataRange();
+ ret_val = NULL;
calc = NULL;
limit_d = NULL;
frq_sec = get_summary_period_as_freq_seconds(period_type_param);
+ succ = true;
if (store_data == NULL) {
- load();
+ succ = load();
}
- if (store_data != NULL) {
+ if ((succ == true) &&
+ (store_data != NULL)) {
row_count = store_data->get_count();
if (row_count > 0) {
col_count = store_data->get_data_item_value_count();
if (col_count > 0) {
+ ret_val = new DataRange();
for (ii = 0; ii < row_count; ii++) {
data = store_data->get(ii);
if (data != NULL) {
limit_d->sec = 0;
limit_d->inc_seconds(frq_sec);
}
- else {
- date = data->get_date();
- if ((ii <= (row_count -1)) &&
- ((frq_sec == -1) || (date.before(limit_d)))) {
- int changed = 0;
- if (max == true) {
- for (jj = 0; jj < col_count; jj++) {
- if (calc->value_arr[jj] < data->value_arr[jj]) {
- calc->value_arr[jj] = data->value_arr[jj];
- changed = 1;
- }
+ date = data->get_date();
+ if ((ii <= (row_count -1)) &&
+ ((frq_sec == -1) || (date.before(limit_d)))) {
+ int changed = 0;
+ if (max == true) {
+ for (jj = 0; jj < col_count; jj++) {
+ if (calc->value_arr[jj] < data->value_arr[jj]) {
+ calc->value_arr[jj] = data->value_arr[jj];
+ changed = 1;
}
}
- else {
- for (jj = 0; jj < col_count; jj++) {
- if (data->value_arr[jj] < calc->value_arr[jj]) {
- calc->value_arr[jj] = data->value_arr[jj];
- changed = 1;
- }
+ }
+ else {
+ for (jj = 0; jj < col_count; jj++) {
+ if (data->value_arr[jj] < calc->value_arr[jj]) {
+ calc->value_arr[jj] = data->value_arr[jj];
+ changed = 1;
}
}
- if (changed == 1) {
- Date new_date;
+ }
+ if (changed == 1) {
+ Date new_date;
- new_date = data->get_date();
- calc->set_date(&new_date);
- }
+ new_date = data->get_date();
+ calc->set_date(&new_date);
}
- if ((ii >= (row_count -1)) ||
- ((frq_sec != -1) && (date.before(limit_d) == false))) {
- ret_val->add(calc);
- delete(calc);
- calc = data->clone();
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(frq_sec);
+ }
+ if ((ii >= (row_count -1)) ||
+ ((frq_sec != -1) && (date.before(limit_d) == false))) {
+ ret_val->add(calc);
+ delete(calc);
+ calc = data->clone();
+ if (limit_d != NULL) {
+ delete(limit_d);
}
+ limit_d = data->get_date().clone();
+ limit_d->min = 0;
+ limit_d->sec = 0;
+ limit_d->inc_seconds(frq_sec);
}
delete(data);
}
}
return ret_val;
}
+
+bool StoreDay::data_day_scan_days_in_month(string dev_id_param,
+ Date *new_date,
+ Date *max_date) {
+ bool ret_val;
+ string fname;
+
+ ret_val = false;
+ while((ret_val == false) &&
+ (new_date->before(max_date))) {
+ new_date->next_day();
+ fname = get_file_name(dev_id_param, new_date);
+ if (exist(fname, false) == true) {
+ ret_val = true;
+ break;
+ }
+ if (new_date->is_last_day_of_month() == true) {
+ break;
+ }
+ }
+ return ret_val;
+}
+
+bool StoreDay::data_day_scan_month_in_year(string dev_id_param,
+ Date *new_date,
+ Date *max_date) {
+ bool ret_val;
+
+ ret_val = false;
+ // next scan months dir existence under the first year
+ while((ret_val == false) &&
+ (new_date->before(max_date))) {
+ new_date->next_month();
+ if (exist_in_month(dev_id_param,
+ new_date,
+ false)) {
+ ret_val = data_day_scan_days_in_month(dev_id_param,
+ new_date,
+ max_date);
+ if (ret_val == true)
+ break;
+ }
+ if (new_date->month == 12)
+ break;
+ }
+ return ret_val;
+}
+
+bool StoreDay::data_day_scan_years(string dev_id_param,
+ Date *new_date,
+ Date *max_date) {
+ bool ret_val;
+
+ ret_val = false;
+ while((ret_val == false) &&
+ (new_date->before(max_date))) {
+ new_date->next_year();
+ if (exist_in_year(dev_id_param,
+ new_date,
+ false)) {
+ ret_val = data_day_scan_month_in_year(dev_id_param,
+ new_date,
+ max_date);
+ if (ret_val == true)
+ break;
+ }
+ }
+ return ret_val;
+}
+
+bool StoreDay::get_next_date_with_data(std::string dev_id_param,
+ plp::Date *next_date,
+ plp::Date *max_date) {
+ bool ret_val;
+ Date *new_date;
+ string fname;
+ string dirname;
+
+ new_date = next_date->clone();
+ // scan first dates in current month
+ ret_val = data_day_scan_days_in_month(dev_id_param,
+ new_date,
+ max_date);
+ if (ret_val == false) {
+ ret_val = data_day_scan_month_in_year(dev_id_param,
+ new_date,
+ max_date);
+ if (ret_val == false) {
+ ret_val = data_day_scan_years(dev_id_param,
+ new_date,
+ max_date);
+ }
+ }
+ if (ret_val == true)
+ new_date->copy(next_date);
+ else
+ max_date->copy(next_date);
+ delete(new_date);
+ return ret_val;
+}