Skip to content

Commit

Permalink
Optimize the error log
Browse files Browse the repository at this point in the history
  • Loading branch information
rafa0128 committed Apr 10, 2023
1 parent c0fca72 commit 18044f7
Show file tree
Hide file tree
Showing 12 changed files with 273 additions and 118 deletions.
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -132,5 +132,8 @@ dmypy.json
# Pyre type checker
.pyre/

# report
report/
# solox
report/
.log
.xls
adblog/
21 changes: 14 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,31 @@ We are committed to solving inefficient, cumbersome test execution, and our goal
<img src="https://cdn.nlark.com/yuque/0/2022/png/153412/1662348054846-b0164165-e83a-443e-9a05-8c1f9ddb355f.png?x-oss-process=image%2Fresize%2Cw_1500%2Climit_0" width="100%" >

## 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
Expand All @@ -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

```
Expand All @@ -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

Expand All @@ -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

4 changes: 2 additions & 2 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 (在国内推荐使用镜像下载)

Expand Down Expand Up @@ -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']
```

## 对比模式
Expand Down
2 changes: 1 addition & 1 deletion solox/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

from __future__ import absolute_import

__version__ = '2.5.7'
__version__ = '2.5.8'
1 change: 1 addition & 0 deletions solox/public/apm.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Target:
Battery = 'battery'
Network = 'network'
FPS = 'fps'
GPU = 'gpu'

class CPU(object):

Expand Down
4 changes: 2 additions & 2 deletions solox/public/apm_pk.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
48 changes: 29 additions & 19 deletions solox/public/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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
Expand All @@ -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 = {}
Expand Down
74 changes: 74 additions & 0 deletions solox/templates/analysis.html
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,29 @@
</div>
</div>
</div>
{% if platform == 'iOS' %}
<div class="col-sm-6 col-lg-2">
<div class="card card-sm">
<div class="card-body">
<div class="row align-items-center">
<div class="col-auto">
<span class="bg-purple text-white avatar">
GPU
</span>
</div>
<div class="col">
<div class="font-weight-medium">
GPU
</div>
<div class="text-muted">
Avg: {{ apm_data.gpu }}
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}
</div>
</div>
<div class="col-12">
Expand Down Expand Up @@ -469,6 +492,24 @@
<div id="chart-networkdata"></div>
</div>
</div>
{% if platform == 'iOS' %}
<div class="card gpu-card mt-3">
<div class="card-header">
<div class='card-title'>GPU(%)</div>
<div class="card-actions btn-actions">
<a class="btn-action cursor-pointer" id="gpu_loading">
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" /><path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" /></svg>
</a>
<a class="btn-action cursor-pointer" id="gpu_png" onclick="screenshot('gpu-card','gpu.png')">
<svg t="1646303797379" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5790" width="2000" height="2000"><path d="M897.856 842.56c14.464-6.72 18.624-20.48 9.28-30.848l-241.216-263.296a25.792 25.792 0 0 0-7.68-5.888c-14.016-7.296-33.6-5.184-43.776 4.8l-241.152 233.088-103.808-70.528a30.912 30.912 0 0 0-3.52-1.92c-14.08-7.36-33.664-4.992-43.776 4.864l-101.056 97.728a18.368 18.368 0 0 0-6.08 13.952c0.512 12.288 14.848 22.016 32.128 21.696h732.8a40.768 40.768 0 0 0 17.856-3.648zM259.84 399.68a78.464 78.464 0 0 0 117.504 67.84 78.272 78.272 0 0 0 0-135.744A78.208 78.208 0 0 0 259.84 399.68" p-id="5791"></path><path d="M864.832 872.256H159.232a83.84 83.84 0 0 1-83.776-83.776V235.52a83.84 83.84 0 0 1 83.776-83.776h705.536a83.84 83.84 0 0 1 83.776 83.776v552.96a83.84 83.84 0 0 1-83.712 83.776zM159.232 183.744a51.84 51.84 0 0 0-51.776 51.776v552.96a51.84 51.84 0 0 0 51.776 51.776h705.536a51.84 51.84 0 0 0 51.776-51.776V235.52a51.84 51.84 0 0 0-51.776-51.776H159.232z" p-id="5792"></path></svg>
</a>
</div>
</div>
<div class="card-body">
<div id="chart-gpu"></div>
</div>
</div>
{% endif %}

</div>
{% endblock %}
Expand All @@ -483,6 +524,9 @@
if(platform == 'Android'){
$('#jank_loading').click();
}
if(platform == 'iOS'){
$('#gpu_loading').click();
}
$('#battery_loading').click();
$('#networkdata_loading').click();
});
Expand Down Expand Up @@ -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 () {
Expand Down
Loading

0 comments on commit 18044f7

Please sign in to comment.