Source code for chimcla.log_time_filter
"""
This script is used to filter log file by timestamps
"""
import os
from datetime import datetime
import argparse
[docs]
def load_lines(logfile_path):
with open(logfile_path) as fp:
lines = fp.readlines()
return lines
[docs]
def check_date(date_string):
result = False
if (len(date_string) == 10):
date_year = date_string[0:4]
date_month = date_string[5:7]
date_day = date_string[8:10]
if (date_year.isdigit() and date_month.isdigit() and date_day.isdigit()):
if (2020 <= int(date_year) <= 2030):
if (1 <= int(date_month) <= 12):
if (1 <= int(date_day) <= 31):
result = True
return result
[docs]
def save_logfile(filter_list, begin_date, end_date, path):
new_logfile_name = "{0}/classifier_from_{1}_to_{2}.log".format(path, begin_date, end_date)
with open(new_logfile_name, 'w') as new_logfile:
for line in filter_list:
new_logfile.write(f"{line}")
[docs]
class MainManager:
def __init__(self):
self.parse_args()
if not (check_date(self.args.begin) and check_date(self.args.end)):
print("Input invalid, please check the begin and end date!")
exit()
self.load_logfile()
[docs]
def parse_args(self):
parser = argparse.ArgumentParser(
prog='log_time_filter',
description='filters the log entries within a defined time period',
)
parser.add_argument('--logfile', "-l", help="the logfile to be evaluated", required=True)
parser.add_argument('--begin', "-b", help="day of the beginning (YYYY-MM-DD, 2024-08-01)", required=True)
parser.add_argument('--end', "-e", help="day of the ending (YYYY-MM-DD, 2024-08-02)", required=True)
self.args = parser.parse_args()
[docs]
def load_logfile(self):
self.all_lines = load_lines(self.args.logfile)
[docs]
def main(self):
full_list = self.all_lines #[:1000]
filter_list = []
begin_date = datetime.strptime(self.args.begin, "%Y-%m-%d")
end_date = datetime.strptime(self.args.end, "%Y-%m-%d")
for row in full_list:
if check_date(row[:10]):
# get date
day_string = row[:10]
# check if date is in range
day_date = datetime.strptime(day_string, "%Y-%m-%d")
if begin_date <= day_date <= end_date:
filter_list.append(row)
print(row)
else:
if day_date > end_date: #stops if there are more entries after the relevant period
break
# print(*filter_list)
save_logfile(filter_list, self.args.begin, self.args.end, os.path.dirname(self.args.logfile))
[docs]
def main():
mm = MainManager()
mm.main()
if __name__ == "__main__":
main()