struct report_template *report_ptr,
int range_index, int64_t range_id)
{
- struct range_report_template *range_ptr = NULL;
+ struct range_report_template *range_ptr;
+ uint64_t current_index;
+
+ pthread_mutex_lock(&report_ptr->report_template_mutex);
+ current_index = report_ptr->last_idx_in_fs_ranges + 1;
+ if (current_index == 1 && report_ptr->fs_ranges[0] == NULL)
+ current_index = 0; /* This is first UID/PID/PRJID */
+
+ if (current_index == report_ptr->count_ranges)
+ ls3_stats_expand_num_of_ranges(report_ptr,
+ report_ptr->count_ranges +
+ LS3_STATS_COUNT_RANGE_BY_DEFAULT);
+
+ range_ptr = report_ptr->fs_ranges[current_index];
+ if (!range_ptr) {
+ range_ptr = xcalloc(1, sizeof(struct range_report_template));
+ range_ptr->rrt_min = DBL_MAX;
+ range_ptr->rrt_id = range_id;
+ report_ptr->fs_ranges[current_index] = range_ptr;
+ }
+ report_ptr->last_idx_in_fs_ranges = current_index;
+ pthread_mutex_unlock(&report_ptr->report_template_mutex);
return range_ptr;
}
struct report_template *report_ptr,
int range_index, double start, double end)
{
- struct range_report_template *range_ptr = NULL;
+ struct range_report_template *range_ptr;
+
+ pthread_mutex_lock(&report_ptr->report_template_mutex);
+ range_ptr = report_ptr->fs_ranges[range_index];
+ if (!range_ptr) {
+ range_ptr = xcalloc(1, sizeof(struct range_report_template));
+ range_ptr->rrt_min = DBL_MAX;
+ range_ptr->range_start = start;
+ range_ptr->range_end = end;
+ range_ptr->rrt_dev_cnt = -1;
+ report_ptr->fs_ranges[range_index] = range_ptr;
+ }
+ pthread_mutex_unlock(&report_ptr->report_template_mutex);
return range_ptr;
}
const char *dev_name,
bool user_report)
{
+ json_object *j_count;
+ json_object *j_total;
+ json_object *j_min;
+ json_object *j_max;
+ json_object *j_atime;
+ double min;
+ double max;
+ uint64_t l_atime;
+ int last_dev_idx;
+
+ if (user_report) {
+ json_object_object_get_ex(json, "CountFilesInRange", &j_count);
+ json_object_object_get_ex(json, "TotalSizeInRangeKB", &j_total);
+ json_object_object_get_ex(json, "MinSizeKB", &j_min);
+ json_object_object_get_ex(json, "MaxSizeKB", &j_max);
+ json_object_object_get_ex(json, "LastTimeAccess", &j_atime);
+ } else {
+ json_object_object_get_ex(json, "CountInRange", &j_count);
+ json_object_object_get_ex(json, "TotalInRange", &j_total);
+ json_object_object_get_ex(json, "MinValueInRange", &j_min);
+ json_object_object_get_ex(json, "MaxValueInRange", &j_max);
+ }
+
+ range->count_in_range += json_object_get_int64(j_count);
+ range->total_in_range += json_object_get_int64(j_total);
+ min = json_object_get_int64(j_min);
+ max = json_object_get_int64(j_max);
+ last_dev_idx = range->rrt_dev_cnt + 1;
+ range->rrt_dev[last_dev_idx] = xstrdup(dev_name);
+ range->rrt_dev_cnt++;
+
+ if (range->rrt_min > min)
+ range->rrt_min = min;
+
+ if (range->rrt_max < max)
+ range->rrt_max = max;
+
+ if (!user_report)
+ return;
+
+ l_atime = json_object_get_int64(j_atime);
+ if (range->last_time_access < l_atime)
+ range->last_time_access = l_atime;
}
static ls3_stats_range_type ls3_m_get_range_type(ls3_stats_report_type r_type)
return -1;
}
-
static void ls3_m_parsing_report(struct report_template **r_template_ptr,
json_object *report, const char *dev_name,
bool user_report)
main_report = ls3_m_report_init();
main_report->merging = true;
-
+ main_report->report_file_name = xstrdup("merged_report.all");
ls3_m_read_reports(main_report, dir_with_reports);
ls3_stats_printf(main_report);
ls3_stats_destroy(main_report);