#!/usr/bin/python
import re
import os
import urllib
import json
def buffer_line(monitor_log):
buf = open("/etc/sae/apns_buffer.txt","r").read()
bytes=os.popen('wc -c /data0/logs/%s'%monitor_log).read().split(" ")[0]
if int(bytes) < int(buf):
return 0
else:
return int(re.findall("^\d*", buf)[0])
def set_last_pos(pos):
open("/etc/sae/apns_buffer.txt", "w").write(str(pos))
def monitor_work(monitor_log):
fh = open('/data0/logs/%s'%monitor_log,'r')
fh.seek(buffer_line(monitor_log))
content = fh.read()
new_total_lines = len(content) + buffer_line(monitor_log)
set_last_pos(new_total_lines)
new_lines = content.split("\n")
return new_lines
def monitor_work_1(content,grade):
dict_1={'service':'apns_monitor','checkpoint':'apns_monitor_log','title':content,'content':content,'cluster':'public','grade':grade}
params = urllib.urlencode(dict_1)
urllib.urlopen('****************',params)
if __name__ == '__main__':
sum=0
list_except=[]
list_ERROR=[]
now_log = monitor_work('apns.log')
for i in now_log:
if i.find('count') >= 0:
m=re.search('(?<=all msg count:)(\d.*)(?=\.)',i)
f=m.group().split(' ')
msg_all_count=f[0].split('.')[0]
msg_scu_count=f[2].split(':')[1].split('.')[0]
msg_spend=f[3].split(':')[1].split('s')[0]
msg_error=f[5].split(':')[1].split('.')[0]
msg_sec=f[-1].split(':')[1]
print 'msg_all_count:'+msg_all_count,'msg_scu_count:'+msg_scu_count,'msg_spend:'+msg_spend,'msg_error:'+msg_error,'msg_sec'+msg_sec
if int(msg_scu_count) > 0:
if int(msg_spend)/int(msg_scu_count) > 6:
spend=int(msg_spend)/int(msg_scu_count)
monitor_work_1('msg_spend_error:'+spend,'2')
if int(msg_sec) < 5:
monitor_work_1('msg_sleep_error:'+msg_sec,'2')
elif i.find('ERROR') >= 0:
if i.find('exception') >= 0:
mm=re.search('(?<=exception: )\w.*',i)
except_line=mm.group()
list_except.append(except_line)
else:
mm=re.search('(?<=ERROR] )\w.*',i)
list_ERROR.append(mm.group())
if len(list_except) > 0:
date_json=simplejson.dumps(list_except)
monitor_work_1(date_json,'1')
elif len(list_ERROR) > 0:
date_json=simplejson.dumps(list_ERROR)
monitor_work_1(date_json,'2')