monitor tomcat sctips
#!/usr/bin/python #coding=utf-8 import datetime from subprocess import Popen, PIPE import os import smtplib from email.mime.text import MIMEText from email.header import Header import commands class TomcatMonitor: def __init__(self): self.today = datetime.datetime.now().strftime("%Y-%m-%d") self.daybefyesday = (datetime.datetime.now()-datetime.timedelta(days =2)).strftime("%Y-%m-%d") self.tomcatLogPath = '/xebest/tomcat/logs/catalina.%s.out' % self.today self.mailList = '/opt/scripts/maillist/mail-%s.log' % self.today self.oldMailList = '/opt/scripts/maillist/mail-%s.log' % self.daybefyesday self.sender = '123123@qq.com' self.receiver = [ '1231231231@qq.com', ] self.subject = '{{ id }} tomcat expect notify' self.smtpserver = 'smtp.qq.com' self.username = '1231231231@qq.com' self.password = '123123123' self.content = '' def collectTomcatInfo(self): self.ps = Popen("grep -n 'Exception:' %s" % self.tomcatLogPath, shell=True, stdout=PIPE, stderr=PIPE) self.output_lines = self.ps.stdout.readlines() #for line in output_lines: # print ('|').join(line.strip().split(":",1)) def contrastInfo(self): if os.path.exists(self.mailList): self.infoInFile = [] with open(self.mailList) as f: for l in f: self.infoInFile.append(l.strip().split('|')[0]) with open(self.mailList,'a') as f: for line in self.output_lines: if line.strip().split(":",1)[0] in self.infoInFile: continue else: f.write(('|').join(line.strip().split(":",1))+"|"+self.tomcatLogPath+"|"+"0") f.write('\n') else: with open(self.mailList,'w') as f: for line in self.output_lines: self.temp = ('|').join(line.strip().split(":",1))+"|"+self.tomcatLogPath+"|"+"0" self.temp += '\n' f.write(self.temp) def useQqSendMail(self): msg = MIMEText( self.content.encode('utf8'), _charset = 'utf8') msg['From'] = self.sender msg['Subject'] = u'%s' % self.subject msg['To'] = ",".join( self.receiver ) try: s = smtplib.SMTP_SSL( self.smtpserver, 465 ) #s.set_debuglevel(1) #s.connect(mail_host) s.login(self.username, self.password) s.sendmail(self.username,self.receiver , msg.as_string()) s.close() return 0 except Exception as e: #print 'Exception: ', e return 1 def sendMail(self): writeBackToFile = '' with open(self.mailList) as f: for l in f: l = l.strip().split("|") if l[3] == '0': self.content = self.content + ('\t').join(l) + '\n' l[3] = '1' writeBackToFile = writeBackToFile + ('|').join(l) + '\n' if len(self.content) != 0: # cmd = "echo '%s' | /bin/mail -s '%s' %s" % (self.content,self.subject,self.receiver) # status,result = commands.getstatusoutput(cmd) status = self.useQqSendMail() if status == 0: with open(self.mailList,'w') as f: f.write(writeBackToFile) # self.ps = Popen("echo %s | mail -s %s %s" % (self.content,self.subject,self.receiver), shell=True, stdout=PIPE, stderr=PIPE) def cleanOldFile(self): if os.path.exists(self.oldMailList): os.remove(self.oldMailList) def run(self): self.collectTomcatInfo() self.contrastInfo() self.sendMail() self.cleanOldFile() if __name__ == '__main__': tomcat = TomcatMonitor() tomcat.run()