def show_report(self, job_db, jobnum_list): self._max_x = Console.getmaxyx()[1] (cat_state_dict, map_cat2desc, cat_subcat_dict) = self._cat_manager.get_category_infos( job_db, jobnum_list) self._cat_cur = len(cat_state_dict) def _sum_cat(cat_key, states): return sum( imap(lambda z: cat_state_dict[cat_key].get(z, 0), states)) for cat_key in cat_state_dict: # Sorted(cat_state_dict, key=lambda x: -self._categories[x][0]): desc = self._cat_manager.format_desc( map_cat2desc[cat_key], cat_subcat_dict.get(cat_key, 0)) completed = _sum_cat(cat_key, [Job.SUCCESS]) total = sum(cat_state_dict[cat_key].values()) job_info_str = '' if self._max_x > 65 + 23: job_info_str = ' (%5d jobs, %6.2f%% )' % ( total, 100 * completed / float(total)) width = min(65 + len(job_info_str), self._max_x) if len(desc) + len(job_info_str) > width: desc = desc[:width - 3 - len(job_info_str)] + '...' self._show_line(ANSI.bold + desc + ANSI.reset + ' ' * (width - (len(desc) + len(job_info_str))) + job_info_str) progressbar = JobProgressBar(sum(cat_state_dict[cat_key].values()), width=width, display_text=(job_info_str != '')) progressbar.update( completed, _sum_cat(cat_key, JobClass.ATWMS.state_list), _sum_cat(cat_key, [Job.RUNNING]), _sum_cat(cat_key, [Job.DONE]), _sum_cat(cat_key, [Job.ABORTED, Job.CANCELLED, Job.FAILED])) self._show_line(str(progressbar))
def __init__(self, config, name, job_db, task=None): ConsoleReport.__init__(self, config, name, job_db, task) (max_y, self._max_x) = Console.getmaxyx() cat_max = config.get_int('report categories max', int(max_y / 5), on_change=None) self._cat_manager = AdaptiveJobCategoryManager(config, job_db, task, cat_max) self._cat_cur = cat_max
def _write(self, value): max_yx = Console.getmaxyx() max_x = min(max_yx[1], self._msg_len_max) value = value.replace('\n', ANSI.erase_line + '\n' + ANSI.erase_line) self._stream.write(value + '\n' + ANSI.wrap_off) activity_list = list(Activity.root.get_children()) max_depth = int(max_yx[0] * self._fold) while len(activity_list) > int(max_yx[0] * self._fold): activity_list = lfilter( lambda activity: activity.depth - 1 < max_depth, activity_list) max_depth -= 1 for activity in activity_list: msg = self._format_activity(max_x, activity.depth - 1, activity, activity_list) self._stream.write(ANSI.erase_line + msg + '\n') self._stream.write(ANSI.erase_down + ANSI.move_up(len(activity_list) + 1) + ANSI.wrap_on) self._stream.flush()