wlan下发时长计算脚本

Zss 发表于:

遇到一个问题是在云平台下发的wlan到ap上需要很长的时间,但是平常测试时没有统计过时间,没有注意过ap的cpu利用率

客户遇到了当很多个ssid同时下发时,ap应用的时间长达二三十分钟,这是万万不能的,所以编写一个测试wlan下发到ap的时长测试

且记录ap的应用过程中的cpu利用率和内存使用情况以便于分析,果然发现下发的这个过程中的cpu利用率非常高,导致ap没办法即使处理wlan的配置

1.怎么来判断ssid被开启了呢?

我使用的是利用一张无线网卡来定时扫描周围的ssid,当下发的wlan-ssid被无线网卡扫描到后,停止计时,本打算使用多线程来写,但是发现多线程和多进程使用pyinstall打包成exe后

程序会出现一定的问题,暂时还没有去解决,所以每次登陆后进行一次ssid是否下发完成的判断,若使用多线程,一个线程来进行统计ap的cpu和内存使用情况,另外一个线程来控制无线网卡的扫描怕判断

2.怎么来记录ap的cpu利用率和内存情况呢?

我是用的是使用ssh模块远程登陆到ap,使用命令来获取当前的cpu利用率,返回值依次记录下来,但是这个过程中,每次记录一次cpu情况都会发生一次ssh远程登陆和断开

暂时还没搞清楚怎么来实现一次登陆多次运行命令的使用方法

其实也可以直接使用shell脚本来记录,编写一个简单的shell脚本传送到ap,然后执行,当程序结束后,利用sftp将记录的文本下载出来

实现的方式很多,最终均能达到目的

#coding:gbk
import paramiko,os,time

def ssh_host():
    print('----------------- SSID下发时长计算 ------------------')
    print('1.电脑中需要一张可以扫描到对应SSID的无线网卡')
    print('2.CPU利用率将记录在脚本相同目录下')
    print('3.支持2.1 2.2版本')
    print('-----------------------------------------------------')
    host = raw_input('---》 输入AP_ip用来SSH\n')
    path = '{}-Cpu_Mem_info.txt'.format(time.strftime('%Y-%m-%d-%H-%M-%S'))
    ssid = raw_input('---》 输入需要扫描到的SSID来停止计时\n')
    start = raw_input('---》 输入回车开始计时\n')
    s_time = time.time()
    while 1:
        print('-----------------------------------------------------')
        with open(path,'a') as f:
            f.write('--------------------------------------------------------------------\n')
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(host,22,username='admin',password='admin')
            a,s,d = ssh.exec_command("date&&iostat -c 1 2 | awk 'NR==6{print} NR==7{print} NR==9{print}'&&free | awk 'NR==1{print} NR==2{print}'&&exit",get_pty=True)
            out = s.read()
            print(out)
            with open(path,'a') as f:
                f.write(out)
            ssh.close()
            result = time_connet(ssid)
            if result == 1:
                e_time = time.time()
                a = '测试时长为:%d秒'%(int(e_time-s_time))
                print(a)
                with open(path,'a') as f:
                    f.write(a)
                raw_input('-------------------- 回车结束程序 --------------------')
                break
        except:
            pass

def time_connet(SSID):
    result = os.popen('netsh wlan show network').read()
    if SSID in result:
        print('已扫描到SSID:{},停止计时'.format(SSID))
        return 1
    else:
        print('暂未扫描到SSID,继续计时')
        return 0

if __name__ == '__main__':
    ssh_host()