监控读取AWS,6466磁带设备的事件通知邮件,进行过滤压制之后传送给ovou系统
Telmail.sh,telmail.pl为两个邮件发送例程
1 # -*- coding: gb2312 -*- 2 3 ''' 4 summary: 5 1.6466磁带库报警处理 6 2.AWS报警处理 7 传输接口: smtp 8 过滤邮件内容,生成事件到ovo 9 author : zhangbin 10 date: 2006.03.04 11 company: ultrapower.com.cn 12 ''' 13 14 15 import os 16 import sys 17 import socket 18 import time 19 import poplib 20 import base64 21 import string 22 import re 23 from conf import * 24 25 26 27 aws_field_map={'Information':'normal', 28 'Warning':'warning', 29 'Degraded':'major', 30 'Critical':'critical', 31 'Fatal':'critical' 32 } 33 ME='szmail' 34 this = modlist[ME] 35 36 host=this['host'] 37 user=this['user'] 38 passwd =this['passwd'] 39 40 41 def Print(msg): 42 lp(ME,msg) 43 44 45 def process_AWS(title,msg): 46 try: 47 app='AWS' 48 node='' 49 obj='' 50 severity='' 51 msg_text='' 52 53 print '>>>',msg 54 title.index('CSF Fault Detected') 55 lines = msg.split('\n') 56 57 for l in lines: 58 r = re.match('.*Fault id.*?:\s*(.*)/(.*)',l) 59 if r: 60 node = r.group(1) 61 obj = r.group(2) 62 continue 63 r = re.match('.*Severity.*?:\s*(\w+)',l) 64 if r: 65 f= r.group(1).strip() 66 if aws_field_map.has_key(f): 67 severity = aws_field_map[f] 68 continue 69 r = re.match('.*Synopsis.*?:\s*([\w|\s]+)',l) 70 if r : 71 msg_text=r.group(1) 72 cmd = "opcmsg app=AWS " 73 if node: 74 cmd = cmd+ " node=%s "%node 75 if obj: 76 cmd = cmd+ " obj=%s "%obj 77 if severity: 78 cmd= cmd + " severity=%s "%severity 79 if msg_text: 80 cmd = cmd + ' msg_text="%s" '%msg_text 81 print "execute command:%s"%cmd 82 except: 83 return False 84 return True 85 86 87 88 def process_TAPE(title,msg): 89 ''' for 6466 tape monitor ''' 90 91 92 def mail_sender(body): 93 pass 94 95 def mail_hdr_section(section,body): 96 title='' 97 try: 98 n = body.index('') 99 for i in range(n): 100 try: 101 occ = body[i].index(section+':') 102 title= body[i][ (occ+len(section+':')):] 103 except: 104 continue 105 except: 106 pass 107 return title 108 109 def mail_context(encode,body): 110 ''' extract mail body text from string-list 111 multiple charset will be encoded to base64,but plain text will not 112 ''' 113 context ='' 114 try: 115 n = body.index('') 116 lines = body[n:] 117 if encode.find('base64') >= 0 : 118 context = base64.decodestring(context) 119 else : 120 context = string.join(lines,'\n') #maybe 7bit 121 except: 122 pass 123 return context 124 125 def process(c,m): 126 ''' c -- mail number, 127 m -- mail object 128 提取邮件标题和邮件内容 129 ''' 130 for i in range(1): 131 print ">>>>Process %d"%(i+1) 132 list = m.retr(i+1) 133 title = mail_hdr_section('Subject',list[1]) 134 encode = mail_hdr_section('Content-Transfer-Encoding',list[1]) 135 print list[1] 136 context = mail_context(encode.strip(),list[1]) 137 if not process_AWS(title,context): 138 process_TAPE(title,context) 139 #m.dele(i+1) 140 141 def main_entry(): 142 Print('OK+,%s start up!'%ME) 143 while True: 144 try: 145 m = poplib.POP3(host) 146 m.user(user) 147 m.pass_(passwd) 148 c = m.stat()[0] 149 if c : 150 print ">> Detected %s Letters!"%(c) 151 process(c,m) 152 m.quit() 153 except: 154 pass 155 time.sleep(this['wait']) 156 157 if __name__=='__main__': 158 main_entry() 159 160
|