From 18044f71a8a51ccb962537c8ded50a5904b17c0b Mon Sep 17 00:00:00 2001 From: chenhq Date: Mon, 10 Apr 2023 16:01:04 +0800 Subject: [PATCH] Optimize the error log --- .gitignore | 7 +- README.md | 21 ++-- README.zh.md | 4 +- solox/__init__.py | 2 +- solox/public/apm.py | 1 + solox/public/apm_pk.py | 4 +- solox/public/common.py | 48 +++++---- solox/templates/analysis.html | 74 ++++++++++++++ solox/templates/base.html | 17 ++-- solox/templates/index.html | 179 +++++++++++++++++++++------------- solox/view/apis.py | 31 +++++- solox/view/pages.py | 3 +- 12 files changed, 273 insertions(+), 118 deletions(-) diff --git a/.gitignore b/.gitignore index 216ae3e..3e59c48 100644 --- a/.gitignore +++ b/.gitignore @@ -132,5 +132,8 @@ dmypy.json # Pyre type checker .pyre/ -# report -report/ \ No newline at end of file +# solox +report/ +.log +.xls +adblog/ \ No newline at end of file diff --git a/README.md b/README.md index 40b08db..e223e03 100644 --- a/README.md +++ b/README.md @@ -25,26 +25,31 @@ We are committed to solving inefficient, cumbersome test execution, and our goal ## Installation + ```shell -1.Python:3.10+ (Python 3.6 3.7 3.8 3.9 Please download a version of solox lower than 2.5.4) +1.Python:3.10+ (Python 3.6 ~ 3.9 Please download a version of solox lower than 2.5.4) 2.pip install -U solox 3.pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -U solox (China) -notice: If Windows users need to test ios, install and start Itunes +Note: If Windows users need to test ios, install and start Itunes ``` ## Startup SoloX + ### default + ```shell python -m solox ``` + ### customize ```shell python -m solox --host={ip} --port={port} ``` -## Collect in python +## Collect in python + ```python from solox.public.apm import APM # solox version >= 2.1.2 @@ -61,7 +66,8 @@ battery = apm.collectBattery() # level:% temperature:°C current:mA voltage:mV p gpu = apm.collectGpu() # % only supports ios ``` -## Collect in API +## Collect in API + ### Start the service in the background ``` @@ -72,14 +78,16 @@ Windows: start /min python3 -m solox & ``` ### Request apm data from api + ```shell Android: http://{ip}:{port}/apm/collect?platform=Android&deviceid=ca6bd5a5&pkgname=com.bilibili.app.in&target=cpu iOS: http://{ip}:{port}/apm/collect?platform=iOS&pkgname=com.bilibili.app.in&target=cpu -target in ['cpu','memory','network','fps','battery'] +target in ['cpu','memory','network','fps','battery','gpu'] ``` ## PK Model + - 2-devices: test the same app on two different phones - 2-apps: test two different apps on two phones with the same configuration @@ -94,9 +102,8 @@ notice: only supports android ## Terminal - windows: PowerShell -- macOS:iTerm2 (https://iterm2.com/) +- macOS:iTerm2 (https://iterm2.com/) ## Thanks - https://github.com/alibaba/taobao-iphone-device - diff --git a/README.zh.md b/README.zh.md index 69895d6..ab2e2ab 100644 --- a/README.zh.md +++ b/README.zh.md @@ -27,7 +27,7 @@ SoloX - Android/iOS性能数据实时采集工具。 ## 安装 ```shell -1.Python:3.10+ (Python 3.6 3.7 3.8 3.9 请下载低于2.5.4的版本) +1.Python:3.10+ (Python 3.6 ~ 3.9 请下载低于2.5.4的版本) 2.pip install -U solox 3.pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -U solox (在国内推荐使用镜像下载) @@ -76,7 +76,7 @@ Windows: start /min python3 -m solox & Android: http://{ip}:{port}/apm/collect?platform=Android&deviceid=ca6bd5a5&pkgname=com.bilibili.app.in&target=cpu iOS: http://{ip}:{port}/apm/collect?platform=iOS&pkgname=com.bilibili.app.in&target=cpu -target in ['cpu','memory','network','fps','battery'] +target in ['cpu','memory','network','fps','battery','gpu'] ``` ## 对比模式 diff --git a/solox/__init__.py b/solox/__init__.py index b5216d0..523d82e 100644 --- a/solox/__init__.py +++ b/solox/__init__.py @@ -2,4 +2,4 @@ from __future__ import absolute_import -__version__ = '2.5.7' +__version__ = '2.5.8' diff --git a/solox/public/apm.py b/solox/public/apm.py index c72ea6f..690c89c 100644 --- a/solox/public/apm.py +++ b/solox/public/apm.py @@ -20,6 +20,7 @@ class Target: Battery = 'battery' Network = 'network' FPS = 'fps' + GPU = 'gpu' class CPU(object): diff --git a/solox/public/apm_pk.py b/solox/public/apm_pk.py index 769d0e9..f4cc9f3 100644 --- a/solox/public/apm_pk.py +++ b/solox/public/apm_pk.py @@ -153,7 +153,7 @@ def getNetWorkData(self): class FPS_PK: - def __init__(self, pkgNameList: list, deviceId1, deviceId2, surfaceview='true'): + def __init__(self, pkgNameList: list, deviceId1, deviceId2, surfaceview=True): self.pkgNameList = pkgNameList self.deviceId1 = deviceId1 self.deviceId2 = deviceId2 @@ -162,7 +162,7 @@ def __init__(self, pkgNameList: list, deviceId1, deviceId2, surfaceview='true'): def getAndroidFps(self, deviceId, pkgName): """get Android Fps, unit:HZ""" monitors = FPSMonitor(device_id=deviceId, package_name=pkgName, frequency=1, - start_time=TimeUtils.getCurrentTimeUnderline(), surfaceview=self.surfaceview) + surfaceview=self.surfaceview, start_time=TimeUtils.getCurrentTimeUnderline()) monitors.start() fps, jank = monitors.stop() return fps diff --git a/solox/public/common.py b/solox/public/common.py index ca9fb1e..8f34d91 100644 --- a/solox/public/common.py +++ b/solox/public/common.py @@ -164,7 +164,7 @@ def export_excel(self, platform, scene): android_log_file_list = ['cpu_app','cpu_sys','mem_total','mem_native','mem_dalvik', 'battery_level', 'battery_tem','upflow','downflow','fps'] ios_log_file_list = ['cpu_app','cpu_sys', 'mem_total', 'battery_tem', 'battery_current', - 'battery_voltage', 'battery_power','upflow','downflow','fps'] + 'battery_voltage', 'battery_power','upflow','downflow','fps','gpu'] log_file_list = android_log_file_list if platform == 'Android' else ios_log_file_list wb = xlwt.Workbook(encoding = 'utf-8') @@ -279,6 +279,12 @@ def getCpuLog(self, platform, scene): result = {'status': 1, 'cpuAppData': targetDic['cpuAppData'], 'cpuSysData': targetDic['cpuSysData']} return result + def getGpuLog(self, platform, scene): + targetDic = {} + targetDic['gpu'] = self.readLog(scene=scene, filename='gpu.log')[0] + result = {'status': 1, 'gpu': targetDic['gpu']} + return result + def getMemLog(self, platform, scene): targetDic = {} targetDic['memTotalData'] = self.readLog(scene=scene, filename='mem_total.log')[0] @@ -408,36 +414,39 @@ def _setAndroidPerfs(self, scene): def _setiOSPerfs(self, scene): """Aggregate APM data for iOS""" - cpuAppData = self.readLog(scene=scene, filename=f'cpu_app.log')[1] + cpuAppData = self.readLog(scene=scene, filename='cpu_app.log')[1] cpuAppRate = f'{round(sum(cpuAppData) / len(cpuAppData), 2)}%' - cpuSystemData = self.readLog(scene=scene, filename=f'cpu_sys.log')[1] + cpuSystemData = self.readLog(scene=scene, filename='cpu_sys.log')[1] cpuSystemRate = f'{round(sum(cpuSystemData) / len(cpuSystemData), 2)}%' - totalPassData = self.readLog(scene=scene, filename=f'mem_total.log')[1] + totalPassData = self.readLog(scene=scene, filename='mem_total.log')[1] totalPassAvg = f'{round(sum(totalPassData) / len(totalPassData), 2)}MB' - fpsData = self.readLog(scene=scene, filename=f'fps.log')[1] + fpsData = self.readLog(scene=scene, filename='fps.log')[1] fpsAvg = f'{int(sum(fpsData) / len(fpsData))}HZ/s' - flowSendData = self.readLog(scene=scene, filename=f'upflow.log')[1] + flowSendData = self.readLog(scene=scene, filename='upflow.log')[1] flowSend = f'{round(float(sum(flowSendData) / 1024), 2)}MB' - flowRecvData = self.readLog(scene=scene, filename=f'downflow.log')[1] + flowRecvData = self.readLog(scene=scene, filename='downflow.log')[1] flowRecv = f'{round(float(sum(flowRecvData) / 1024), 2)}MB' - batteryTemlData = self.readLog(scene=scene, filename=f'battery_tem.log')[1] + batteryTemlData = self.readLog(scene=scene, filename='battery_tem.log')[1] batteryTeml = round(sum(batteryTemlData) / len(batteryTemlData), 2) - batteryCurrentData = self.readLog(scene=scene, filename=f'battery_current.log')[1] + batteryCurrentData = self.readLog(scene=scene, filename='battery_current.log')[1] batteryCurrent = round(sum(batteryCurrentData) / len(batteryCurrentData), 2) - batteryVoltageData = self.readLog(scene=scene, filename=f'battery_voltage.log')[1] + batteryVoltageData = self.readLog(scene=scene, filename='battery_voltage.log')[1] batteryVoltage = round(sum(batteryVoltageData) / len(batteryVoltageData), 2) - batteryPowerData = self.readLog(scene=scene, filename=f'battery_power.log')[1] + batteryPowerData = self.readLog(scene=scene, filename='battery_power.log')[1] batteryPower = round(sum(batteryPowerData) / len(batteryPowerData), 2) + gpuData = self.readLog(scene=scene, filename='gpu.log')[1] + gpu = round(sum(gpuData) / len(gpuData), 2) + apm_dict = {} apm_dict['cpuAppRate'] = cpuAppRate apm_dict['cpuSystemRate'] = cpuSystemRate @@ -452,29 +461,30 @@ def _setiOSPerfs(self, scene): apm_dict['batteryCurrent'] = batteryCurrent apm_dict['batteryVoltage'] = batteryVoltage apm_dict['batteryPower'] = batteryPower + apm_dict['gpu'] = gpu return apm_dict def _setpkPerfs(self, scene): """Aggregate APM data for pk model""" - cpuAppData1 = self.readLog(scene=scene, filename=f'cpu_app1.log')[1] + cpuAppData1 = self.readLog(scene=scene, filename='cpu_app1.log')[1] cpuAppRate1 = f'{round(sum(cpuAppData1) / len(cpuAppData1), 2)}%' - cpuAppData2 = self.readLog(scene=scene, filename=f'cpu_app2.log')[1] + cpuAppData2 = self.readLog(scene=scene, filename='cpu_app2.log')[1] cpuAppRate2 = f'{round(sum(cpuAppData2) / len(cpuAppData2), 2)}%' - totalPassData1 = self.readLog(scene=scene, filename=f'mem1.log')[1] + totalPassData1 = self.readLog(scene=scene, filename='mem1.log')[1] totalPassAvg1 = f'{round(sum(totalPassData1) / len(totalPassData1), 2)}MB' - totalPassData2 = self.readLog(scene=scene, filename=f'mem2.log')[1] + totalPassData2 = self.readLog(scene=scene, filename='mem2.log')[1] totalPassAvg2 = f'{round(sum(totalPassData2) / len(totalPassData2), 2)}MB' - fpsData1 = self.readLog(scene=scene, filename=f'fps1.log')[1] + fpsData1 = self.readLog(scene=scene, filename='fps1.log')[1] fpsAvg1 = f'{int(sum(fpsData1) / len(fpsData1))}HZ/s' - fpsData2 = self.readLog(scene=scene, filename=f'fps2.log')[1] + fpsData2 = self.readLog(scene=scene, filename='fps2.log')[1] fpsAvg2 = f'{int(sum(fpsData2) / len(fpsData2))}HZ/s' - networkData1 = self.readLog(scene=scene, filename=f'network1.log')[1] + networkData1 = self.readLog(scene=scene, filename='network1.log')[1] network1 = f'{round(float(sum(networkData1) / 1024), 2)}MB' - networkData2 = self.readLog(scene=scene, filename=f'network2.log')[1] + networkData2 = self.readLog(scene=scene, filename='network2.log')[1] network2 = f'{round(float(sum(networkData2) / 1024), 2)}MB' apm_dict = {} diff --git a/solox/templates/analysis.html b/solox/templates/analysis.html index 374293b..e66cd02 100644 --- a/solox/templates/analysis.html +++ b/solox/templates/analysis.html @@ -368,6 +368,29 @@ + {% if platform == 'iOS' %} +
+
+
+
+
+ + GPU + +
+
+
+ GPU +
+
+ Avg: {{ apm_data.gpu }} +
+
+
+
+
+
+ {% endif %}
@@ -469,6 +492,24 @@
+ {% if platform == 'iOS' %} +
+
+
GPU(%)
+ +
+
+
+
+
+ {% endif %} {% endblock %} @@ -483,6 +524,9 @@ if(platform == 'Android'){ $('#jank_loading').click(); } + if(platform == 'iOS'){ + $('#gpu_loading').click(); + } $('#battery_loading').click(); $('#networkdata_loading').click(); }); @@ -632,6 +676,36 @@ }); } + if(platform == 'iOS'){ + var gpu_chart = new ApexCharts(document.querySelector("#chart-gpu"), options('line')); + gpu_chart.render(); + $('#gpu_loading').click(function () { + $.ajax({ + url: '/apm/log', + type: "GET", + async: true, + cache: false, + data:{ + scene:'{{ scene }}', + target:'gpu', + platform:platform + }, + beforeSend: function () { + SwalLoading('Loading','') + }, + complete: function () { + swal.close(); + }, + success: function (data) { + gpu_chart.updateSeries([{ + name: 'gpu', + data: data['gpu'] + }]) + } + }); + }); + } + var fps_chart = new ApexCharts(document.querySelector("#chart-fps"), options('line')); fps_chart.render(); $('#fps_loading').click(function () { diff --git a/solox/templates/base.html b/solox/templates/base.html index 3e057e5..d312ec9 100644 --- a/solox/templates/base.html +++ b/solox/templates/base.html @@ -44,21 +44,20 @@

- - - {% if lan == 'cn' %} 比对模式 {% else %} PK Model {% endif %} + + + {% if lan == 'cn' %} 普通模式 {% else %} Normal Model {% endif %} {% else %} - {% endif %} - {% endblock %} @@ -152,9 +142,9 @@