#!/usr/bin/python2.7
#coding=utf-8
#DESCRIPTION:
#===============================================================
import sys
import socket
import datetime
import time
import re
import json
import codecs
from operator import itemgetter
from itertools import groupby
from datetime import datetime
socket.setdefaulttimeout(20)
reload(sys)
sys.setdefaultencoding('utf-8')
#主机端口初始化状态
#启动状态,200
#初始化状态,200,500
#关闭状态,500
systemHostPortStatusCode={
}
#主机系统映射表
hostSystemDic={
}
#主机端口与pool_name关系表
opHostPortPoolDict={
"APP_Innermanage22_POOL":{
"10.16.32.3:9091":"500",
"10.16.32.4:9091":"200"
},
"APP_Innermanage1_POOL":{
"10.16.32.4:8081 ":"200"
},
"APP_InnerXXXXX_POOL":{
"10.16.32.4:8082":"500"
},
"APP_Corpbank_POOL":{
"10.16.32.1:8083":"200",
"10.16.32.2:8083":"200",
"10.16.32.3:8083":"200",
"10.16.32.4:8083":"200"
},
"Test":{
"10.3.249.51:7012":"500",
"10.3.249.51:7012":"500"
}
}
urlList=[]
global urlTempList
TimeFormat_s='%Y-%M-%D %H:%M:%S.%f'
TimeFormat_e='%Y-%M-%D %H:%M:%S.%f'
def getCost(stime,etime):
#print stime
#print etime
e=datetime.datetime.strptime(etime,TimeFormat_e)
s=datetime.datetime.strptime(stime,TimeFormat_s)
return total_seconds(e-s)
def total_seconds(time_delta):
return 1.0 * (time_delta.microseconds + (time_delta.seconds + time_delta.days *24 *3600) *10**6)/10**6
class ReadSysLog(object):
"""docstring for ReadSysLog"""
def __init__(self, filename):
super(ReadSysLog, self).__init__()
#
self.filename=filename
#获取状态的正则
self.GetHostPortStatusReg=re.compile('Pool member\s*([\d,.,:]*)\s*monitor status\s*(\w*).')
#获取IP和端口的正则
self.GetHostPortReg=re.compile('((\d*).(\d*).(\d*).(\d*):(\d*))\s*\d\s*(\d*)')
#获取状态
def _getHostPortStatus(self,cronline):
statusList=self.GetHostPortStatusReg.findall(cronline)
if len(statusList) > 0:
self.HostPort=statusList[0][0]
self.Status=statusList[0][1]
#sysname = 'KEYONGXING-SYSTEM'
#instance = 'f5-status'
#endpoint = self.HostPort.split(':')[0]
#读取日志状态
if str(self.Status) == "up":
value = 200
else:
value = 500
global urlTempList
#拼接URL
url='%s'%(self.HostPort)
#print url+"%%%"+str(value)
for i in range(len(urlTempList)):
#print url
#print urlTempList[i]
if str(url) in str(urlTempList[i]):
#print '888888888'
urlTempList.remove(urlTempList[i])
break
lastUrl = url+" "+"0"+" "+str(value)
urlTempList.append(lastUrl) #放入缓存URL数组中
#print '-------------2---------------'+str(len(urlTempList))
#for i in range(len(urlTempList)):
#print urlTempList[i]
return True
return False
#run函数
def run(self):
self.init_status()
#print self.filename
with open(self.filename,'r') as cronlog:
for line in cronlog:
cronline=line.strip('\n')
cronline=cronline.decode('utf8')
#开始读取日志
self._getHostPortStatus(cronline)
#将数组内容按照映射关系写入文件中,便于下次读取发送
global urlTempList
for i in range(len(urlTempList)):
#print '-------------3---------------'+urlTempList[i]
host_port_list = self.GetHostPortReg.findall(urlTempList[i])
if len(host_port_list)> 0:
host_port_new = host_port_list[0][0]
status_new = host_port_list[0][6]
#print "((((((((((((((( "+host_port_new
#print "))))))))))))))) "+status_new
#保存的
#saveHostPortPoolDict={}
for pool_name,host_port_list in opHostPortPoolDict.items():
#saveHostPortPoolDict[pool_name]={}
for host_port_old,status in host_port_list.items():
if host_port_new == host_port_old:
opHostPortPoolDict[pool_name][host_port_old]=status_new
break
#print '-------------4---------------'
jsoninfo = json.dumps(opHostPortPoolDict) # 输出str类型
print opHostPortPoolDict
f = open("f5_status_tmp.txt",'w')
f.write(jsoninfo)
f.close()
#run函数
def init_status(self):
#urlList = []
#一次性读取所有缓存文件
f = open('f5_status_tmp.txt','r')
all_text = f.read()
data_json = json.loads(all_text)
f.close()
#print data_json
#遍历字典
for pool_name,host_port_list in data_json.items():
#print pool_name
#print host_port_list
active_count = 0 #可用数量
for host_port,status in host_port_list.items():
#print host_port,status
readUrl = host_port+" "+"0"+" "+status
if status == '200':
active_count += 1
urlList.append(readUrl)
#只要有一个member可用,整个pool为可用
if active_count > 0:
readUrl = pool_name+" "+"0"+" "+"200"
else:
readUrl = pool_name+" "+"0"+" "+"500"
urlList.append(readUrl) #此文件发送出去的值是正确值
global urlTempList
urlTempList = urlList #tmp文件处理
#print '--------------1--------------'+str(len(urlTempList))
#for i in range(len(urlTempList)):
#print urlTempList[i]
#print '============================'
#empty函数
def empty(self):
#self.init_status()
urlList=[]
global urlTempList
urlTempList=[]
if __name__ == '__main__':
if len(sys.argv) < 2:
sys.exit('Not Enough Args')
read=ReadSysLog(sys.argv[1])
read.run()
#print json.dumps(urlList)
print '\n'.join(urlList)
read.empty()
#coding=utf-8
#DESCRIPTION:
#===============================================================
import sys
import socket
import datetime
import time
import re
import json
import codecs
from operator import itemgetter
from itertools import groupby
from datetime import datetime
socket.setdefaulttimeout(20)
reload(sys)
sys.setdefaultencoding('utf-8')
#主机端口初始化状态
#启动状态,200
#初始化状态,200,500
#关闭状态,500
systemHostPortStatusCode={
}
#主机系统映射表
hostSystemDic={
}
#主机端口与pool_name关系表
opHostPortPoolDict={
"APP_Innermanage22_POOL":{
"10.16.32.3:9091":"500",
"10.16.32.4:9091":"200"
},
"APP_Innermanage1_POOL":{
"10.16.32.4:8081 ":"200"
},
"APP_InnerXXXXX_POOL":{
"10.16.32.4:8082":"500"
},
"APP_Corpbank_POOL":{
"10.16.32.1:8083":"200",
"10.16.32.2:8083":"200",
"10.16.32.3:8083":"200",
"10.16.32.4:8083":"200"
},
"Test":{
"10.3.249.51:7012":"500",
"10.3.249.51:7012":"500"
}
}
urlList=[]
global urlTempList
TimeFormat_s='%Y-%M-%D %H:%M:%S.%f'
TimeFormat_e='%Y-%M-%D %H:%M:%S.%f'
def getCost(stime,etime):
#print stime
#print etime
e=datetime.datetime.strptime(etime,TimeFormat_e)
s=datetime.datetime.strptime(stime,TimeFormat_s)
return total_seconds(e-s)
def total_seconds(time_delta):
return 1.0 * (time_delta.microseconds + (time_delta.seconds + time_delta.days *24 *3600) *10**6)/10**6
class ReadSysLog(object):
"""docstring for ReadSysLog"""
def __init__(self, filename):
super(ReadSysLog, self).__init__()
#
self.filename=filename
#获取状态的正则
self.GetHostPortStatusReg=re.compile('Pool member\s*([\d,.,:]*)\s*monitor status\s*(\w*).')
#获取IP和端口的正则
self.GetHostPortReg=re.compile('((\d*).(\d*).(\d*).(\d*):(\d*))\s*\d\s*(\d*)')
#获取状态
def _getHostPortStatus(self,cronline):
statusList=self.GetHostPortStatusReg.findall(cronline)
if len(statusList) > 0:
self.HostPort=statusList[0][0]
self.Status=statusList[0][1]
#sysname = 'KEYONGXING-SYSTEM'
#instance = 'f5-status'
#endpoint = self.HostPort.split(':')[0]
#读取日志状态
if str(self.Status) == "up":
value = 200
else:
value = 500
global urlTempList
#拼接URL
url='%s'%(self.HostPort)
#print url+"%%%"+str(value)
for i in range(len(urlTempList)):
#print url
#print urlTempList[i]
if str(url) in str(urlTempList[i]):
#print '888888888'
urlTempList.remove(urlTempList[i])
break
lastUrl = url+" "+"0"+" "+str(value)
urlTempList.append(lastUrl) #放入缓存URL数组中
#print '-------------2---------------'+str(len(urlTempList))
#for i in range(len(urlTempList)):
#print urlTempList[i]
return True
return False
#run函数
def run(self):
self.init_status()
#print self.filename
with open(self.filename,'r') as cronlog:
for line in cronlog:
cronline=line.strip('\n')
cronline=cronline.decode('utf8')
#开始读取日志
self._getHostPortStatus(cronline)
#将数组内容按照映射关系写入文件中,便于下次读取发送
global urlTempList
for i in range(len(urlTempList)):
#print '-------------3---------------'+urlTempList[i]
host_port_list = self.GetHostPortReg.findall(urlTempList[i])
if len(host_port_list)> 0:
host_port_new = host_port_list[0][0]
status_new = host_port_list[0][6]
#print "((((((((((((((( "+host_port_new
#print "))))))))))))))) "+status_new
#保存的
#saveHostPortPoolDict={}
for pool_name,host_port_list in opHostPortPoolDict.items():
#saveHostPortPoolDict[pool_name]={}
for host_port_old,status in host_port_list.items():
if host_port_new == host_port_old:
opHostPortPoolDict[pool_name][host_port_old]=status_new
break
#print '-------------4---------------'
jsoninfo = json.dumps(opHostPortPoolDict) # 输出str类型
print opHostPortPoolDict
f = open("f5_status_tmp.txt",'w')
f.write(jsoninfo)
f.close()
#run函数
def init_status(self):
#urlList = []
#一次性读取所有缓存文件
f = open('f5_status_tmp.txt','r')
all_text = f.read()
data_json = json.loads(all_text)
f.close()
#print data_json
#遍历字典
for pool_name,host_port_list in data_json.items():
#print pool_name
#print host_port_list
active_count = 0 #可用数量
for host_port,status in host_port_list.items():
#print host_port,status
readUrl = host_port+" "+"0"+" "+status
if status == '200':
active_count += 1
urlList.append(readUrl)
#只要有一个member可用,整个pool为可用
if active_count > 0:
readUrl = pool_name+" "+"0"+" "+"200"
else:
readUrl = pool_name+" "+"0"+" "+"500"
urlList.append(readUrl) #此文件发送出去的值是正确值
global urlTempList
urlTempList = urlList #tmp文件处理
#print '--------------1--------------'+str(len(urlTempList))
#for i in range(len(urlTempList)):
#print urlTempList[i]
#print '============================'
#empty函数
def empty(self):
#self.init_status()
urlList=[]
global urlTempList
urlTempList=[]
if __name__ == '__main__':
if len(sys.argv) < 2:
sys.exit('Not Enough Args')
read=ReadSysLog(sys.argv[1])
read.run()
#print json.dumps(urlList)
print '\n'.join(urlList)
read.empty()