Skip to content

Instantly share code, notes, and snippets.

@evjeny
Created July 7, 2022 12:49
Show Gist options
  • Save evjeny/88550162528ef658a2e67111ed34557c to your computer and use it in GitHub Desktop.
Save evjeny/88550162528ef658a2e67111ed34557c to your computer and use it in GitHub Desktop.
log reader for salesdb
import argparse
from dataclasses import dataclass
import re
@dataclass
class ParseResult:
request_time: float = 0
insert_time: float = 0
def parse_line(line: str) -> ParseResult:
search_result = re.findall(r"(\d+\.\d+ seconds.*)(insert|request)", line)
if len(search_result) == 0:
return ParseResult()
number_group, type_group = search_result[-1]
number = float(re.findall(r"\d+\.\d+", number_group)[0])
if "request" in type_group:
return ParseResult(request_time=number)
else:
return ParseResult(insert_time=number)
def main(log_path: str):
with open(log_path) as f:
lines = f.readlines()
request_times: list[float] = []
insert_times: list[float] = []
for line_res in map(parse_line, lines):
req_time: float = line_res.request_time
ins_time: float = line_res.insert_time
if req_time > 0:
request_times.append(req_time)
if ins_time > 0:
insert_times.append(ins_time)
total_request = sum(request_times)
count_request = len(request_times)
mean_request = total_request / count_request
total_insert = sum(insert_times)
count_insert = len(insert_times)
mean_insert = total_insert / count_insert
print(f"{count_request} requests, total time: {total_request:.2f} s, mean: {mean_request:.2f} s")
print(f"{count_insert} inserts, total time: {total_insert:.2f} s, mean: {mean_insert:.2f} s")
if __name__ == "__main__":
parser = argparse.ArgumentParser("SalesDB_fill log analyzer")
parser.add_argument("--log_path", type=str, required=True, help="path to log string")
args = parser.parse_args()
main(args.log_path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment