GPU监控(二)获取log文件中的内容

一、需求背景和目标

对python脚本传参实现对时间区间的控制,输出该时间区间内的GPU使用记录,即该时间区间内的log文件内容。

本文章记录需求实现第二部分:获取log文件中的内容保存在df中,便于后续绘制折线图。

二、实现思路

在这里插入图片描述
由于需要传参确定时间区间,所以需要根据log文件名和gpu_time确定该条信息是否处于参数期间。首先要筛选出log文件中的内容

三、代码实现

import sys
import os
import argparse
import datetime as dt
from datetime import datetime

# 获取地址
proj_path = r'/home/gpu_usage_monitor'
sys.path.append(proj_path)

# 筛选log文件
def filter_logs(start_time,end_time):
    # 对传入的字符串转换为时间格式
    start_time = datetime.strptime(start_time,"%Y-%m-%d")
    end_time = datetime.strptime(end_time,"%Y-%m-%d")

    filtered_log = []
    log_floder = os.path.join(proj_path,'usage_log')
    #遍历访问usage_log文件夹,log文件均记录在该文件夹中
    for filename in os.listdir(log_floder):
        # 提取log文件命名中的日期,便于和传入的参数比较
        file_date_str = filename.split("_")[2].split(".")[0] #log文件命名为gpu_usage_yyyy_mm_dd.log
        file_datetime = datetime.strptime(file_date_str,"%Y-%m-%d")
        
        # 筛选符合用户输入的时间区间的log文件
        if start_time.date() <= file_datetime.date() <= end_time.date():
            with open(os.path.join(log_floder,filename),'r') as file:
                lines = file.readlines()
      
                # 若传入的参数格式为yyyy-mm-dd,用这个
                for i in lines[1:]:
                    filtered_log.append(i.strip())

               '''# 若传入的参数格式为yyyy-mm-dd H:M:S,用这个
               for i in lines[1:]:
                   columns = i.strip().split(',')
                   use_datetime = datetime.strptime(f"20{columns[0]} {columns[1]}","%Y-%m-%d %H:%M:%S")
                   if start_time <= use_datetime <= end_time:
                   filtered_log.append(i.strip())
               '''
   return filtered_log

if __name__ =="__main__":
    today = dt.date.today()
    parser = argparse.ArgumentParser(description="filter logs by time range")
    # 如果不传参,默认参数为2023-08-18到当天
    parser.addargument("start_time",type=str,default='2023-08-18',required=False,help="start_time in the format 'yyyy-mm-dd'")
    parser.addargument("end_time",type=str,default=today,required=False,help="end_time in the format 'yyyy-mm-dd'")
    args = parser.parser_args()

    filter_logs(args.start_time,args.end_time)

四、实现效果

不传参的情况,log文件内从11点20开始有的数据:
在这里插入图片描述
传参的调用语句:python3 gpu_uasge_jpg.py --start_time '2023-08-17' --end_time '2023-08-18'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值