日志分析器

日志根据时间有一定的显示,可以根据这个做日志分析消息流程


import re


import fnmatch
import os
import time
import sys


logfiles = []




class SmtransStats:
    def __init__(self, interval = 1):
        self.stats = {
            'recvmca': ['recved SCP MCA msg from',0, 0]
            # 'sendchg' : (0),
            # 'chgtimeout' : 0,
            # 'chgexpire' : 0,
            # 'mergedb' : 0,
            # 'chgresp' : 0,
            # 'delayedmerge' : 0,
            # 'maxsendmerge' : 0,
            # 'memmerge' : 0,
            # 'canreplace' : 0,
            # 'replace' : 0,
            # 'submit' : 0,
            # 'submitresp' : 0,
            # 'report' : 0
        }
        self.curtime, self.lasttime = 0,0
        self.printInterval = interval
        


    def getCurTime(self, line):
        timestr = line[:len("2013-01-14 14:55:13")]
        epocsec = time.mktime(time.strptime(timestr, "%Y-%m-%d %H:%M:%S"))
        return epocsec


    def setCurStat(self, k, v, line):
        self.curtime = self.getCurTime(line);
        self.stats[k][1] = v
    
    def setLastStat(self, k, v, line):
        self.curtime = self.getCurTime(line);
        self.stats[k][2] = v


    def getStatLog(self, k):
        return self.stats[k][0]


    def getCurStat(self, k):
        return self.stats[k][1]


    def getLastStat(self, k):
        return self.stats[k][2]


    def incCurStat(self, k, line):
        self.curtime = self.getCurTime(line);
        if self.curtime - self.lasttime > self.printInterval:
            self.printStats()
            time.sleep(1)
        self.stats[k][1] += 1


    def getStatKeys(self):
        return self.stats.keys()


    def printStats(self):
        for k in self.stats.keys():
            print "%s : %d %d" % (k, self.stats[k][1], self.stats[k][1] - self.stats[k][2])
        self.updateStats();


    def updateStats(self):
        self.lasttime = self.curtime
        for k in self.stats.keys():
            tmp = self.stats[k][1]
            self.stats[k][2] = tmp






def main(ss):
    while 1:
        for file in os.listdir('.'):
            if fnmatch.fnmatch(file, 'smtrans_*.log'):
                if not file in logfiles:
                    print "run file: ", file
                    logfiles.append(file)
                    for line in open(file, 'r'):
                        for k in ss.getStatKeys():
                            if ss.getStatLog(k) in line:
                                ss.incCurStat(k, line)
                                break
                    break
        else:
            time.sleep(1)


print __name__, sys.argv
if __name__ == "__main__":
    if len(sys.argv) > 1:
        ss = SmtransStats(sys.argv[1])
    else:
        ss = SmtransStats(10)            
    main(ss)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值