一个读取txt文件格式,内容为字符串的字典格式,通过转化读取正则表达式修改value,再保存为txt文件格式

#!/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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值