监控读取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