• 测试数据的可视化-通用化


    前言

    如果测试数据是很大量的数据,并且是基于时间变化的,需要做成一个横轴为时间,纵轴为数值的可视化,这个有很多方法
    比如用excel做成图表形式的
    或者用powerbi或者其它软件做成波形图
    但是找了几个软件都没有想要的效果,grafana那种又太重了,需要配置很多东西,所以这里自己实现了一个简单但是实用的数据分析网页

    架构

    首先是原始数据,这里需要对原始数据进行处理,把数据处理成时间,数值的csv文件格式的,数量可以很多也没关系
    支持通过网页导入,因为测试可能是多轮的,或者多个数据的,所以为了方便,是支持网页直接倒入的
    网页是通过命令行启动的,不需要第三方的web服务器,所有的东西都维护在一个目录内,我们看下我们的效果

    使用过程

    以ceph.log为例,我们拿到的是原始打包好的数据

    [root@lab101 data]# ll
    总用量 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
    

    解压数据

    [root@lab101 data]# gunzip  -d *.gz
    [root@lab101 data]# ll
    总用量 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
    

    汇总数据

    [root@lab101 data]# cat ceph.log-20210115 > ceph.log
    [root@lab101 data]# cat ceph.log-20210116 >> ceph.log
    [root@lab101 data]# cat ceph.log-20210117 >> ceph.log
    [root@lab101 data]# cat ceph.log-20210118 >> ceph.log
    

    处理数据
    我们之前的文章有篇awk的有处理数据的方法

    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万行,这个数据量还是比较大的

    [root@lab101 datadisplay]# cat chuli.sh
    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内部的

    <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代码

    #! /bin/python
    # -*- coding: UTF-8 -*-
    # @Time :2020-01-18 18:03
    # @Author:  zphj1987
    
    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)
        #if ext not in ('.csv', '.jpg', '.jpeg'):
        #    return "File extension not allowed."
            file_path = "./data.csv"
            os.remove("./data.csv")
            upload.save(file_path)
        except:
            pass
        #return "File successfully saved to '{0}'.".format(file_path)
        return static_file('index.html', root='.')
    
    if __name__ == '__main__':
        run(host='0.0.0.0', port=8080)
    

    这部分通过bottle进行实现的,只用目录里面放一个py文件就可以了比较简单

  • 相关阅读:
    js高级程序设计 笔记 --- 引用类型
    es6 简单封装一个 省市县三级下拉框
    js中元素、触点等各种距离的总结
    css实现视觉差的滚动
    js的节流和防抖
    js关于原型,原型链的面试题
    深入理解promise
    vue 同一个组件的跳转, 返回时保留原来的下拉位置
    es6 封装一个登录注册的验证滑块
    洛谷P3203 [HNOI2010]弹飞绵羊(lct)
  • 原文地址:https://www.cnblogs.com/zphj1987/p/14300548.html
Copyright © 2020-2023  润新知