# 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)