diff --git a/tools/distribute/devkit_distribute/bin/entrance.py b/tools/distribute/devkit_distribute/bin/entrance.py index b29ab2d6274dc6854bcce20124da3682d7e7dc21..0a58251602ee600d4681ce57de375f873407b0fe 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..b11e539fd53f2423162d86d2d1ace1dd3c6bf247 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..6a580ee7c41e330d32372db06e9e35cc42b47fc1 --- /dev/null +++ b/tools/distribute/devkit_distribute/bin/report/template/chart_template.py @@ -0,0 +1,206 @@ +CHART_TEMPLATE = """ + + + + + + CSV Line Charts + + + + +
+ Icon +

Kunpeng DevKit

+ +
+ +
+

Elapsed Time

+ +
+

Mean:

+

Max:

+

Min:

+
+
+ +
+

Idle Time

+ +
+

Mean:

+

Max:

+

Min:

+
+
+ +
+

Latency

+ +
+

Mean:

+

Max:

+

Min:

+
+
+ + + + + +""" \ No newline at end of file diff --git a/tools/distribute/devkit_distribute/bin/report/template/git_log_template.py b/tools/distribute/devkit_distribute/bin/report/template/git_log_template.py new file mode 100644 index 0000000000000000000000000000000000000000..e4e814aa90c2438824bf9078eadd0c03183df8b7 --- /dev/null +++ b/tools/distribute/devkit_distribute/bin/report/template/git_log_template.py @@ -0,0 +1,114 @@ +lGIT_LOG_TEMPLATE = """ + + + + + + Table Page + + + + +
+ Icon +

Kunpeng DevKit

+ +
+ +
+

Today's Git Log

+ + + + + +
+
+ + + + + + + +""" \ No newline at end of file diff --git a/tools/distribute/devkit_distribute/bin/template.py b/tools/distribute/devkit_distribute/bin/report/template/performance_template.py similarity index 89% rename from tools/distribute/devkit_distribute/bin/template.py rename to tools/distribute/devkit_distribute/bin/report/template/performance_template.py index 23f1915f233edb889cdb34167b3e1e6a202bf6cc..035f58a2807edd9d7ac838ff97a7f362a836c666 100644 --- a/tools/distribute/devkit_distribute/bin/template.py +++ b/tools/distribute/devkit_distribute/bin/report/template/performance_template.py @@ -1,4 +1,4 @@ -performance_report = """ +PERFORMANCE_TEMPLATE = """ @@ -32,6 +32,10 @@ performance_report = """ margin-left: 250px; padding: 20px; } + .dropdown { + display: inline-block; + width: 100%; + } .dropdown-content { display: none; position: absolute; @@ -53,14 +57,14 @@ performance_report = """ border-bottom: none; } .dropdown-content a:hover { - background-color: #4CAF50; + background-color: #831020; color: white; } .dropdown.open .dropdown-content { display: block; } .dropbtn { - background-color: #4CAF50; + background-color: #831020; color: white; padding: 10px; text-align: center; @@ -94,7 +98,7 @@ performance_report = """
- Icn + Icon

Kunpeng DevKit