12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # -*- coding: utf-8 -*-
- """
- @author: yq
- @time: 2024/11/1
- @desc: 监控报告
- """
- import threading
- from typing import Dict
- from commom import GeneralException
- from entitys import MonitorConfigEntity, MetricFucResultEntity
- from enums import ResultCodesEnum
- from .report_generate import ReportWord, ReportExcel
- class MonitorMetric():
- def __init__(self, monitor_config_path: str):
- self._monitor_config = MonitorConfigEntity.from_config(monitor_config_path)
- self.lock = threading.Lock()
- self._metric_value_dict: Dict[str, MetricFucResultEntity] = {}
- @property
- def metric_value_dict(self):
- return self._metric_value_dict
- def _update_metric_value_dict(self, key, value):
- with self.lock:
- self._metric_value_dict[key] = value
- # TODO 多线程计算指标
- def calculate_metric(self, *args, **kwargs):
- metric_dict = self._monitor_config.metric_dict
- for metric_code, metric_clazz in metric_dict.items():
- metric_value = metric_clazz.calculate(*args, **kwargs)
- self._update_metric_value_dict(metric_code, metric_value)
- def generate_report(self):
- if ".docx" in self._monitor_config.template_path:
- ReportWord.generate_report(self._metric_value_dict, self._monitor_config.template_path)
- elif ".xlsx" in self._monitor_config.template_path:
- ReportExcel.generate_report(self._metric_value_dict, self._monitor_config.template_path)
- else:
- raise GeneralException(ResultCodesEnum.NOT_FOUND,
- message=f"模板【{self._monitor_config.template_path}】不能处理,请使用【.docx】或【.xlsx】模板")
- if __name__ == "__main__":
- pass
|