#!/usr/bin/python#coding=gbkimport reimport sysimport subprocessimport osclass Mytool: #根据文件名读取文件内容 def getFileContent(self,filepath): if(os.path.exists(filepath)==False): return -1 else: content='' #print filepath f=file(filepath,'r') try: while True: line=f.readline() content=content+line if len(line)==0: break finally: #print line f.close() #print 'line',line return content #根据提供的字符串内容及正则返回需要截取的单个结果 def getRexReturn(self,rex,content): p=re.compile(rex) iter=p.finditer(content) for m in iter: res=m.group() #print res return res #根据提供的字符串内容及正则返回需要截取的多个结果 def getRexReturnList(self,rex,content): res=[] p=re.compile(rex) iter=p.finditer(content) for m in iter: res.append(m.group()) #print m.group() #print res return res #获得部署说明获取作者UM帐户 def getWriteUM(self,content): #p=re.compile(r'(作者\s([\S]+})\s)') #p=re.compile(r'((?:作者\s+)(\S)+)') p=re.compile(r'((?<=作者 )(\S)+(?=\s))') iter=p.finditer(content) writerList=[] for m in iter: #print "m" ,m.group(1) writerList.append(m.group(1)) print writerList return writerList def getWriteUMEmailList(self,content): emailList='' p=re.compile(r'((?<=作者 )(\S)+(?=\s))') emailList=p.findall(content) print emailList #根据提供的文件名返回版本信息 def getRdinfo(self,rdinfo): rdinfocontent='' content=self.getFileContent(rdinfo) print content if (content==-1): #/wls/deployop/versions/storage/isv2_db_2.15.0_standard/dist_stg_autod_1 path=os.getcwd() rex='(?<=storage/)(.*?)(?=_standard)' p=re.compile(rex) returnlist=p.findall(path) rdinfocontent=returnlist[0].upper() #print rdinfocontent else: titlerex=r'((?<=headline=)(\S)+)' title=self.getRexReturn(titlerex,content) rdrex=r'((?<=rdid=)(\S)+)' rd=self.getRexReturn(rdrex,content) testenv2rex=r'((?<=testenv2=)(\S)+)' testenv2=self.getRexReturn(testenv2rex,content) developerrex=r'((?<=developer=)(\S)+)' developer=self.getRexReturn(developerrex,content) rddaterex=r'((?<=rddate=)(\S)+)' rddate=self.getRexReturn(rddaterex,content) prd_planbegindaterex=r'((?<=prd_planbegindate=)(\S)+)' prd_planbegindate=self.getRexReturn(prd_planbegindaterex,content) pwdpath=os.getcwd() rdinfocontent="===========版本信息beigin==================================\n\n" rdinfocontent=rdinfocontent+rd+' '+title+'\n'+'部署环境'+testenv2+'\n'+'开发人员:'+developer+'\n' rdinfocontent=rdinfocontent+'版本移交时间:'+rddate+'\n'+'生产计划发布时间:'+prd_planbegindate+'\n\n'+pwdpath rdinfocontent=rdinfocontent+"\n==========版本信息end=======================================" return rdinfocontent def sendmail(self,sender,receiver,subject,message): ''' dsendmail --help Usage: dsendmail -s SUBJECT {-m MESSAGE|-f FILE} --to RECIPCIENTS [OPTION]... -s, --subject 指定主题 -m, --message 指定邮件内容 -f, --file 从文件中读取邮件内容 --to 指定收件人,以逗号分隔,下同 --cc 指定抄送址 --bcc -a, --attach 指定附件位置,以逗号分隔 -c, --content-type text/html或text/plain,缺省时根据内容判断 --from 发件人,
--smtp smtp服务器地址,默认为
--help 显示本信息 ''' cmdargs='/wls/deploysys/tools/dsendmail ' cmdargs=cmdargs+' -s ' +'"'+subject+'"' +' -m '+'"'+ message +'"'+ ' --from ' +'" '+ sender +' "'+ ' --to '+'" '+receiver+' "' print cmdargs cmdargs=cmdargs+' -a '+' -c '+ 'text/plain' print cmdargs p=subprocess.call(cmdargs,shell=True) if(p==0): print 'sendmail success' else: print 'sendmail fail' def getDcheckContent(self): cmdargs='deploytool dcheck' dcheckContent='本次执行结果汇总如下,详见日志\n\n' dcheckContent+=subprocess.Popen(cmdargs,shell=True,stdout=subprocess.PIPE).communicate()[0] #print dcheckContent #dcheckContent=subprocess.call(cmdargs,shell=True) where=dcheckContent.find('log个数') dcheckContent=dcheckContent[where+12:] dcheckContent+="\n 如下为对应的日志\n" dcheckContent=dcheckContent.replace('[1m','') dcheckContent=dcheckContent.replace('[0m','') dcheckContent=dcheckContent.replace('[32m','') dcheckContent=dcheckContent.replace('[31m','') dcheckContent=dcheckContent.replace('[33m','') dcheckContent=dcheckContent.replace('[ ','') dcheckContent=dcheckContent.replace('>>','') return dcheckContent #dcheck内容分析 def getErrorSqlLog(self): #s=self.getFileContent('ccc.txt') s=self.getDcheckContent() errorlogContent='' str1='.sql' str1sqlList =[] if(str1 in s): #1: ./dml/gbs/sr_pa02461797_74_gbspkg_dml_guozhengmin961_gbs.sql str1rex=r'([\S]+sql)' str1sqlList=self.getRexReturnList(str1rex,s) #print str1 str2='.run' str2sqlList=[] if(str2 in s): str2rex=r'([\S]+run)' str2sqlList=self.getRexReturnList(str2rex,s) #print str2 +':' #print str2sqlList str2Alllogcontent='' for f in str2sqlList: logcontent='==========================================================\n' logcontent=logcontent+f+'日志如下\n' logcontent=logcontent+'==========================================================\n' logcontent=logcontent+self.getFileContent(f) str2Alllogcontent=str2Alllogcontent+"正在执行或因故处于执行状态的脚本日志汇总如下:\n\n"+logcontent #print str2Alllogcontent errorlogContent=errorlogContent+str2Alllogcontent str3='.fail' str3sqlList=[] if (str3 in s): str3rex=r'([\S]+fail)' str3sqlList=self.getRexReturnList(str3rex,s) #print str3+':' str3Alllogcontent='' #print str3sqlList for f in str3sqlList: logcontent='==========================================================\n' logcontent=logcontent+f+'日志如下\n' logcontent=logcontent+'==========================================================\n' logcontent=logcontent+self.getFileContent(f) str3Alllogcontent=str3Alllogcontent+logcontent #print str3Alllogcontent errorlogContent=errorlogContent+"执行失败的脚本如下:\n\n"+str3Alllogcontent str4='.suc' str4sqlList=[] if (str4 in s): str4rex=r'([\S]+suc)' str4sqlList=self.getRexReturnList(str4rex,s) #print str4+':' str4Alllogcontent='' for f in str4sqlList: logcontent='==========================================================\n' logcontent=logcontent+f+'日志如下\n' logcontent=logcontent+'==========================================================\n' logcontent=logcontent+self.getFileContent(f) str4Alllogcontent=str4Alllogcontent+"有执行成功但报错的脚本汇总日志如下 :\n\n"+logcontent errorlogContent+=str4Alllogcontent #print errorlogContent return errorlogContentmytool=Mytool()print mytool.getFileContent('rdinfos');#rdinfos=mytool.getRdinfo('rdInfo.txt')dcheckContent=mytool.getDcheckContent()ErrorSqlLog=mytool.getErrorSqlLog()#msg=rdinfos+'\n'+ErrorSqlLog#content=mytool.getFileContent("egis.html")#titlerex=r'((?<=headline=)(\S)+)'#print writer.getRexReturn(titlerex,'headline=第1次移交--常规版本 EIM-RSTP-DB1.0.0')#print "content:",content#print mytool.getWriteUM(content)rdinfos=mytool.getRdinfo('rdInfo.txt')print rdinfosmsg="'"+rdinfos+"\n"+dcheckContent+ErrorSqlLog+"'"mytool.sendmail('***@163.com',***@163.com','sendmail test',msg)#print mytool.getDcheckContent()#print msg