web_logs: Add script to combine log files
This commit is contained in:
parent
cf87333ef8
commit
ffe43b8498
2 changed files with 78 additions and 0 deletions
70
roles/web_logs/files/combine-logs.py
Normal file
70
roles/web_logs/files/combine-logs.py
Normal 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)
|
|
@ -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 }}"
|
||||
|
|
Loading…
Add table
Reference in a new issue