import pandas as pd
from jinja2 import Template
from pathlib import Path
def generate_report(cluster_id, date, data, output_html):
sum_total = sum(item['total'] for item in data)
level_component = {}
for item in data:
level = item['level']
component = item['component']
total = item['total']
if level not in level_component:
level_component[level] = {}
level_component[level][component] = level_component[level].get(component, 0) + total
sunburst_labels = ['Total']
sunburst_parents = ['']
sunburst_values = [sum_total]
for level in level_component:
level_total = sum(level_component[level].values())
sunburst_labels.append(level)
sunburst_parents.append('Total')
sunburst_values.append(level_total)
for component in level_component[level]:
sunburst_labels.append(f"{component}")
sunburst_parents.append(level)
sunburst_values.append(level_component[level][component])
# 各level前20数据
level_top20 = {}
for level in set(item['level'] for item in data):
items = [item for item in data if item['level'] == level]
level_top20[level] = sorted(items, key=lambda x: x['total'], reverse=True)[:20]
error_components = {}
for item in data:
if item['level'] == 'ERROR':
error_components[item['component']] = error_components.get(item['component'], 0) + item['total']
error_total = sum(error_components.values())
error_data = [{'component': k, 'total': v} for k, v in error_components.items()]
new_data = [item for item in data if 'new' in item.get('tags', [])]
new_levels = list(set(item['level'] for item in new_data))
template = Template('''