web_logs: Add script to combine log files

This commit is contained in:
Timo Makinen 2025-03-08 20:59:48 +00:00
parent cf87333ef8
commit ffe43b8498
2 changed files with 78 additions and 0 deletions

View file

@ -0,0 +1,70 @@
#!/usr/bin/env python3
import argparse
import datetime
import os
import sys
from time import mktime
def read_line(log, date=None):
while True:
line = log["fp"].readline().strip()
if not line:
raise EOFError
time = datetime.datetime.strptime(
" ".join(line.split()[3:5]), "[%d/%b/%Y:%H:%M:%S +0000]"
)
if date is not None and time.strftime("%Y-%m-%d") != date:
continue
log["time"] = time
log["line"] = line
log["linenum"] += 1
break
def combine_logs(logfiles, date=None):
logs = []
for logfile in logfiles:
if os.stat(logfile).st_size == 0:
continue
logs.append(
{"fp": open(logfile, "r"), "line": None, "linenum": 0, "time": None}
)
try:
read_line(logs[-1], date)
except EOFError:
del logs[-1]
while True:
if len(logs) == 0:
break
logs = sorted(logs, key=lambda x: x["time"])
print(logs[0]["line"])
try:
read_line(logs[0], date)
except EOFError:
del logs[0]
def date_now():
return datetime.datetime.now()
if __name__ == "__main__":
try:
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--date", default=None)
parser.add_argument("logfiles", nargs="+")
args = parser.parse_args()
if args.date is not None:
if args.date == "today":
date = date_now().strftime("%Y-%m-%d")
elif args.date == "yesterday":
date = (date_now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
else:
date = args.date
combine_logs(args.logfiles, date=date)
except KeyboardInterrupt:
sys.ext(1)

View file

@ -39,3 +39,11 @@
owner: root
group: "{{ ansible_wheel }}"
follow: false
- name: Copy log combiner
ansible.builtin.copy:
dest: /usr/local/bin/combine-logs
src: combine-logs.py
mode: "0755"
owner: root
group: "{{ ansible_wheel }}"