计算日志信息里各性能所消耗的时间

该博客主要探讨如何从日志数据中提取并计算各个性能指标所消耗的时间,通过对日志信息的深入分析,了解系统运行的效率和瓶颈。
摘要由CSDN通过智能技术生成

日志信息如图

 

 

import re
import os 
import csv
import argparse

#得到输入的参数,日志路径
def get_args():
    parser = argparse.ArgumentParser(\
            description="get cost time",\
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    
    parser.add_argument("-d", "--log_dir",\
            required=True,\
            help="the logs directory",\
            dest="d")
    
    args = parser.parse_args()
    log_dir = args.d
    return log_dir

#获取目录里所需的文件,并保存至list
def get_files(log_dir):
    log_list = []
    for root, dirs, files in os.walk(log_dir):
        if not files:
            continue
        for file in files:
            if file.endswith(".log") :
                complete_path = os.path.join(root, file)
                log_list.append(complete_path)
        return log_list

#得到每一个需要统计的属性
def items_classify(file_name):
    pattern = re.compile("](.*)cost time:\d+.\d+\(ms\)")
    with open(file_name, "r") as f:
        contents = f.read()
        items = set(pattern.findall(contents))
        f.close()
    return contents, items

#匹配时间消耗
def items_match(contents, item):
    number_list = []
    pattern = re.compile("](.*)cost time:(\d+.\d+|\d)\(ms\)")
    titles = pattern.findall(contents)
    for i in range(len(titles)):
        if item in titles[i]:
            number_list.append(titles[i][1])
    return item, number_list

#计算min, avg, max消耗
def calculate(number_list, item):
    time_cost = 0
    num = 0
    for i in range(len(number_list)):
        time_cost = float(number_list[i]) + time_cost
        num += 1
    avg_time = time_cost/num
    max_time, min_time = compare_value(number_list)
    save_result(item, min_time, round(avg_time, 3), max_time)


def compare_value(alist):
    if alist != []:
        max_value, min_value = alist[0], alist[0]
        for x in alist:
            if float(max_value) < float(x):
                max_value = x
            if float(min_value) > float(x):
                min_value = x
        return max_value, min_value

#将结果保存至CSV
def save_result(item, min_time, avg_time, #max_time):
    csv_data = [item, min_time, avg_time, max_time]
    print "%s: min=%s, avg=%s, max=%s"%(item ,min_time, avg_time, max_time)
    with open("result1.csv", "ab") as f:
        writer = csv.writer(f)
        writer.writerow(csv_data)
        f.close()
    
def work(log_dir):
    #可根据实际情况选择单个文件或者文件夹
    #file_names = get_files(log_dir)
    #for file_name in file_names:
    #if log_dir.endswith('.log'):
    contents, items = items_classify(log_dir)
    for item in items:
        item, number_list = items_match(contents, item)    
        calculate(number_list, item)


def main():
    log_dir = get_args()
    work(log_dir)


if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值