import dataclasses import numpy @dataclasses.dataclass class BaseInfo: id: str specification: str database_version: str version: str extract_log_rule_version: str extract_metrics_rule_version: str @dataclasses.dataclass class BaseQuantileStatistics: min: float max: float median: float q1: float q3: float @dataclasses.dataclass class BaseDescriptiveStatistics: mean: float std: float variance: float @dataclasses.dataclass class BaseItemStatisticsInfo: name: str # metric name + metrics label data: numpy.array(float) quantile_statistics: BaseQuantileStatistics descriptive_statistics: BaseDescriptiveStatistics status: str # normal, anomaly, unknown trend: str # up, down, unknown @dataclasses.dataclass class LogStatisticsInfo: slow_query_count: BaseItemStatisticsInfo # slow query count statistics new_slow_query_count: list[BaseItemStatisticsInfo] topn_slow_query_log: list[BaseItemStatisticsInfo] # slow query log @dataclasses.dataclass class MetricsTrendDescription: stats: BaseItemStatisticsInfo highly_correlated: list[BaseItemStatisticsInfo] # highly correlated metrics or slow query logs class DiagnosisReportTemplate: base_info: BaseInfo log_statistics_info: LogStatisticsInfo metrics_trend_description: MetricsTrendDescription def __init__(self, base_info, log_statistics_info, metrics_trend_description): self.base_info = base_info self.log_statistics_info = log_statistics_info self.metrics_trend_description = metrics_trend_description def to_html(self): pass