1、基本信息

我公司之前采用的是人工巡检,但奈何有大量网络设备,往往巡检需要花掉一上午(还是手速快的话),浪费时间浪费生命。

这段时间正好在学 Python ,于是乎想(其)要(实)解(就)放(是)双(懒)手。

好了,脚本很长又比较挫,有耐心就看看吧。

需要巡检的设备如下:

设备清单

|

设备型号

—|---

防火墙

|

华为 E8000E

|

H3C M9006

|

飞塔 FG3950B

交换机

|

华为 S9306

|

H3C S12508

|

Cisco N7K

路由器

|

华为 NE40E

负载

|

Radware RD5412

|

Radware RD6420

2、采集数据并写入文件

相关设备巡检命令就不介绍了。。。

01DMZ-E8000E.py # 华为 E8000E 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d')tt=tdy.split()if int(tt[-1]) < 10:tdy=tdy.replace('0',' ')ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3])child=pexpect.spawn('ssh 用户名@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/01DMZ-E8000E.txt','w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('(?i)E8000E-1>')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("(?i)E8000E-1>")child.sendline("dis device | ex Normal")child.expect("(?i)E8000E-1>")child.sendline("dis version")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis temperature")child.expect("(?i)E8000E-1>")child.sendline("dir")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis memory-usage")child.expect("(?i)E8000E-1>")child.sendline("dis hrp state")child.expect("(?i)E8000E-1>")child.sendline("dis firewall session table")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis ip routing-table protocol static")child.expect("(?i)E8000E-1>")child.sendline("dis int brief | in up")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3004")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3005")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3006")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3007")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis alarm all")child.expect("(?i)E8000E-1>")child.sendline("dis logbuffer | in %s"%tdy)for i in range(20):index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ):child.send(" ")else:child.sendline("q")break

02_03-M9006.py # H3C M9006 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b')today=datetime.date.today().strftime('%Y%m%d')ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3])if ip == '判断ip,手动打码':txt='03SM-M9006.txt'else:txt='02DMZ-M9006.txt'child=pexpect.spawn('ssh 用户名@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('(?i)M9006>')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("M9006>")child.sendline("dis device | ex Normal")child.expect("M9006>")child.sendline("dis version | in uptime")child.expect("M9006>")child.sendline("dis environment")for i in range(10):index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")else:child.sendline("dir | in total")breakchild.expect("M9006>")child.sendline("dis memory")for i in range(10):index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")else:child.sendline("dis irf link")breakchild.expect("M9006>")child.sendline("dis redundancy group")child.expect("---- More ----")child.send('a')child.expect("M9006>")child.sendline("dis session statistics summary")child.expect("M9006>")child.sendline("dis ip routing-table protocol static")child.expect("M9006>")child.sendline("dis int brief | in UP")for i in range(10):index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")else:breakif ip == '判断ip':child.sendline("dis acl 3001")for i in range(10):index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")else:child.sendline("dis acl 3002")child.expect("M9006>")child.sendline("dis alarm")breakelse:child.sendline("dis object-policy ip")for i in range(20):index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")else:child.sendline("dis alarm")breakchild.expect("M9006>")child.sendline("dis logbuffer reverse | in %s"%tdy)index = child.expect(["(?i)---- More ----","M9006>"]) 这边其实只要一个 for 循环就可以了,不高兴改了if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send("a")index = child.expect(["(?i)---- More ----","M9006>"])if ( index == 0 ):child.send("a")else:child.sendline('')child.expect("M9006>")child.sendline("q")

04IN-FG3950B.py # 飞塔 FG3950B 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimetoday=datetime.date.today().strftime('%Y%m%d')ip=str(sys.argv[1])passwd=str(sys.argv[2])child=pexpect.spawn('ssh 用户@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/04IN-FG3950B.txt','w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('W-IN-FG3950-1 #')child.sendline("get sys performance status")for i in range(5):index = child.expect(["(?i)--More--","W-IN-FG3950-1 #"])if ( index == 0 ):child.send(" ")else:child.sendline("diagnose sys session stat")breakchild.expect('W-IN-FG3950-1 #')child.sendline("get route info routing-table static")child.expect('--More--')child.send(' ')child.expect('W-IN-FG3950-1 #')child.sendline("exit")

05_06DMZ-S9306.py # 华为 S9306 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d')tt=tdy.split()if int(tt[-1]) < 10:tdy=tdy.replace('0',' ')ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3])child=pexpect.spawn('ssh 用户名@%s'%ip)if ip == '判断ip,不止一个该类型设备':txt='05DMZ-S9306-1.txt'else:txt='06DMZ-S9306-2.txt'fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('<JSYD-WX-12580-DMZ-9306')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis device")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis version | in Quidway")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dir")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis cpu-usage")index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"])if ( index == 0 ):child.send("a")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis memory-usage")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis int brief | in up")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis vrrp brief")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis mac-address total-number")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis arp statistics all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis ip routing-table protocol static")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis temperature all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis alarm all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis logbuffer | in %s"%tdy)for i in range(50):index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"])if ( index == 0 ):child.send(" ")else:child.sendline("q")break

07_08-S12508.py # H3C S12508 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d')tt=tdy.split()if int(tt[-1]) < 10:tdy=tdy.replace('0',' ')ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3])child=pexpect.spawn('ssh 用户名@%s'%ip)IP=['ip1','ip2']if ip == IP[0]:txt='07DMZ-S12508.txt'name='<W-DMZ-G1G2-12508>'else:txt='08IN-S12508.txt'name='<W-IN-G7G8-12508>'fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("%s"%name)child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("%s"%name)child.sendline("dis device | ex Normal")child.expect("%s"%name)child.sendline("dis version | in H3C S12508")child.expect("%s"%name)child.sendline("dir")child.expect("%s"%name)child.sendline("dis memory")child.expect("%s"%name)child.sendline("dis irf link")for i in range(10):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis int brief | in UP")breakfor i in range(20):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis mac-address count")breakchild.expect("%s"%name)child.sendline("dis arp all count")if ip == "手动打码":child.expect("%s"%name)child.sendline("dis ip routing-table vpn-instance Dmz protocol static")for i in range(20):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis ip routing-table vpn-instance Inside protocol static")for i in range(20):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline(" ")breakbreakchild.expect("%s"%name)child.sendline("dis environment")for i in range(50):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis alarm")breakchild.expect("%s"%name)child.sendline("dis logbuffer | in %s"%tdy)for i in range(50):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("q")sys.exit()

09_10SM-N7K.py # Cisco N7K 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimetoday=datetime.date.today().strftime('%Y%m%d')ip=str(sys.argv[1])passwd=str(sys.argv[2])child=pexpect.spawn('telnet %s'%ip)if ip == '是个ip':txt='09SM-N7K-1.txt'name='W-SM-N7K-1#'else:txt='10SM-N7K-2.txt'name='W-SM-N7K-2#'fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('login:')child.sendline("发送用户名")child.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("%s"%name)child.sendline("sh hardware | in ok")child.expect("%s"%name)child.sendline("sh version | in uptime")child.expect("%s"%name)child.sendline("dir")child.expect("%s"%name)child.sendline("sh int brief | in up")for i in range(10):index = child.expect(["(?i)More--","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("sh hsrp brief")breakchild.expect("%s"%name)child.sendline("sh mac address-table count")child.expect("%s"%name)child.sendline("sh ip arp | in number")child.expect("%s"%name)child.sendline("sh ip route static summary")child.expect("%s"%name)child.sendline("sh environment temperature")for i in range(10):index = child.expect(["(?i)More--","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("sh vpc")breakfor i in range(10):index = child.expect(["(?i)More--","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("sh logging last 30")breakfor i in range(10):index = child.expect(["(?i)More--","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("exit")sys.exit()

11_12DMZ-NE40E.py # 华为 NE40E 交互脚本

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d')tt=tdy.split()if int(tt[-1]) < 10:tdy=tdy.replace('0',' ')ip=str(sys.argv[1])passwd=str(sys.argv[2])child=pexpect.spawn('ssh 用户名@%s'%ip)IP=['ip1','ip2']if ip == IP[0]:txt='11DMZ-NE40E-1.txt'name='<W-SM-E11-NE40E-01>'elif ip == IP[1]:txt='12DMZ-NE40E-2.txt'name='<W-SM-E12-NE40E-02>'else:print "IP Input Error!"sys.exit()fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("(?i)N]:")child.sendline("n")child.expect("%s"%name)child.sendline("dis device | ex Normal")child.expect("%s"%name)child.sendline("dis version | in NE40E-X8 uptime")child.expect("%s"%name)child.sendline("dir")index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis memory-usage")else:child.sendline("dis memory-usage")child.expect("%s"%name)child.sendline("dis int brief | in up")child.expect("%s"%name)child.sendline("dis ip routing-table protocol static")child.expect("%s"%name)child.sendline("dis temperature")for i in range(40):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis alarm all")breakchild.expect("%s"%name)child.sendline("dis logbuffer | in %s"%tdy)for i in range(30):index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("q")break

