暂未分类暂未分类测试数据的可视化-通用化
zphj1987前言
如果测试数据是很大量的数据,并且是基于时间变化的,需要做成一个横轴为时间,纵轴为数值的可视化,这个有很多方法
比如用excel做成图表形式的
或者用powerbi或者其它软件做成波形图
但是找了几个软件都没有想要的效果,grafana那种又太重了,需要配置很多东西,所以这里自己实现了一个简单但是实用的数据分析网页
架构
首先是原始数据,这里需要对原始数据进行处理,把数据处理成时间,数值的csv文件格式的,数量可以很多也没关系
支持通过网页导入,因为测试可能是多轮的,或者多个数据的,所以为了方便,是支持网页直接倒入的
网页是通过命令行启动的,不需要第三方的web服务器,所有的东西都维护在一个目录内,我们看下我们的效果
使用过程
以ceph.log为例,我们拿到的是原始打包好的数据
1 2 3 4 5 6
| [root@lab101 data] 总用量 27228 -rw------- 1 root root 1230784 1月 18 18:28 ceph.log-20210115.gz -rw------- 1 root root 1253789 1月 18 18:28 ceph.log-20210116.gz -rw------- 1 root root 6857295 1月 18 18:28 ceph.log-20210117.gz -rw------- 1 root root 7443114 1月 18 18:28 ceph.log-20210118.gz
|
解压数据
1 2 3 4 5 6 7
| [root@lab101 data] [root@lab101 data] 总用量 270016 -rw------- 1 root root 12583407 1月 18 18:28 ceph.log-20210115 -rw------- 1 root root 12672226 1月 18 18:28 ceph.log-20210116 -rw------- 1 root root 58620471 1月 18 18:28 ceph.log-20210117 -rw------- 1 root root 68756398 1月 18 18:28 ceph.log-20210118
|
汇总数据
1 2 3 4
| [root@lab101 data] [root@lab101 data] [root@lab101 data] [root@lab101 data]
|
处理数据
我们之前的文章有篇awk的有处理数据的方法
1
| cat ceph.log |awk '{for(i=1;i<=NF;i++){if($i~/op\/s/){$3=$i;print $1,$2,$3}}}'|awk '{gsub("op/s","",$3); print $1,$2,$3}'|awk '{if($3~/k/) {gsub("k","",$3); print $1,$2","$3*1000} else {print $1,$2","$3}}' > ceph.log.ops
|
转换成平台可读文件
转换的时候根据数据的长度决定的,我取了四天的数据大概有17万行,这个数据量还是比较大的
1 2 3 4 5 6 7 8 9
| [root@lab101 datadisplay] cat ceph.log.ops | while read line do mytime=`echo $line|cut -d , -f 1` value=`echo $line|cut -d , -f 2`
newtime=$[$(date -d "$mytime" +%s%N)/1000000] echo $newtime,$value >> ceph.log.ops-chulihou done
|
然后通过web上传上面的ceph.log.ops-chulihou文件即可
效果如下
上传部分的代码
index.html内部的
1 2 3 4 5
| <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="upload" /> <input type="submit" value="上传" /> <a href="./help.html">查看帮助</a> </form>
|
server.py代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #! /bin/python
import os from bottle import route, request, static_file, run,template
@route('/') def root(): return static_file('index.html', root='.')
@route('/<filename>') def server_static(filename): return static_file(filename, root='.')
@route('/upload', method='POST') def do_upload(): try: upload = request.files.get('upload') name, ext = os.path.splitext(upload.filename) file_path = "./data.csv" os.remove("./data.csv") upload.save(file_path) except: pass return static_file('index.html', root='.')
if __name__ == '__main__': run(host='0.0.0.0', port=8080)
|
这部分通过bottle进行实现的,只用目录里面放一个py文件就可以了比较简单