From 07cd7f9bc0743c95d71423532308814c025fe0be Mon Sep 17 00:00:00 2001 From: pan <601760354@163.com> Date: Fri, 15 Mar 2024 11:20:39 +0800 Subject: [PATCH] add report module --- .../devkit_distribute/bin/entrance.py | 2 + .../devkit_distribute/bin/report/__init__.py | 0 .../devkit_distribute/bin/report/report.py | 82 +++++++ .../bin/report/template/__init__.py | 0 .../bin/report/template/chart_template.py | 206 ++++++++++++++++++ .../bin/report/template/git_log_template.py | 114 ++++++++++ .../template/performance_template.py} | 27 +-- .../bin/report/template/summary_template.py | 114 ++++++++++ 8 files changed, 532 insertions(+), 13 deletions(-) create mode 100644 tools/distribute/devkit_distribute/bin/report/__init__.py create mode 100644 tools/distribute/devkit_distribute/bin/report/report.py create mode 100644 tools/distribute/devkit_distribute/bin/report/template/__init__.py create mode 100644 tools/distribute/devkit_distribute/bin/report/template/chart_template.py create mode 100644 tools/distribute/devkit_distribute/bin/report/template/git_log_template.py rename tools/distribute/devkit_distribute/bin/{template.py => report/template/performance_template.py} (89%) create mode 100644 tools/distribute/devkit_distribute/bin/report/template/summary_template.py diff --git a/tools/distribute/devkit_distribute/bin/entrance.py b/tools/distribute/devkit_distribute/bin/entrance.py index b29ab2d..0a58251 100644 --- a/tools/distribute/devkit_distribute/bin/entrance.py +++ b/tools/distribute/devkit_distribute/bin/entrance.py @@ -10,6 +10,7 @@ from devkit_utils.error_coce import ErrorCodeEnum, ErrorCodeMsg from devkit_utils.log_config import config_log_ini from devkit_utils.pyinstaller_utils import obtain_root_path from devkit_utils.transport_utils import SSHClientFactory +from report.report import Report ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) @@ -32,6 +33,7 @@ class Distributor: self.devkit_port = args.devkit_port self.devkit_user = args.devkit_user self.devkit_password = args.devkit_password + self.report = Report("./") file_utils.create_dir(self.data_path) def distribute(self): diff --git a/tools/distribute/devkit_distribute/bin/report/__init__.py b/tools/distribute/devkit_distribute/bin/report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/distribute/devkit_distribute/bin/report/report.py b/tools/distribute/devkit_distribute/bin/report/report.py new file mode 100644 index 0000000..b11e539 --- /dev/null +++ b/tools/distribute/devkit_distribute/bin/report/report.py @@ -0,0 +1,82 @@ +import csv +import json +import os +import subprocess +import time + +import pandas as pd +from jinja2 import Template + +from template.git_log_template import GIT_LOG_TEMPLATE +from template.performance_template import PERFORMANCE_TEMPLATE +from template.summary_template import SUMMARY_TEMPLATE +from template.chart_template import CHART_TEMPLATE + +GIT_LOG_RECORD_COMMAND = """ +git --git-dir={}/.git log --since=1.day \ +--pretty=format:'{{"commit": "%H","author": "%an","author_email": "%ae","date": "%ad","message": "%f"}}' +""" + +MAIN_PAGE_FILE = "performance_report.html" +GIT_LOG_FILE = "git_record.html" +SUMMARY_FILE = "performance_summary.html" +CHAT_FILE = "performance_chart.html" + + +class Report: + def __init__(self, report_path): + if not os.path.isdir(report_path): + raise Exception(f"Report path:{report_path} illegal.") + self.report_dir = os.path.join(report_path, str(time.time())) + os.mkdir(self.report_dir) + self.main_template = Template(PERFORMANCE_TEMPLATE) + self.summary_template = Template(SUMMARY_TEMPLATE) + self.git_log_template = Template(GIT_LOG_TEMPLATE) + self.chart_template = Template(CHART_TEMPLATE) + self.main_page = "" + self.summary_page = "" + self.git_log_page = "" + self.chart_page = "" + + def generate_git_log(self, repo_path): + full_command = GIT_LOG_RECORD_COMMAND.format(repo_path) + data = subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE, encoding="utf-8").stdout.readlines() + data = [json.loads(x) for x in data] + git_log = {"git_log_list": data} + self.git_log_page = self.git_log_template.render(git_log) + with open(os.path.join(self.report_dir, GIT_LOG_FILE), "w") as f: + f.write(self.git_log_page) + + def generate_summary(self, csv_file): + data = [] + with open(csv_file, "r") as f: + reader = csv.reader(f) + headers = next(reader) + for row in reader: + o = dict() + for i in range(len(headers)): + o.update({headers[i]: row[i]}) + data.append(o) + summary_list = {"summary_list": data} + self.summary_page = self.summary_template.render(summary_list) + with open(os.path.join(self.report_dir, SUMMARY_FILE), "w+") as f: + f.write(self.summary_page) + + def generate_index(self, ip, id_dict, port="8086", username="devadmin"): + url = f"https://{ip}:{port}" + info = {"url": url, "username": username} + info.update(id_dict) + info_dict = {"info_dict": info} + self.main_page = self.main_template.render(info_dict) + with open(os.path.join(self.report_dir, MAIN_PAGE_FILE), "w") as f: + f.write(self.main_page) + + def generate_chars(self, csv_file): + df = pd.read_csv(csv_file, index_col=False) + df_filterd = df[["timeStamp", "elapsed", "IdleTime", "Latency", "label"]] + df_filterd.columns = ["time", "elapsed", "idle", "latency", "label"] + csv_string = df_filterd.to_csv(index=False) + data = {"csv_content": csv_string} + self.chart_page = self.chart_template.render(data) + with open(os.path.join(self.report_dir, CHAT_FILE), "w") as f: + f.write(self.chart_page) diff --git a/tools/distribute/devkit_distribute/bin/report/template/__init__.py b/tools/distribute/devkit_distribute/bin/report/template/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/distribute/devkit_distribute/bin/report/template/chart_template.py b/tools/distribute/devkit_distribute/bin/report/template/chart_template.py new file mode 100644 index 0000000..6a580ee --- /dev/null +++ b/tools/distribute/devkit_distribute/bin/report/template/chart_template.py @@ -0,0 +1,206 @@ +CHART_TEMPLATE = """ + + +
+ + +Kunpeng DevKit
+ +Mean:
+Max:
+Min:
+Mean:
+Max:
+Min:
+Mean:
+Max:
+Min:
+Kunpeng DevKit
+ +Kunpeng DevKit