13_16-RD5412_6420.py # Radware RD5412 交互脚本,只要掌握一个,其他都是套路

    #!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d')tt=tdy.split()if int(tt[-1]) < 10:tdy=tdy.replace('0',' ')ip=str(sys.argv[1])passwd=str(sys.argv[2])child=pexpect.spawn('ssh 还是用户名@%s'%ip)IP=['ip1','ip2','ip3','ip4']if ip == IP[0]:txt='13DMZ-RD5412-1.txt'elif ip == IP[1]:txt='14DMZ-RD5412-2.txt'elif ip == IP[2]:txt='15SM-RD6420-1.txt'elif ip == IP[3]:txt='16SM-RD6420-2.txt'else:print "IP Input Error!"sys.exit()name='Standalone ADC(?i)'fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)if ip == IP[3]:child.expect("(?i)y]:")child.sendline("y")child.expect("%s"%name)child.sendline("/i/sys/general")child.expect("%s"%name)child.sendline("/i/sys/ps")child.expect("%s"%name)child.sendline("/i/sys/fan")child.expect("%s"%name)child.sendline("/i/link")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("/i/sys/capacity slb")else:child.sendline("/i/sys/capacity slb")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("/stats/mp/cpu")else:child.sendline("/stats/mp/cpu")else:child.sendline("/stats/mp/cpu")child.expect("%s"%name)child.sendline("/stats/mp/mem")child.expect("%s"%name)child.sendline("/i/sys/temp")child.expect("%s"%name)child.sendline("/i/l3/vrrp")child.expect("%s"%name)child.sendline("/i/sys/log")for i in range(50):index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ):child.send(" ")else:child.sendline("exit")break#index = child.expect(["(?i)n]:","%s"%name])#if ( index == 0 ):if ip == IP[3]:child.expect("(?i)n]:")child.sendline("y")#else:# passchild.expect("(?i)n]:")child.sendline("n")

3、编写邮件脚本

mail.py

    #!/usr/bin/python# -*- coding: utf-8 -*-from email.header import Headerimport smtplib import email.MIMEMultipart# import MIMEMultipart import email.MIMEText# import MIMEText import email.MIMEBase# import MIMEBase import os.path import sys import mimetypes import email.MIMEImage# import MIMEImage import datetimetday=datetime.date.today().strftime('%Y/%m/%d')#命令 mail.py <1:发送方(回复地址)10000@qq.com> <2:发送地址,多个以;隔开> <3:发送文件> From = "%s<*@139.com>" % Header("XXX","utf-8")ReplyTo=sys.argv[1]To = sys.argv[2]file_name = sys.argv[3]#附件名 file_name1 = sys.argv[4] server = smtplib.SMTP("smtp.139.com",25) server.login("user@139.com","password") #仅smtp服务器需要验证时 # 构造MIMEMultipart对象做为根容器 main_msg = email.MIMEMultipart.MIMEMultipart() # 构造MIMEText对象做为邮件显示内容并附加到根容器 text_msg = email.MIMEText.MIMEText("message内容正文",_charset="utf-8") main_msg.attach(text_msg) # 构造MIMEBase对象做为文件附件内容并附加到根容器 ctype,encoding = mimetypes.guess_type(file_name) if ctype is None or encoding is not None: ctype='application/octet-stream' maintype,subtype = ctype.split('/',1) file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype) file_msg1=email.MIMEImage.MIMEImage(open(file_name1,'rb').read(),subtype)## 设置附件头 basename = os.path.basename(file_name) file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头 main_msg.attach(file_msg) basename1 = os.path.basename(file_name1)file_msg1.add_header('Content-Disposition','attachment', filename = basename1)#修改邮件头main_msg.attach(file_msg1)# 设置根容器属性 main_msg['From'] = From main_msg['Reply-to'] = ReplyTo #main_msg['To'] = To main_msg['Subject'] = u"[每日巡检] %s邮件标题" %tdaymain_msg['Date'] = email.Utils.formatdate() #main_msg['Bcc'] = To # 得到格式化后的完整文本 fullText = main_msg.as_string( ) # 用smtp发送邮件 try: server.sendmail(From, To.split(';'), fullText) finally: server.quit()

mail_excel_error.py # 报错通知邮件:excel不存在

    #!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import smtplib,string,datetime,xlrdtday=datetime.date.today().strftime('%Y/%m/%d')HOST="smtp.139.com"SUBJECT="[每日巡检] %s哈哈哈"%tdayTO="*.com"FROM="*@139.com"text="excel no cunzai"BODY=string.join(("FROM: %s" % FROM,"To: %s" % TO,"Subject: %s" % SUBJECT,"",text), "\r\n")server=smtplib.SMTP()server.connect(HOST,"25")server.starttls()server.login(FROM,"密码")server.sendmail(FROM,[TO],BODY)server.quit()

mail_zip_error.py # 邮件告警:巡检历史记录压缩文档不存在

    #!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import smtplib,string,datetime,xlrdtday=datetime.date.today().strftime('%Y/%m/%d')HOST="smtp.139.com"SUBJECT="[每日巡检] %s嘻嘻嘻" %tdayTO="asdas.com"FROM="***@139.com"text="zip no cunzai"BODY=string.join(("FROM: %s" % FROM,"To: %s" % TO,"Subject: %s" % SUBJECT,"",text), "\r\n")server=smtplib.SMTP()server.connect(HOST,"25")server.starttls()server.login(FROM,"PASSWORD")server.sendmail(FROM,[TO],BODY)server.quit()

4、数据处理

