需求:用python脚本统计线上AMQ的Number of Pending Messages数量,当达到10的时候发送Email报警邮件
脚本实现逻辑如下:
1)用户名密码登陆到WEB页面
2)获取WEB页面的源代码
3)用正则表达式匹配AMQ的Number of Pending Messages值
4)判断是否达到报警阀值
5)如果达到报警阀值,发送Email报警邮件
在登陆AMQ页面的时候用Fiddler工具(www.fiddler2.com)查看HTTP请求的详细过程。
Fiddler工具的Headers可以查看HTTP请求的Header头信息。
Fiddler工具的Auth可以看到客户端发送过来的用户名和密码信息。
Fiddler工具的RAW可以查看详细的消息结构
在Headers头中看到的信息Authorization: Basic YWRtaW46YWRtaW5AdGNsdWI= 红色的部分其实是HTTP认证的用户名和密码,是通过base64加密的,在python通过base64可以解密出用户名和密码,和Auth里面看到的一致。
1
2
3
4
5
6
7
8
|
>>> import base64
>>> s = 'YWRtaW46YWRtaW5AdGNsdWI='
>>> import tab
>>> import base64
>>> s = 'YWRtaW46YWRtaW5AdGNsdWI='
>>> print base64.b64
>>> print base64.b64decode(s)
admin:admin@tclub |
在Python脚本中,发送http请求的时候把fiddler分析出来的这个“Authorization: Basic YWRtaW46YWRtaW4=”加上就OK了,就是把用户名密码转换成base64加到header头里面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#!/usr/bin/env python #sfzhang131029 #encoding:utf-8 import re
import os
import sys
import time
import base64
import urllib2
date = time.strftime( '%Y-%m%d-%H:%M' )
login_url = 'http://192.168.1.244:8161/admin/xml/queues.jsp'
req = urllib2.Request(login_url)
Username = 'admin'
Password = 'admin@tclub'
max_size = 0
#把用户名密码转换成Base64编码 base64_info = base64.encodestring(
'%s:%s' % (Username, Password))[: - 1 ]
print base64_info
auth_header = "Basic %s" % base64_info
#把Fiddler分析出来"Authorization: Basic YWRtaW46YWRtaW5AdGNsdWI="添加到HTTP请求头里面 req.add_header( "Authorization" , auth_header)
try :
handle = urllib2.urlopen(req)
except IOError, e:
print "your username or password is wrong"
sys.exit( 1 )
html = handle.read()
#用正则表达匹配AMQ"Number of Pending Messages"数值 r1 = r 'size="[0-9]*"'
size_list = re.findall(r1,html)
#print size_list #找出size最大值 for i in size_list:
tmp = int (i.split( '=' )[ 1 ].replace( '"' ,''))
if tmp > max_size:
max_size = tmp
print max_size
mail_CMD = "echo '%s The number of apache amq entry connections is more then %d' and check! |mail -s 'Apache amq alarm' zhangshifeng@tclub.cn" % (date,max_size)
#用if判断如果超出阀值,则发送报警邮件 if max_size < 10 :
print "%s The apache amq is ok!" % date
else :
print "%s The number of apache amq entry connections is more then %d and check!" % (date,max_size)
os.system(mail_CMD)
|
总结:Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
本文转自 sfzhang 51CTO博客,原文链接:http://blog.51cto.com/sfzhang88/1316789,如需转载请自行联系原作者