parent
672b9ff1f0
commit
25f83a654e
1 changed files with 0 additions and 72 deletions
@ -1,72 +0,0 @@ |
||||
#!/usr/bin/env python3 |
||||
import bz2 |
||||
import os |
||||
import sys |
||||
import numbers |
||||
|
||||
import dictdiffer |
||||
if "CI" in os.environ: |
||||
tqdm = lambda x: x |
||||
else: |
||||
from tqdm import tqdm # type: ignore |
||||
|
||||
from tools.lib.logreader import LogReader |
||||
|
||||
def save_log(dest, log_msgs): |
||||
dat = b"" |
||||
for msg in tqdm(log_msgs): |
||||
dat += msg.as_builder().to_bytes() |
||||
dat = bz2.compress(dat) |
||||
|
||||
with open(dest, "wb") as f: |
||||
f.write(dat) |
||||
|
||||
def remove_ignored_fields(msg, ignore): |
||||
msg = msg.as_builder() |
||||
for key in ignore: |
||||
attr = msg |
||||
keys = key.split(".") |
||||
if msg.which() not in key and len(keys) > 1: |
||||
continue |
||||
|
||||
for k in keys[:-1]: |
||||
try: |
||||
attr = getattr(msg, k) |
||||
except: |
||||
break |
||||
else: |
||||
v = getattr(attr, keys[-1]) |
||||
if isinstance(v, bool): |
||||
val = False |
||||
elif isinstance(v, numbers.Number): |
||||
val = 0 |
||||
else: |
||||
raise NotImplementedError |
||||
setattr(attr, keys[-1], val) |
||||
return msg.as_reader() |
||||
|
||||
def compare_logs(log1, log2, ignore_fields=[], ignore_msgs=[]): |
||||
filter_msgs = lambda m: m.which() not in ignore_msgs |
||||
log1, log2 = [list(filter(filter_msgs, log)) for log in (log1, log2)] |
||||
assert len(log1) == len(log2), "logs are not same length: " + str(len(log1)) + " VS " + str(len(log2)) |
||||
|
||||
diff = [] |
||||
for msg1, msg2 in tqdm(zip(log1, log2)): |
||||
if msg1.which() != msg2.which(): |
||||
print(msg1, msg2) |
||||
raise Exception("msgs not aligned between logs") |
||||
|
||||
msg1_bytes = remove_ignored_fields(msg1, ignore_fields).as_builder().to_bytes() |
||||
msg2_bytes = remove_ignored_fields(msg2, ignore_fields).as_builder().to_bytes() |
||||
|
||||
if msg1_bytes != msg2_bytes: |
||||
msg1_dict = msg1.to_dict(verbose=True) |
||||
msg2_dict = msg2.to_dict(verbose=True) |
||||
dd = dictdiffer.diff(msg1_dict, msg2_dict, ignore=ignore_fields, tolerance=0) |
||||
diff.extend(dd) |
||||
return diff |
||||
|
||||
if __name__ == "__main__": |
||||
log1 = list(LogReader(sys.argv[1])) |
||||
log2 = list(LogReader(sys.argv[2])) |
||||
print(compare_logs(log1, log2, sys.argv[3:])) |
Loading…
Reference in new issue