wangluo_xunjian.py # 根据巡检内容制表

    #!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import xlsxwriter,os,datetimedef cmd(sname,fname):  # 该函数判断巡检命令行所在输出文件位置i=1f=open(fname)line_hang_list=[]for line in f:if line.find(sname) == 0:line_hang_list.append(i)i+=1f.closereturn line_hang_listdef cmd1(sname,fname): # 同上i=1f=open(fname)line_hang_list=[]for line in f:if sname in line:line_hang_list.append(i)i+=1f.closereturn line_hang_listtday=datetime.date.today().strftime('%Y.%m.%d')today=datetime.date.today().strftime('%Y%m%d')workbook=xlsxwriter.Workbook(u"/usr/sh/shell/linux/xunjian/%s/网络设备巡检-%s.xlsx"%(today,tday),{'strings_to_numbers':True})file_01='/usr/sh/shell/linux/xunjian/'+str(today)+'/01DMZ-E8000E.txt'file_02_1='/usr/sh/shell/linux/xunjian/'+str(today)+'/03SM-M9006.txt'file_02_2='/usr/sh/shell/linux/xunjian/'+str(today)+'/02DMZ-M9006.txt'file_03='/usr/sh/shell/linux/xunjian/'+str(today)+'/04IN-FG3950B.txt'# 新建 sheetworksheet0=workbook.add_worksheet(u"防火墙")worksheet1=workbook.add_worksheet(u"交换机")worksheet2=workbook.add_worksheet(u"路由器")worksheet3=workbook.add_worksheet(u"负载")# 设置单元格格式(居中,颜色,边框,合并,列宽,列隐藏等)colour='#660099'format_title=workbook.add_format()format_title.set_border(1)format_title.set_bottom(2)format_title.set_bold(1)format_title.set_font_color('white')format_title.set_bg_color(colour)format_title.set_align('center')format_title.set_valign('vcenter')format_nr=workbook.add_format()format_nr.set_border(1)format_nr.set_bottom(2)format_nr.set_align('center')format_nr.set_valign('vcenter')format_nrr=workbook.add_format()format_nrr.set_border(1)format_nrr.set_valign('vcenter')format_nrr.set_text_wrap()format_bottom=workbook.add_format()format_bottom.set_border(1)format_bottom.set_bottom(2)format_bottom.set_valign('vcenter')format_bottom.set_text_wrap()format_rt=workbook.add_format()format_rt.set_border(1)format_rt.set_right(2)format_rt.set_valign('left')format_rt.set_text_wrap()format_right=workbook.add_format()format_right.set_border(1)format_right.set_right(2)format_right.set_bottom(2)format_right.set_valign('vcenter')format_right.set_text_wrap()format_red=workbook.add_format()format_red.set_font_color('red')format_red.set_border(1)format_red.set_right(2)format_red.set_valign('vcenter')format_rd=workbook.add_format()format_rd.set_font_color('red')format_rd.set_border(1)format_rd.set_right(2)format_rd.set_bottom(2)format_rd.set_valign('vcenter')# 填写相关固定单元格内容firewall_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果']firewall_jc=[u'设备状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'板卡状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'板卡状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'运行时长',u'CPU使用率 (BOMC看)',u'内存使用率',u'网络流量',u'session数目',u'新建session速率',u'接口状态',u'冗余组状态',u'路由条数',u'日志',u'策略条数',u'告警']firewall_cmd=['dis device | ex Normal','dis version','dis temperature','dir',u'在BOMC看','dis memory-usage','dis hrp state','dis firewall session table','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl 3004 (3004-3007)','dis alarm all','dis logbuffer | in [data]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis object-policy ip','dis alarm','dis logbuffer | in [month]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl all','dis alarm','dis logbuffer | in [month]','get sys performance status','','','','diagnose sys session stat','',u'网页登录查看',u'网页登录查看','get route info routing table static',u'网页登录查看',u'网页登录查看',u'网页登录查看']firewall_sm=[u'填写Status是Abnormal的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写本机和邻居的角色,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写State为Absent,且Type不为NONE的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率范围',u'填写Status不是UP的项',u'填写Status,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目(所有rule的总数)',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写State为Absent,且Type不为NONE的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率范围',u'填写Status不是UP的项',u'填写Status,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目(acl 3001+3002的总条目数)',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写已运行天数,小时数',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写30分钟内平均带宽占用(kbps)',u'填写session_count值',u'填写setup_rate值',u'填写启用状态的接口数目',u'填写冗余状态',u'填写路由数目',u'填写异常日志,无异常则填写“正常”',u'填写策略数目',u'填写告警内容,无告警则填写“无告警”']switch_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果']switch_jc=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'VRRP状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'告警',u'日志']switch_jc1=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'接口状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'告警',u'日志']switch_jc2=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'接口状态',u'MAC地址条目数',u'ARP条目数',u'运行温度',u'告警',u'日志']switch_cmd=['dis device','dis version | in Quidway','dir','dis cpu-usage','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis vrrp brief','dis mac-address total-number','dis arp statistics all','dis ip routing-table protocol static','dis temperature all','dis alarm all','dis logbuffer | in [date]']switch_cmmd=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis ip routing-table vpn-instance Dmz/Inside protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]']switch_cmd1=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis int brief (dis logbuffer reverse | in UPDOWN)','dis vrrp','dis mac-address count','dis arp all count','dis ip routing-table protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]']switch_cmd2=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis environment','dis alarm','dis logbuffer reverse | in [date]']switch_sm=[u'查看电源、风扇以及板卡状态,填写异常项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看VRRP主备状态',u'填写总的mac-address条目数',u'填写动态和静态ARP条目数',u'填写路由数目',u'填写温度范围',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”']switch_ssm=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写Status不是UP的项',u'填写状态为UP的端口数目',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目(Dmz和Inside路由总和)',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正常”']switch_sm1=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看VRRP主备状态',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正>常”']switch_sm2=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写Status不是UP的项',u'填写状态为UP的端口数目',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正>常”']route_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果']route_jc=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'路由条数',u'运行温度',u'告警',u'日志']route_cmd=['dis device | ex Normal','dis version | in NE40E-X8 uptime','dir',u'在BOMC看','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis ip routing-table protocol static','dis temperature','dis alarm all','dis logbuffer | in [date]']route_sm=[u'填写Status不是“Normal”的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'填写路由数目',u'填写温度范围',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”']fuzai_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果']fuzai_jc=[u'运行时长',u'电源状态',u'风扇状态',u'端口状态',u'各表项数值',u'CPU使用率',u'内存使用率',u'硬件温度',u'冗余状态',u'日志']fuzai_cmd=['/i/sys/general','/i/sys/ps','/i/sys/fan','/i/link','/i/sys/capacity slb','/stats/mp/cpu','/stats/mp/mem','/i/sys/temp','/i/l3/vrrp','/i/sys/log']fuzai_sm=[u'填写已运行天数,小时数',u'填写电源状态',u'填写风扇状态',u'填写Link处于UP状态的端口数',u'填写real servers/server groups/virtual servers/filters当前值',u'填写CPU使用率',u'填写内存使用率',u'填写温度',u'填写VRRP状态,"master"或者"backup"',u'填写异常日志,无异常则填写“正常”']newsmswitch_title=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'HSRP状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'VPC状态',u'日志']newsmswitch_cmd=['sh hardware | in ok','sh version | in uptime','dir',u'在BOMC看',u'在BOMC看','sh int brief (sh int brief | in up)','sh hsrp brief','sh mac address-table count','sh ip arp | in number','sh ip route static summary','sh environment temperature','sh vpc','sh logging last 30']newsmswitch_sm=[u'填写状态为OK的模块数',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看HSRP状态(Active local则正常)',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目',u'填写CurTemp范围',u'查看VPC状态是否正常',u'查看日志,无异常则填写"正常"']# ip 我就隐藏掉啦,虽然也没什么意思host={"DMZ-E8000E":[u'防火墙',"ip1"],"DMZ-M9006":[u'防火墙','ip2'],"SM-M9006":[u'防火墙','ip3'],"IN-FG3950B":[u'防火墙',"ip4"],"DMZ-S9306-1":[u'交换机',"ip5"],"DMZ-S9306-2":[u'交换机',"ip6"],"DMZ-S12508":[u'交换机',"ip7"],"IN-S12508":[u'交换机',"ip8"],"SM-S12508-1":[u'交换机',"ip9"],"SM-S12508-2":[u'交换机',"ip10"],"DMZ-NE40E-1":[u'路由器',"ip11"],"DMZ-NE40E-2":[u'路由器',"ip12"],"DMZ-RD5412-1":[u'负载',"ip13"],"DMZ-RD5412-2":[u'负载',"ip14"],"SM-RD6420-1":[u'负载',"ip15"],"SM-RD6420-2":[u'负载',"ip16"],"SM-N7K-1":[u"交换机","ip17"],"SM-N7K-2":[u"交换机","ip18"]}# 开始填写固定单元格内容worksheet0.write_row('A1',firewall_title,format_title)worksheet0.merge_range('A2:A14','DMZ-E8000E',format_nr)worksheet0.merge_range('B2:B14',host["DMZ-E8000E"][0],format_nr)worksheet0.merge_range('C2:C14',host["DMZ-E8000E"][1],format_nr)worksheet0.merge_range('A15:A28','DMZ-M9006',format_nr)worksheet0.merge_range('B15:B28',host["DMZ-M9006"][0],format_nr)worksheet0.merge_range('C15:C28',host["DMZ-M9006"][1],format_nr)worksheet0.merge_range('A29:A42','SM-M9006',format_nr)worksheet0.merge_range('B29:B42',host["SM-M9006"][0],format_nr)worksheet0.merge_range('C29:C42',host["SM-M9006"][1],format_nr)worksheet0.merge_range('A43:A54','IN-FG3950B',format_nr)worksheet0.merge_range('B43:B54',host["IN-FG3950B"][0],format_nr)worksheet0.merge_range('C43:C54',host["IN-FG3950B"][1],format_nr)worksheet0.merge_range('E43:E46','get sys performance status',format_nrr)worksheet0.merge_range('E47:E48','diagnose sys session stat',format_nrr)worksheet0.write_column('D2',firewall_jc,format_nrr)worksheet0.write_column('E2',firewall_cmd,format_nrr)worksheet0.write_column('F2',firewall_sm,format_nrr)worksheet0.write('D14',u'日志',format_bottom)worksheet0.write('E14','dis logbuffer | in [data]',format_bottom)worksheet0.write('F14',u'填写异常日志,无异常则填写“正常”',format_bottom)worksheet0.write('D28',u'日志',format_bottom)worksheet0.write('E28','dis logbuffer reverse | in [month]',format_bottom)worksheet0.write('F28',u'填写异常日志,无异常则填写“正常”',format_bottom)worksheet0.write('D42',u'日志',format_bottom)worksheet0.write('E42','dis logbuffer reverse | in [month]',format_bottom)worksheet0.write('F42',u'填写异常日志,无异常则填写“正常”',format_bottom)worksheet0.write('D54',u'告警',format_bottom)worksheet0.write('E54',u'网页登录查看',format_bottom)worksheet0.write('F54',u'填写告警内容,无告警则填写“无告警”',format_bottom)worksheet0.set_row(0,30)worksheet0.set_column('B:B',15,None,{'hidden':1})worksheet0.set_column('E:F',40,None,{'hidden':1})worksheet0.set_column('A:A',15)worksheet0.set_column('C:D',15)worksheet0.set_column('G:G',40)worksheet1.write_row('A1',switch_title,format_title)worksheet1.merge_range('A2:A14','DMZ-S9306-1',format_nr)worksheet1.merge_range('B2:B14',host["DMZ-S9306-1"][0],format_nr)worksheet1.merge_range('C2:C14',host["DMZ-S9306-1"][1],format_nr)worksheet1.merge_range('A15:A27','DMZ-S9306-2',format_nr)worksheet1.merge_range('B15:B27',host["DMZ-S9306-2"][0],format_nr)worksheet1.merge_range('C15:C27',host["DMZ-S9306-2"][1],format_nr)worksheet1.merge_range('A28:A40','DMZ-S12508',format_nr)worksheet1.merge_range('B28:B40',host["DMZ-S12508"][0],format_nr)worksheet1.merge_range('C28:C40',host["DMZ-S12508"][1],format_nr)worksheet1.merge_range('A41:A52','IN-S12508',format_nr)worksheet1.merge_range('B41:B52',host["IN-S12508"][0],format_nr)worksheet1.merge_range('C41:C52',host["IN-S12508"][1],format_nr)worksheet1.merge_range('A53:A65','SM-N7K-1',format_nr)worksheet1.merge_range('B53:B65',host["SM-N7K-1"][0],format_nr)worksheet1.merge_range('C53:C65',host["SM-N7K-1"][1],format_nr)worksheet1.merge_range('A66:A78','SM-N7K-2',format_nr)worksheet1.merge_range('B66:B78',host["SM-N7K-2"][0],format_nr)worksheet1.merge_range('C66:C78',host["SM-N7K-2"][1],format_nr)worksheet1.write_column('D2',switch_jc,format_nrr)worksheet1.write_column('D15',switch_jc,format_nrr)worksheet1.write_column('D28',switch_jc1,format_nrr)worksheet1.write_column('D41',switch_jc2,format_nrr)worksheet1.write_column('D53',newsmswitch_title,format_nrr)worksheet1.write_column('D66',newsmswitch_title,format_nrr)worksheet1.write_column('E2',switch_cmd,format_nrr)worksheet1.write_column('E15',switch_cmd,format_nrr)worksheet1.write_column('E28',switch_cmmd,format_nrr)worksheet1.write_column('E41',switch_cmd2,format_nrr)worksheet1.write_column('E53',newsmswitch_cmd,format_nrr)worksheet1.write_column('E66',newsmswitch_cmd,format_nrr)worksheet1.write_column('F2',switch_sm,format_nrr)worksheet1.write_column('F15',switch_sm,format_nrr)worksheet1.write_column('F28',switch_ssm,format_nrr)worksheet1.write_column('F41',switch_sm2,format_nrr)worksheet1.write_column('F53',newsmswitch_sm,format_nrr)worksheet1.write_column('F66',newsmswitch_sm,format_nrr)worksheet1.set_row(0,30)worksheet1.set_column('B:B',15,None,{'hidden':1})worksheet1.set_column('E:F',40,None,{'hidden':1})worksheet1.set_column('A:A',15)worksheet1.set_column('C:D',15)worksheet1.set_column('G:G',40)worksheet2.write_row('A1',route_title,format_title)worksheet2.merge_range('A2:A11','DMZ-NE40E-1',format_nr)worksheet2.merge_range('B2:B11',host["DMZ-NE40E-1"][0],format_nr)worksheet2.merge_range('C2:C11',host["DMZ-NE40E-1"][1],format_nr)worksheet2.merge_range('A12:A21','DMZ-NE40E-2',format_nr)worksheet2.merge_range('B12:B21',host["DMZ-NE40E-2"][0],format_nr)worksheet2.merge_range('C12:C21',host["DMZ-NE40E-2"][1],format_nr)worksheet2.write_column('D2',route_jc,format_nrr)worksheet2.write_column('D12',route_jc,format_nrr)worksheet2.write_column('E2',route_cmd,format_nrr)worksheet2.write_column('E12',route_cmd,format_nrr)worksheet2.write_column('F2',route_sm,format_nrr)worksheet2.write_column('F12',route_sm,format_nrr)worksheet2.set_row(0,30)worksheet2.set_column('B:B',15,None,{'hidden':1})worksheet2.set_column('E:F',40,None,{'hidden':1})worksheet2.set_column('A:A',15)worksheet2.set_column('C:D',15)worksheet2.set_column('G:G',40)worksheet3.write_row('A1',fuzai_title,format_title)worksheet3.merge_range('A2:A11','DMZ-RD5412-1',format_nr)worksheet3.merge_range('B2:B11',host["DMZ-RD5412-1"][0],format_nr)worksheet3.merge_range('C2:C11',host["DMZ-RD5412-1"][1],format_nr)worksheet3.merge_range('A12:A21','DMZ-RD5412-2',format_nr)worksheet3.merge_range('B12:B21',host["DMZ-RD5412-2"][0],format_nr)worksheet3.merge_range('C12:C21',host["DMZ-RD5412-2"][1],format_nr)worksheet3.merge_range('A22:A31','SM-RD6420-1',format_nr)worksheet3.merge_range('B22:B31',host["SM-RD6420-1"][0],format_nr)worksheet3.merge_range('C22:C31',host["SM-RD6420-1"][1],format_nr)worksheet3.merge_range('A32:A41','SM-RD6420-2',format_nr)worksheet3.merge_range('B32:B41',host["SM-RD6420-2"][0],format_nr)worksheet3.merge_range('C32:C41',host["SM-RD6420-2"][1],format_nr)worksheet3.write_column('D2',fuzai_jc,format_nrr)worksheet3.write_column('D12',fuzai_jc,format_nrr)worksheet3.write_column('D22',fuzai_jc,format_nrr)worksheet3.write_column('D32',fuzai_jc,format_nrr)worksheet3.write_column('E2',fuzai_cmd,format_nrr)worksheet3.write_column('E12',fuzai_cmd,format_nrr)worksheet3.write_column('E22',fuzai_cmd,format_nrr)worksheet3.write_column('E32',fuzai_cmd,format_nrr)worksheet3.write_column('F2',fuzai_sm,format_nrr)worksheet3.write_column('F12',fuzai_sm,format_nrr)worksheet3.write_column('F22',fuzai_sm,format_nrr)worksheet3.write_column('F32',fuzai_sm,format_nrr)worksheet3.set_row(0,30)worksheet3.set_column('B:B',15,None,{'hidden':1})worksheet3.set_column('E:F',40,None,{'hidden':1})worksheet3.set_column('A:A',15)worksheet3.set_column('C:D',15)worksheet3.set_column('G:G',40)jcx=[u'日志','dis logbuffer | in [date]',u'填写异常日志,无异常则填写“正常”']jcx1=[u'日志','dis logbuffer reverse | in [date]',u'填写异常日志,无异常则填写“正常”']jcx2=[u'日志','sh logging last 30',u'查看日志,无异常则填写“正常”']fuzai_jcx=[u'日志','/i/sys/log',u'填写异常日志,无异常则填写“正常”']worksheet1.write_row('D14',jcx,format_bottom)worksheet1.write_row('D27',jcx,format_bottom)worksheet1.write_row('D40',jcx,format_bottom)worksheet1.write_row('D52',jcx1,format_bottom)worksheet1.write_row('D65',jcx2,format_bottom)worksheet1.write_row('D78',jcx2,format_bottom)worksheet2.write_row('D11',jcx,format_bottom)worksheet2.write_row('D21',jcx,format_bottom)worksheet3.write_row('D11',fuzai_jcx,format_bottom)worksheet3.write_row('D21',fuzai_jcx,format_bottom)worksheet3.write_row('D31',fuzai_jcx,format_bottom)worksheet3.write_row('D41',fuzai_jcx,format_bottom)# 这边开始根据之前与设备交互所得到的数据文件内容来填格子了。#------------------------------------------------#----------firewall_ip1----------------#------------------------------------------------try:hang=1temp=[]hang_list=cmd("HRP_M<JSYD-WX-12580-DMZ-E8000E-1>",file_01)rules=[]g=0with open(file_01) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[1]) and hang < int(hang_list[2]):if int(hang_list[2])-int(hang_list[1]) == 6:worksheet0.write('G2',u'正常',format_rt)else:worksheet0.write('G2','ERROR',format_red)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if num[0] == 'HUAWEI':worksheet0.write('G3',u'%s天,%s小时'%(num[4],num[6]),format_rt)if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 11:temp.append(num[-1])if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if ',' in num[0]:total=num[0].replace(',','')+' KB '+num[3].replace(',','')+' KB)'worksheet0.write('G5',total,format_rt)if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if num[0] == 'Memory':worksheet0.write('G7',num[-1],format_rt)if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if num[0] == 'Role:':if num[1] == 'active,' and num[-1] == 'standby':worksheet0.write('G8',u'正常',format_rt)else:worksheet0.write('G8',u'有',format_red)if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0] == 'Current':worksheet0.write('G9',str(num[-1]),format_rt)if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Destinations' and len(num) == 10:worksheet0.write('G10',str(num[2]),format_rt)if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if len(num) == 7:if num[1] == 'up':g+=1if hang > int(hang_list[10]) and hang < int(hang_list[14]):if num!=[]:if num[0] == 'Advanced':rules.append(num[3])if hang > int(hang_list[14]) and hang < int(hang_list[15]):if int(hang_list[-2])-int(hang_list[-3]) == 8:worksheet0.write('G13',u'无告警',format_rt)else:worksheet0.write('G13',u'有告警',format_red)if hang > int(hang_list[15]) and hang < int(hang_list[16]):passhang = hang + 1temp.sort()worksheet0.write('G4',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)worksheet0.write('G6',None,format_rt)worksheet0.write('G11',g,format_rt)worksheet0.write('G12','%s+%s+%s+%s=%d'%(rules[0],rules[1],rules[2],rules[3],int(rules[0])+int(rules[1])+int(rules[2])+int(rules[3])),format_rt)worksheet0.write('G14',u'正常',format_right)except IOError as reason:print "01DMZ-E8000E.py "+str(reason)#------------------------------------------------#----------firewall_iP2----------------#------------------------------------------------try:hang=1state=dict()hang_list=cmd("<W-12580-M9006>",file_02_2)temp=[]rules=0mem=[]g=0all=0n=0level=0q=0status=0type=0with open(file_02_2) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[0].isdigit() and len(num) == 7:if num[3] == 'Absent':if num[2] != 'NONE':type=1if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if len(num) == 13:worksheet0.write('G16',u'%d天,%s小时'%(int(num[5])*7+int(num[7]),num[9]),format_rt)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if len(num) == 9:temp.append(num[4])if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 6:total='%s KB %s KB)'%(num[0],num[3])worksheet0.write('G18',total,format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if len(num) == 8:if num[-1] != 'KB:':result='%.1f%%'%(100-float(num[-1].split('%')[0]))mem.append(result)if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if 'GigabitEthernet' in num[1]:if num[2] != 'UP':status+=1if 'GigabitEthernet' in num[0]:if num[1] != 'UP':status+=1if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if num[0].isdigit() and len(num) == 5:if num[3] != 'Primary' and num[3] != 'Secondary':q=1if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0].isdigit() and len(num) == 9:g+=1if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Summary':state[n]=num[3]n+=1if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if len(num) >= 4 and num[1] == 'UP':all+=1if hang > int(hang_list[10]) and hang < int(hang_list[12]):if num!=[]:if num[0] == 'rule':rules+=1if hang > int(hang_list[12]) and hang < int(hang_list[13]):if num!=[]:if num[0].isdigit() and len(num) >5:if num[3] != 'INFO':level=1if hang > int(hang_list[13]) and hang < int(hang_list[14]):passhang+=1temp.sort()mem.sort()if type == 0:worksheet0.write('G15',u'正常',format_rt)else:worksheet0.write('G15','ERROR',format_red)worksheet0.write('G17',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)worksheet0.write('G19',None,format_rt)worksheet0.write('G20','%s-%s'%(mem[0],mem[-1]),format_rt)if status == 0:worksheet0.write('G21',u'正常',format_rt)else:worksheet0.write('G21',status,format_rt)if q == 0:worksheet0.write('G22',u'正常',format_rt)else:worksheet0.write('G22',u'有',format_red)worksheet0.write('G23',g,format_rt)worksheet0.write('G24',state[0],format_rt)worksheet0.write('G25',all,format_rt)worksheet0.write('G26','%d'%rules,format_rt)if level == 1:worksheet0.write('G27','ERROR',format_red)else:worksheet0.write('G27',u'无告警',format_rt)worksheet0.write('G28',u'正常',format_right)except IOError as reason:print "02DMZ-M9006.py "+str(reason)#------------------------------------------------#----------firewall_ip3----------------#------------------------------------------------try:hang=1state=dict()hang_list=cmd("<W-SM-M9006>",file_02_1)temp=[]rules=[]mem=[]g=0all=0n=0level=0q=0status=0type=0with open(file_02_1) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[0].isdigit() and len(num) == 7:if num[3] == 'Absent':if num[2] != 'NONE':type=1if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if len(num) == 13:worksheet0.write('G30',u'%d天,%s小时'%(int(num[5])*7+int(num[7]),num[9]),format_rt)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if len(num) == 9:temp.append(num[4])if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 6:total='%s KB %s KB)'%(num[0],num[3])worksheet0.write('G32',total,format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if len(num) == 8:if num[-1] != 'KB:':result='%.1f%%'%(100-float(num[-1].split('%')[0]))mem.append(result) if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if 'GigabitEthernet' in num[1]:if num[2] != 'UP':status=1if 'GigabitEthernet' in num[0]:if num[1] != 'UP':status=1if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if num[0].isdigit() and len(num) == 5:if num[3] != 'Primary' and num[3] != 'Secondary':q=1if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0].isdigit() and len(num) == 9:g+=1if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Summary':state[n]=num[3]n+=1if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if len(num) >= 4 and num[1] == 'UP':all+=1if hang > int(hang_list[10]) and hang < int(hang_list[12]):if num!=[]:if num[0] == 'Advanced':rules.append(num[5])if hang > int(hang_list[12]) and hang < int(hang_list[13]):if num!=[]:if num[0].isdigit() and len(num) >5:if num[3] != 'INFO':level=1if hang > int(hang_list[13]) and hang < int(hang_list[14]):pass hang+=1temp.sort()mem.sort()if type == 0:worksheet0.write('G29',u'正常',format_rt)else:worksheet0.write('G29','ERROR',format_red)worksheet0.write('G31',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)worksheet0.write('G33',None,format_rt)worksheet0.write('G34','%s-%s'%(mem[0],mem[-1]),format_rt)if status == 0:worksheet0.write('G35',u'正常',format_rt)else:worksheet0.write('G35','ERROR',format_red)if q == 0:worksheet0.write('G36',u'正常',format_rt)else:worksheet0.write('G36',u'有',format_red)worksheet0.write('G37',g,format_rt)worksheet0.write('G38',state[0],format_rt)worksheet0.write('G39',all,format_rt)worksheet0.write('G40','%s+%s=%d'%(rules[0],rules[1],int(rules[0])+int(rules[1])),format_rt)if level == 1:worksheet0.write('G41','ERROR',format_red)else:worksheet0.write('G41',u'无告警',format_rt)worksheet0.write('G42',u'正常',format_right)except IOError as reason:print "03SM-M9006.py "+str(reason)#------------------------------------------------#----------firewall_ip4----------------#------------------------------------------------try:hang=1g=0hang_list=cmd("W-IN-FG3950-1 #",file_03)with open(file_03) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[0] == 'Memory':worksheet0.write('G45',num[2],format_rt)if len(num) == 8 and num[1] == 'Uptime:':worksheet0.write('G43',u'%s天,%s小时'%(num[2],num[4]),format_rt)if num[0] == 'Average':if num[1] == 'network':worksheet0.write('G46',num[-5],format_rt)if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0] == "misc":session_count=num[2].split('=')setup_rate=num[3].split('=')worksheet0.write('G47',session_count[-1],format_rt)worksheet0.write('G48',setup_rate[-1],format_rt)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if 'S' in num[0] and len(num) >= 6:g+=1hang+=1worksheet0.write('G51',g,format_rt)worksheet0.write('G44',None,format_rt)worksheet0.write('G49',None,format_rt)worksheet0.write('G50',None,format_rt)worksheet0.write('G52',None,format_rt)worksheet0.write('G53',None,format_rt)worksheet0.write('G54',None,format_right)except IOError as reason:print "04IN-FG3950B.py "+str(reason)#------------------------------------------------#------------switch_ip5----------------#------------switch_ip6----------------#------------------------------------------------try:for i in range(2):hang=1alarm=0state=0status=0alm=0temp_list=[]index={0:list(range(2,15)),1:list(range(15,28))}file='/usr/sh/shell/linux/xunjian/'+str(today)+'/0'+str(i+5)+'DMZ-S9306-'+str(i+1)+'.txt'hang_list=cmd('<JSYD-WX-12580-DMZ-9306-%d>'%(i+1),file)with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if len(num) == 8 and num[1] == '-':if num[-2] != 'Normal':alarm=1if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if num[0] == 'Quidway':worksheet1.write('G'+str(index[i][1]),u'%d天, %s小时'%(int(num[7])*7+int(num[9]),num[11]),format_rt)if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 6 and num[1] == 'KB':mem=num[0].split(',')free=num[3].split(',')worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(mem[0]+mem[1],free[0]+free[1]),format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if len(num) == 6 and num[4] == 'Max:':worksheet1.write('G'+str(index[i][3]),num[3],format_rt)if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if len(num) == 5 and num[0] == 'Memory':worksheet1.write('G'+str(index[i][4]),num[-1],format_rt)if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if len(num) >=6 and num[1] == 'up':state+=1if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0].isdigit() and len(num) == 5:if i == 0 and num[1] != 'Master':status=1if i == 1 and num[1] != 'Backup':status=1if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Total':worksheet1.write('G'+str(index[i][7]),num[-1],format_rt)if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if num[0] == 'Dynamic:':worksheet1.write('G'+str(index[i][8]),num[1],format_rt)if hang > int(hang_list[10]) and hang < int(hang_list[11]):if num!=[]:if num[0] == 'Destinations' and len(num) == 10:worksheet1.write('G'+str(index[i][9]),num[2],format_rt)if hang > int(hang_list[11]) and hang < int(hang_list[12]):if num!=[]:if len(num) >= 6 and num[-5].isdigit():temp=num[-1].split('.')temp_list.append(temp[0])if hang > int(hang_list[12]) and hang < int(hang_list[13]):if num!=[]:if len(num) == 2 and num[0] == 'NO' and num[1] == 'alarm':alm = 1if hang > int(hang_list[13]) and hang < int(hang_list[14]):if num!=[]:passhang+=1temp_list.sort()if alarm == 0:worksheet1.write('G'+str(index[i][0]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][0]),'ERROR',format_red)worksheet1.write('G'+str(index[i][5]),state,format_rt)if i == 0:if status == 0:worksheet1.write('G'+str(index[i][6]),'Master',format_rt)else:worksheet1.write('G'+str(index[i][6]),'No Master',format_red)else:if status == 0:worksheet1.write('G'+str(index[i][6]),'Backup',format_rt)else:worksheet1.write('G'+str(index[i][6]),'No Backup',format_red)worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp_list[0],temp_list[-1]),format_rt)if alm == 1:worksheet1.write('G'+str(index[i][11]),u'无告警',format_rt)else:worksheet1.write('G'+str(index[i][11]),u'有告警',format_red)worksheet1.write('G'+str(index[i][12]),u'正常',format_right)except IOError as reason:print "05_06DMZ-S9306.py "+str(reason)#------------------------------------------------#------------switch_ip7----------------#------------switch_ip8----------------#------------------------------------------------try:fi_list=['07DMZ-S12508.txt']fi_name=['<W-DMZ-G1G2-12508>']state=[]for i in range(1):hang=1file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i]hang_list=cmd(fi_name[i],file)brd_status=['Master','Slave','Absent']brd=0link=0Master=0Backup=0count=[]temp=[]alarm=0status=0index={0:list(range(28,41))}with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0].isdigit() and len(num) == 4:if num[2] not in brd_status:brd=1if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if len(num) == 12:worksheet1.write('G'+str(index[i][1]),u'%d天, %s小时'%(int(num[4])*7+int(num[6]),num[8]),format_rt)if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 6 and num[1] == 'KB':worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(num[0],num[3]),format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if num[0] == 'Used':worksheet1.write('G'+str(index[i][4]),num[-1],format_rt)if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if 'GigabitEthernet' in num[1]:if num[2] != 'UP':status+=1if 'GigabitEthernet' in num[0]:if num[1] != 'UP':status+=1 if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if len(num) >=2 and num[1] == 'UP':link+=1#if num[0] == '----' and num[5] == 'UP':# link+=1if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0].isdigit():worksheet1.write('G'+str(index[i][7]),num[0],format_rt)if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Total' and num[-1].isdigit():worksheet1.write('G'+str(index[i][8]),num[-1],format_rt)if hang > int(hang_list[9]) and hang < int(hang_list[11]):if num!=[]:if num[0] == 'Summary' and num[-1].isdigit():count.append(num[-1])if hang > int(hang_list[11]) and hang < int(hang_list[12]):passif hang > int(hang_list[12]) and hang < int(hang_list[13]):if num!=[]:if len(num) >= 8:if num[3].isdigit():temp.append(num[3])if num[0] == '----' and num[1] == 'More':temp.append(num[7])if hang > int(hang_list[13]) and hang < int(hang_list[14]):if num!=[]:if num[0] == 'No' and num[1] == 'alarm':alarm=1if hang > int(hang_list[14]) and hang < int(hang_list[15]):if num!=[]:passhang+=1temp.sort()if brd == 0:worksheet1.write('G'+str(index[i][0]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][0]),'ERROR',format_red)if status == 0:worksheet1.write('G'+str(index[i][5]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][5]),status,format_rt)worksheet1.write('G'+str(index[i][3]),None,format_rt)worksheet1.write('G'+str(index[i][6]),link,format_rt)worksheet1.write('G'+str(index[i][9]),int(count[1])+int(count[-2]),format_rt)worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)if alarm == 1:worksheet1.write('G'+str(index[i][11]),u'无告警',format_rt)else:worksheet1.write('G'+str(index[i][11]),'Error',format_red)worksheet1.write('G'+str(index[i][12]),u'正常',format_right)except IOError as reason:print "07_08-S12508-01.py"+str(reason)try:fi_list=['08IN-S12508.txt']fi_name=['<W-IN-G7G8-12508>']state=[]for i in range(1):hang=1file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i]hang_list=cmd(fi_name[i],file)brd_status=['Master','Slave','Absent']brd=0link=0Master=0Backup=0count=[]temp=[]alarm=0status=0index={0:list(range(41,53))}with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0].isdigit() and len(num) == 4:if num[2] not in brd_status:brd=1if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if len(num) == 12:worksheet1.write('G'+str(index[i][1]),u'%d天, %s小时'%(int(num[4])*7+int(num[6]),num[8]),format_rt)if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) == 6 and num[1] == 'KB':worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(num[0],num[3]),format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if num[0] == 'Used':worksheet1.write('G'+str(index[i][4]),num[-1],format_rt)if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if 'GigabitEthernet' in num[1]:if num[2] != 'UP':status+=1if 'GigabitEthernet' in num[0]:if num[1] != 'UP':status+=1if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if len(num) >=2 and num[1] == 'UP':link+=1#if num[0] == '----' and num[5] == 'UP':# link+=1if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0].isdigit():worksheet1.write('G'+str(index[i][7]),num[0],format_rt)if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if num[0] == 'Total' and num[-1].isdigit():worksheet1.write('G'+str(index[i][8]),num[-1],format_rt)if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if len(num) >= 8:if num[3].isdigit():temp.append(num[3])if num[0] == '----' and num[1] == 'More':temp.append(num[7])if hang > int(hang_list[10]) and hang < int(hang_list[11]):if num!=[]:if num[0] == 'No' and num[1] == 'alarm':alarm=1if hang > int(hang_list[11]) and hang < int(hang_list[12]):if num!=[]:passhang+=1temp.sort()if brd == 0:worksheet1.write('G'+str(index[i][0]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][0]),'ERROR',format_red)if status == 0:worksheet1.write('G'+str(index[i][5]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][5]),status,format_rt)worksheet1.write('G'+str(index[i][3]),None,format_rt)worksheet1.write('G'+str(index[i][6]),link,format_rt)worksheet1.write('G'+str(index[i][9]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)if alarm == 1:worksheet1.write('G'+str(index[i][10]),u'无告警',format_rt)else:worksheet1.write('G'+str(index[i][10]),'Error',format_red)worksheet1.write('G'+str(index[i][11]),u'正常',format_right)except IOError as reason:print "07_08-S12508-02.py"+str(reason)#------------------------------------------------#------------switch_ip9----------------#------------switch_ip10----------------#------------------------------------------------try:fi_list=['09SM-N7K-1.txt','10SM-N7K-2.txt']fi_name=['W-SM-N7K-1#','W-SM-N7K-2#']state=[]for i in range(2):hang=1file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i]hang_list=cmd1(fi_name[i],file)index={0:list(range(53,66)),1:list(range(66,79))}count1 = 0count2 = 0count3 = 0temp = []with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[1] == 'ok':count1 +=1if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0] == 'Kernel':uptime = u'%s天,%s小时'%(num[3],num[5])if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if len(num) == 3:if num[-1] == 'free':free = num[0]if num[-1] == 'total':total = num[0]if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if len(num) >= 3:if num[2] == 'up' or num[4] == 'up' or num[5] == 'up':count2 +=1if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:passif hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if num[-1].isdigit():count3 += int(num[-1])if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if num[-1].isdigit():worksheet1.write('G'+str(index[i][8]),num[-1],format_rt) if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if len(num) == 5 and num[-1].isdigit():worksheet1.write('G'+str(index[i][9]),num[-1],format_rt)if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if len(num) >= 6 and num[-2].isdigit():temp.append(num[-2])if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:if len(num) >=4 and num[0].isdigit():status = num[2]if hang > int(hang_list[10]) and hang < int(hang_list[11]):if num!=[]:passhang+=1temp.sort()worksheet1.write('G'+str(index[i][0]),count1,format_rt) worksheet1.write('G'+str(index[i][1]),uptime,format_rt)worksheet1.write('G'+str(index[i][2]),'%s KB (%s KB)'%(total,free),format_rt)worksheet1.write('G'+str(index[i][3]),None,format_rt)worksheet1.write('G'+str(index[i][4]),None,format_rt)worksheet1.write('G'+str(index[i][5]),count2,format_rt)worksheet1.write('G'+str(index[i][6]),None,format_rt)worksheet1.write('G'+str(index[i][7]),count3,format_rt)worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)if status == 'up':worksheet1.write('G'+str(index[i][11]),u'正常',format_rt)else:worksheet1.write('G'+str(index[i][11]),u'不正常',format_red)worksheet1.write('G'+str(index[i][12]),u'正常',format_right)except Exception as reason:print "09_10SM-N7K.py "+str(reason)#------------------------------------------------#------------route_ip11----------------#------------route_ip12----------------#------------------------------------------------try:fi_list=['11DMZ-NE40E-1.txt','12DMZ-NE40E-2.txt']fi_name=['<W-SM-E11-NE40E-01>','<W-SM-E12-NE40E-02>']device=['dis','NE40E-X8\'s','Slot','-']status=0for i in range(2):hang=1phy=0temp=[]alarm=0index={0:list(range(2,12)),1:list(range(12,22))}file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i]hang_list=cmd(fi_name[i],file)with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[0] not in device:status=1if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0] == 'HUAWEI':worksheet2.write('G'+str(index[i][1]),u'%s天,%s小时'%(num[4],num[6]),format_rt)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if ',' in num[0]:total=num[0].replace(',','')+' KB '+num[3].replace(',','')+' KB)'worksheet2.write('G'+str(index[i][2]),total,format_rt)if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if num[0] == 'Memory' and len(num) == 5:worksheet2.write('G'+str(index[i][4]),num[-1],format_rt)if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if len(num) == 7 and num[1] == 'up':phy+=1if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if num[0] == 'Destinations' and len(num) == 10:worksheet2.write('G'+str(index[i][6]),num[2],format_rt)if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if len(num) >= 7 and num[-1].isdigit():temp.append(num[-1])if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0] == 'NO' and num[1] == 'alarm':alarm=1if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:passhang+=1temp.sort()if status == 0:worksheet2.write('G'+str(index[i][0]),u'正常',format_rt) else:worksheet2.write('G'+str(index[i][0]),'Error',format_red)worksheet2.write('G'+str(index[i][3]),None,format_rt)worksheet2.write('G'+str(index[i][5]),phy,format_rt)worksheet2.write('G'+str(index[i][7]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt)if alarm == 1:worksheet2.write('G'+str(index[i][8]),u'无告警',format_rt)else:worksheet2.write('G'+str(index[i][8]),'Error',format_red)worksheet2.write('G'+str(index[i][9]),u'正常',format_right)except IOError as reason:print "11_12.py "+str(reason)#------------------------------------------------#------------fuzai_ip13-----------------#------------fuzai_ip14-----------------#------------fuzai_ip15-----------------#------------fuzai_ip16-----------------#------------------------------------------------try:fi_list=['13DMZ-RD5412-1.txt','14DMZ-RD5412-2.txt','15SM-RD6420-1.txt','16SM-RD6420-2.txt']fi_name='>> 'state=[]for i in range(4):hang=1status=0link=0temp=[]Master=0Backup=0index={0:list(range(2,12)),1:list(range(12,22)),2:list(range(22,32)),3:list(range(32,42))}file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i]hang_list=cmd(fi_name,file)with open(file) as f:for each_line in f:num=each_line.split()if hang > int(hang_list[0]) and hang < int(hang_list[1]):if num!=[]:if num[0] == 'Switch':worksheet3.write('G'+str(index[i][0]),u'%s天,%s时'%(num[3],num[5]),format_rt) if hang > int(hang_list[1]) and hang < int(hang_list[2]):if num!=[]:if num[0] == 'Dual':if num[-1] == "OK":worksheet3.write('G'+str(index[i][1]),u'正常',format_rt)else:worksheet3.write('G'+str(index[i][1]),'Error',format_red)if hang > int(hang_list[2]) and hang < int(hang_list[3]):if num!=[]:if num[0].isdigit() and len(num) == 3:if num[-1] != 'Operational':status=1if hang > int(hang_list[3]) and hang < int(hang_list[4]):if num!=[]:if num[0].isdigit() and len(num) == 7:if num[-1] == 'up':link+=1if hang > int(hang_list[4]) and hang < int(hang_list[5]):if num!=[]:if num[0] == 'Real' and num[1] == 'Servers' and len(num) == 4:Real_Servers=num[-1].split('(')[-1].split(')')[0]if num[0] == 'Server' and num[1] == 'Groups' and len(num) == 4:Server_Groups=num[-1]if num[0] == 'Virtual' and num[1] == 'Servers' and len(num) == 4:Virtual_Servers=num[-1].split('(')[-1].split(')')[0]if num[0] == 'Filters' and len(num) == 3:Filters=num[-1].split('(')[-1].split(')')[0]if hang > int(hang_list[5]) and hang < int(hang_list[6]):if num!=[]:if num[0] == 'cpuUtil1Second:':worksheet3.write('G'+str(index[i][5]),num[-1],format_rt)if hang > int(hang_list[6]) and hang < int(hang_list[7]):if num!=[]:if num[0] == 'Total:':Total=int(num[-2])if num[0] == 'Free:':Free=int(num[-2])if hang > int(hang_list[7]) and hang < int(hang_list[8]):if num!=[]:if num[0] == 'Sensor' and len(num) == 6:temp.append(num[3]) if hang > int(hang_list[8]) and hang < int(hang_list[9]):if num!=[]:if len(num) == 10:if num[-1] == 'master':Master+=1if num[-1] == 'backup':Backup+=1if hang > int(hang_list[9]) and hang < int(hang_list[10]):if num!=[]:passhang+=1state.append(Master)state.append(Backup)if status == 0:worksheet3.write('G'+str(index[i][2]),u'正常',format_rt)else:worksheet3.write('G'+str(index[i][2]),'Error',format_red)worksheet3.write('G'+str(index[i][3]),link,format_rt)worksheet3.write('G'+str(index[i][4]),'%s/%s/%s/%s'%(Real_Servers,Server_Groups,Virtual_Servers,Filters),format_rt)worksheet3.write('G'+str(index[i][6]),'%.2f%%'%(float(Total-Free)/Total*100),format_rt)worksheet3.write('G'+str(index[i][7]),temp[0],format_rt)worksheet3.write('G'+str(index[i][9]),u'正常',format_right)if state[0] == state[3]:worksheet3.write('G10','master',format_rt)worksheet3.write('G20','backup',format_rt)else:worksheet3.write('G10','Error',format_red)worksheet3.write('G20','Error',format_red)if state[4] == state[-1]:worksheet3.write('G30','master',format_rt)worksheet3.write('G40','backup',format_rt)else:worksheet3.write('G30','Error',format_red)worksheet3.write('G40','Error',format_red)except IOError as reason:print "13_16-RD5412-6420.py"+str(reason)workbook.close()

