import sys from collections import defaultdict output = {} def print_task_info(task_info): output["task_info"] = task_info flush() def print_json_table(data, level_filter): # 按日期升序排列 dates = sorted(data.keys()) # 收集所有组件(按首次出现的顺序) components = [] seen = set() for date in dates: for entry in data[date]: comp = entry['component'] if comp not in seen: seen.add(comp) components.append(comp) # 固定level顺序 levels = ['ERROR', 'WARN'] if level_filter: levels = level_filter # 构建(component, level)到total的映射 date_records = {} for date in dates: records = defaultdict(int) for entry in data[date]: key = (entry['component'], entry['level']) records[key] = entry['total'] date_records[date] = records # 生成列结构:按level顺序,每个level下按组件顺序 columns = [(level, comp) for level in levels for comp in components] # 准备表格数据 table = [] # 第一行:level level_row = [] level_row.append("LEVEL") level_row.extend([level for level, _ in columns]) table.append(level_row) # 第二行:component comp_row = [] comp_row.append("COMPONENT") comp_row.extend([comp for _, comp in columns]) table.append(comp_row) # 数据行 for date in dates: row = [] row.append(date) for level, comp in columns: row.append(str(date_records[date].get((comp, level), 0))) table.append(row) # col_widths = [max(len(row[i]) for i in range(len(columns))) for row in table] # 打印表格 table_str = "" for row in table: for cell in row: table_str = table_str + f"{' '*(12-len(cell))}{cell}" table_str = table_str + "\n" output["data"] = table_str flush() def print_message(new_message): output["message"] = new_message flush() def flush(): # os.system('cls' if os.name == 'nt' else 'clear') sys.stdout.write('\033c') cat = "" for k, v in output.items(): cat = cat + v + "\n\n" sys.stdout.write(cat) sys.stdout.flush()