漫游时间的计算与漫游时间图表的生成

Zss 发表于:

测试中抓取的数据包导出为csv文件,需要计算特定的数据包类型及他们之间的时间差来判断最大值

生成一个图表来查看那最大的漫游的时间,在之前的增加一些新的功能,支持不同的协议过滤,支持生成图表的输出

 

#coding:gbk
import csv
from pyecharts import *
import sys
import os
import time
reload(sys)
sys.setdefaultencoding("gbk")

def get_time(filter1,y_ip,m_ip):
    c =[]
    a =[]
    try:
        with open(path,'r+') as file:
            file = csv.reader(file)
            for i in file:
                if filter1 == 'UDP' or filter1 == 'udp':
                    if i[4] in ['UDP', 'udp'] and i[2] == str(y_ip) and i[3] == str(m_ip):
                        a.append(i[1])
                elif filter1 == 'icmp' or filter1 == 'icmp':
                    if i[4] in ['ICMP', 'icmp'] and i[2] == str(y_ip) and i[3] == str(m_ip):
                        a.append(i[1])
                elif filter1 == 'TCP' or filter1 == 'tcp':
                    if i[4] in ['TCP', 'tcp'] and i[2] == str(y_ip) and i[3] == str(m_ip):
                        a.append(i[1])
                else:
                    pass
    except IOError:
        print('请关闭csv文件')
        raw_input('回车结束程序!')
        exit()
    try:
        for i in range(0,len(a)-1):
            b = float(a[i+1])-float(a[i])
            c.append(('%4f'%b,float(a[i]),float(a[i+1])))
    except:
        pass
    f = sorted(c)
    f = reversed(f)
    print('时间大小前十 -- 第N个包的时间点 -- 第N+1个包的时间点')
    d = []
    t=1
    for i in f:
        d.append(i)
    for i in d[:10]:
        q = int(float(i[0])*1000)
        print('{}. {}ms    {}    {}'.format(str(t),q,i[1],i[2]))
        t+=1

    use_key,use_value,ww = zip(*c)
    key = []
    for i in use_key:
        key.append(int(float(i)*1000))
    bar = Bar("CPE漫游时间柱状图", "横坐标单位:s  纵坐标单位:ms")
    bar.add("漫游时间",use_value,key,xaxis_interval=120,is_xaxislabel_align=True,is_datazoom_show=True,datazoom_range=[0,100],datazoom_type='both',is_toolbox_show=False,mark_point=["max"])
    bar.render('%s-%dms.html'%(time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime()),int(float(d[0][0])*1000)))


if __name__ == '__main__':
    path = sys.argv[0]
    path = os.path.split(path)[0]+'/test.csv'
    print('---------------------------------------------------------------------')
    print('                        计算漫游时间                      ')
    print('使用方法:1.将需要计算的csv文件放到脚本同一个目录下,命名为:test.csv')
    print('          2.输入一次源ip,目的ip,协议名来过滤                      ')
    print('          3.计算新的csv文件需要替换掉旧的csv文件,再次回车          ')
    print('---------------------------------------------------------------------')
    print('                  1.输入源ip,例如:192.168.99.100')
    y_ip = raw_input()
    print('                  2.输入目的ip,例如:192.168.99.99')
    m_ip = raw_input()
    print('                  3.输入协议名,例如:udp或者icmp或者tcp')
    filter1 = raw_input('')
    while 1:
        print('----------------------  {}  ------------------------'.format(str(time.ctime())))
        print('                    1.替换掉csv文件可以计算新的csv文件')
        raw_input('                    2.输入回车计算漫游时间!')
        get_time(filter1,y_ip,m_ip)