5、总脚本入口

wlxj.sh # 总的脚本入口

    #!/bin/bash#-----------网络巡检--------------------dir=/usr/sh/shell/linux/xunjian/python_shelldir1=/usr/sh/shell/linux/xunjianif [ ! -d $dir1/$(date '+%Y%m%d') ];thenmkdir -p $dir1/$(date '+%Y%m%d')fi_shell(){pass='哈哈哈我是密码1'password='哈哈哈我是密码2'ps1='哈哈哈哈我是密码3'/usr/bin/python $dir/01DMZ-E8000E.py 'ip1' $pass $password/usr/bin/python $dir/02_03-M9006.py 'ip2' $pass $password/usr/bin/python $dir/02_03-M9006.py 'ip3' $pass $password/usr/bin/python $dir/04IN-FG3950B.py 'ip4' $password/usr/bin/python $dir/05_06DMZ-S9306.py 'ip5' $pass $password/usr/bin/python $dir/05_06DMZ-S9306.py 'ip6' $pass $password/usr/bin/python $dir/07_08-S12508.py 'ip7' $pass $password/usr/bin/python $dir/07_08-S12508.py 'ip8' $pass $password/usr/bin/python $dir/09_10SM-N7K.py 'ip9' $ps1/usr/bin/python $dir/09_10SM-N7K.py 'ip10' $ps1/usr/bin/python $dir/11_12DMZ-NE40E.py 'ip11' $password/usr/bin/python $dir/11_12DMZ-NE40E.py 'ip12' $password/usr/bin/python $dir/13_16-RD5412_6420.py 'ip13' $password/usr/bin/python $dir/13_16-RD5412_6420.py 'ip14' $password/usr/bin/python $dir/13_16-RD5412_6420.py 'ip15' $password/usr/bin/python $dir/13_16-RD5412_6420.py 'ip16' $password}aa=`ls -l $dir1/$(date '+%Y%m%d') | wc -l`Year=$(date '+%Y')Month=$(date '+%m')Day=$(date '+%d')if [ $Month -lt 10 ];thenMonth=`echo $Month | sed 's/0//g'`fiif [ $Day -lt 10 ];thenDay=`echo $Day | sed 's/0//g'`fitday=$(date '+%Y.%m.%d')new_tday="$Year.$Month.$Day"zip_tday="$Month.$Day"_shell# 这边尴尬了,输出的文件有的格式有问题,就得改改了cp -a $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt.bakcat $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt.bak | tr -s "\r\n" "\n" > $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txtcp -a $dir1/$(date '+%Y%m%d')/03SM-M9006.txt $dir1/$(date '+%Y%m%d')/03SM-M9006.txt.bakcat $dir1/$(date '+%Y%m%d')/03SM-M9006.txt.bak | tr -s "\r\n" "\n" > $dir1/$(date '+%Y%m%d')/03SM-M9006.txt# 得到excel 文件/usr/bin/python $dir/wangluo_xunjian.py > /dev/null 2>&1if [ -f $dir1/$(date '+%Y%m%d')/网络设备巡检-$tday.xlsx ];thensed -i 's/Cmcc.*$//g' $dir1/$(date '+%Y%m%d')/*.txtzip -qj $dir1/$(date '+%Y%m%d')/$zip_tday.zip $dir1/$(date '+%Y%m%d')/*.txt >/dev/nullif [ $? -ne 0 ];then/usr/bin/python $dir/mail_zip_error.py >/dev/null 2>&1elsemv $dir1/$(date '+%Y%m%d')/网络设备巡检-$tday.xlsx $dir1/$(date '+%Y%m%d')/网络设备巡检-$new_tday.xlsx/usr/bin/python $dir/mail.py xixixi@139.com "收件人,多个以分号分隔" "$dir1/$(date '+%Y%m%d')/网络设备巡检-$new_tday.xlsx" "$dir1/$(date '+%Y%m%d')/$zip_tday.zip"fielse/usr/bin/python $dir/mail_excel_error.py >/dev/null 2>&1fi

