导航

 
# coding=utf8
import json
import sys
from concurrent.futures import ThreadPoolExecutor


def patrol(input_keys):

    host = input_keys['host']
    username = input_keys['username']
    password = input_keys['password']
    node_report = []

    terminal = Network.connect(host, username, password)
    if not terminal:
        print '连接失败'
        sys.exit(1)
    print '-->连接成功'
    # 获取设备名
    hostname=terminal.hostname.replace('>','')
    host_report = report_format('', childs=data_format(u'设备名称', hostname))
    print '-->获取设备名成功'
    # 获取型号/序列号
    import paramiko
    myclient = paramiko.SSHClient()
    myclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    myclient.connect(host, 22, username, password)
    stdin, stdout, stderr = myclient.exec_command('display device manuinfo')
    outprint = stdout.read().strip().split('\r\n')
    #print outprint
    myclient.close()

    device_name = None
    device_sn = None
    for info in outprint:
        if info.startswith('DEVICE_NAME'):
            device_name = info.split(':')[-1].strip()
        if info.startswith('DEVICE_SERIAL_NUMBER'):
            device_sn = info.split(':')[-1].strip()
        if device_sn and device_name:
            break
    report = data_format('设备型号/序列号', '{}/\n{}'.format(device_name, device_sn), 0)
    sn_report = report_format(hostname, report)
    print '-->获取型号/序列号成功'
    #获取版本
    myclient = paramiko.SSHClient()
    myclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    myclient.connect(host, 22, username, password)
    stdin, stdout, stderr = myclient.exec_command('display version')
    outprint = stdout.read().strip().split('\r\n')
    myclient.close()
    #print outprint


    result = outprint[7].split(',')
    version = ','.join(result[1:]).strip().replace(' ','\n')
    report = data_format('软件版本', version, 0)
    version_report = report_format(hostname, report)
    print '-->获取版本成功'
    #获取设备运行时间
    sys_time = outprint[9].split(' ')
    sys_time = ' '.join(sys_time[4:]).strip().split(',')
    sys_time_list = []
    for i in sys_time:
        sys_time_list.append(int(i.lstrip(' ').split(' ')[0].strip()))
    sys_time = sys_time_list[0] * 7 + sys_time_list[1]
    sys_time_hours = sys_time_list[2]
    if sys_time == 0:
        result='{}小时'.format(sys_time_hours)
    else:
        result='{}天'.format(sys_time)
    report = data_format('设备运行时间',result , 0)
    time_report = report_format(hostname, report)
    print '-->获取设备运行时间成功'
    node_report.append(host_report)
    node_report.append(sn_report)
    node_report.append(version_report)
    node_report.append(time_report)

    terminal.close()
    return {host: node_report}


try:
    host_list = hosts.split(',')
    max_length = len(host_list)
    if max_length >= 10:
        max_length = 10

    pool = ThreadPoolExecutor(max_workers=max_length)
    results = []
    for host in host_list:
        if not host.strip():
            continue
        try:
            input_keys = {'host': host, 'username': username, 'password': str(password)}
            result = pool.submit(patrol, (input_keys))
            results.append(result)
        except Exception as e:
            sys.exit(1)

    reports={}
    while results != []:
        for result in results:
            if result.done():
                report = result.result()
                reports.update(report)
                results.remove(result)

    print reports
    reports = json.dumps(reports)
except Exception as e:
    print e
    sys.exit(1)

  

# coding=utf8
import json
import sys
from concurrent.futures import ThreadPoolExecutor
import paramiko

def patrol(input_keys):
    host = input_keys['host']
    username = input_keys['username']
    password = input_keys['password']
    node_report = []

    terminal = Network.connect(host, username, password)
    if not terminal:
        print '连接失败'
        sys.exit(1)
    print '-->连接成功'

    # 获取设备名
    hostname=terminal.hostname.replace('>','')
    print '-->获取设备名成功'
    #获取cpu使用率
    myclient = paramiko.SSHClient()
    myclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    myclient.connect(host, 22, username, password)
    stdin, stdout, stderr = myclient.exec_command('display cpu-usage')
    res = stdout.read().split('\r\n')
    myclient.close()
    # print res
    # code,res=  terminal.run('display cpu-usage',timeout=5, debug=True,slip='\r\n',pure=True)
    # print repr(res)
    cpu_use_percent = res[-3].split()[0]
    if float(cpu_use_percent.rstrip('%')) > float(cpu_base_value):
        alert = 1
        print "Mem use {} > {}".format(cpu_use_percent, cpu_base_value)
    else:
        alert = 0
    result = data_format('CPU使用率(基线值<{}%)'.format(cpu_base_value), cpu_use_percent, alert)
    cpu_report = report_format(hostname, result)
    print '-->获取CPU使用率成功'
    myclient = paramiko.SSHClient()
    myclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    myclient.connect(host, 22, username, password)
    stdin, stdout, stderr = myclient.exec_command('display memory')
    res = stdout.read().split('\r\n')
    print res

    #res = terminal.run('display memory')
    mem_use_percent = 100-float(res[-5].split()[-1].strip('\r').rstrip('%'))
    if float(mem_use_percent) > float(mem_base_value):
        alert = 1
        print "Mem use {} > {}".format(mem_use_percent, mem_base_value)
    else:
        alert = 0
    result = data_format('内存使用率(基线值<{}%)'.format(mem_base_value), str(mem_use_percent)+'%', alert)
    mem_report = report_format(hostname, result)
    print '-->获取内存使用率成功'
    node_report.append(cpu_report)
    node_report.append(mem_report)

    terminal.close()
    return {host: node_report}


try:
    host_list = hosts.split(',')
    max_length = len(host_list)
    if max_length >= 10:
        max_length = 10

    pool = ThreadPoolExecutor(max_workers=max_length)
    results = []
    for host in host_list:
        if not host.strip():
            continue
        try:
            input_keys = {'host': host, 'username': username, 'password': str(password)}
            result = pool.submit(patrol, (input_keys))
            results.append(result)
        except Exception as e:
            sys.exit(1)

    reports = {}
    while results != []:
        for result in results:
            if result.done():
                report = result.result()
                reports.update(report)
                results.remove(result)

    print reports
    reports = json.dumps(reports)
except Exception as e:
    print e
    sys.exit(1)

  

posted on 2019-05-22 17:36  slqt  阅读(486)  评论(0编辑  收藏  举报