6、加入定时任务

我自己定的每天上午9点

7、成品图

以上这篇对Python 网络设备巡检脚本的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

对Python 网络设备巡检脚本的实例讲解相关推荐

  1. pythonappend教程_对python append 与浅拷贝的实例讲解

    在做Leetcode的第39题的时候,看到网上一个用递归的解法,很简洁.于是重写了一遍. class Solution(object): def combinationSum(self, candid ...

  2. python数据处理实例-Python数据处理numpy.median的实例讲解

    numpy模块下的median作用为: 计算沿指定轴的中位数 返回数组元素的中位数 其函数接口为: median(a, axis=None, out=None, overwrite_input=Fal ...

  3. shell脚本编程 实例讲解

    shell脚本编程 实例讲解 1.键盘输入三个数字,按照从大到小的顺序输出! 排序题 a b c 2 10 9 a=2 b=10 v=9 第一步: 两两相互进行比较,比较三次 第二步:不论谁大谁小,最 ...

  4. python transpose_对python 矩阵转置transpose的实例讲解

    在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img = Image.open(path) arr_im ...

  5. python转置矩阵函数_对python 矩阵转置transpose的实例讲解

    在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img = Image.open(path) arr_im ...

  6. python矩阵转置_对python矩阵转置transpose的实例讲解

    对python矩阵转置transpose的实例讲解 在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img ...

  7. python网络设备巡检(异常自动报警)_常用网络设备巡检命令参考(四)

    原标题:常用网络设备巡检命令参考(四) 1 港湾网络设备例行巡检数据采集任务 1.1 港湾交换机 Show version show services :显示设备当前的各种服务状态 show idle ...

  8. python 西门子触摸屏通讯_实例讲解博途编程实现S7300与西门子触摸屏通讯

    原标题:实例讲解博途编程实现S7300与西门子触摸屏通讯 目前国内流行用昆仑通泰或者威纶通触摸屏做项目,一方面价格便宜,另一方面编程简单.但西门子屏也经常会被用到,所以不得不学.简单写一下会用博图建立 ...

  9. 遗传算法python实现_Python遗传算法代码实例讲解

    目录 实例: 求解函数的最大值y=xsin(10x)+xsin(2x),自变量取值:0--5,用Python画出的图像如下 (注:此代码好像有一些感觉不对的地方,首先:没有保留那些适应度低的个体 po ...

  10. python调用程序call_call在Python中改进数列的实例讲解

    我们都有过函数调用的经历,那么call调用类实例的过程就跟函数很相似.类的用法很多人都知道了,类实例又是什么呢?可以把类看成一个设计图,类实例就是设计出的成品.现在我们弄清楚了call调用对象的概念, ...

最新文章

  1. R.Java文件报错
  2. Win32 GetWindowLong函数实例Demo
  3. php数据库单循环显示,php利用while单循环实现100行10列表格输出且每行颜色不一样...
  4. LINUX如何创建一个程序组
  5. 基于七牛播放器的直播
  6. Eclipse中如何创建文件夹管理多个项目
  7. 码绘与手绘——表达动态
  8. Windows10精简优化无人值守安装
  9. mysql中如何求出学生人数,mysql中如何查询同时参加计算机考试和英语考试的学生人数...
  10. 两会话文明 | 文明的行为,也是最美的风景
  11. 对前端的一些粗浅的认识
  12. 操场上有N x N个“巨人”按N行N列的矩阵形式列队,请编程找出该方阵中所有“最矮的巨人”。所谓“最矮的巨人”是指,该巨人在其所在行中,身高最高(没人比其更高);且在其所在列中,身高最矮
  13. linux硬件性能,Linux运维知识:Linux下的硬件性能测试工具汇总
  14. 高尔夫launch monitor
  15. pycharm导入第三方模块和包
  16. redis小白实战教程
  17. 读书札记:影响英镑的因素
  18. php+memcache 简单应用
  19. html表格文字横向显示,excel表格中如何将竖向文字变成横向的?:代码转换文字...
  20. RSTP协议原理与配置

热门文章

  1. 使用按键精灵编写云顶之奕挂机脚本
  2. java pdf加水印 性能_java 实现 PDF 加水印功能
  3. android 获取默认字体,Android中的默认字体系列是什么?
  4. matlab计算并联电阻怎么输入,如何用计算器快速计算并联电阻,并联电阻的计算方法...
  5. 记一次hive 报错NoViableAltException(-1@[215:51: ( KW_AS )?])
  6. SQL刷题:排名的问题
  7. 《华为研发》阅读 - 13
  8. CentOS下安裝iRedMail
  9. c语言引用win api,C调用WinAPI及窗口过程
  10. 如何生成CGCS2000坐标系等高线