Skip to content

Commit 502e159

Browse files
committed
fix(frequent_log_checker): print the largest number of each frequent log
Signed-off-by: Takayuki Murooka <takayuki5168@gmail.com>
1 parent 8855453 commit 502e159

1 file changed

Lines changed: 22 additions & 12 deletions

File tree

common/autoware_debug_tools/autoware_debug_tools/frequent_log_checker.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def is_in(self, log_list):
3737

3838
def check(log_file, duration_to_count, log_count_threshold, log_format):
3939
recent_log_list = []
40-
unique_frequent_log_list = []
40+
unique_frequent_log_list = {}
4141

4242
with open(log_file, "r") as f:
4343
for full_message in f.readlines():
@@ -62,12 +62,9 @@ def check(log_file, duration_to_count, log_count_threshold, log_format):
6262
except ValueError:
6363
continue
6464

65-
# skip if the log is already considered as frequent
66-
if recent_log.is_in(unique_frequent_log_list):
67-
continue
6865
recent_log_list.append(recent_log)
6966

70-
# remove obsolete or already frequent log
67+
# remove obsolete log
7168
for log in recent_log_list[:]:
7269
duration = timestamp - log.timestamp
7370
if duration_to_count < duration:
@@ -76,32 +73,45 @@ def check(log_file, duration_to_count, log_count_threshold, log_format):
7673
# extract duplicated (= frequent) log
7774
for i in range(len(recent_log_list)):
7875
log_count = 0
79-
if recent_log_list[i].is_in(unique_frequent_log_list):
80-
continue
81-
8276
for j in range(len(recent_log_list)):
8377
if i <= j:
8478
continue
8579
if recent_log_list[i].is_same(recent_log_list[j]):
8680
log_count += 1
8781

8882
if log_count_threshold <= log_count:
89-
unique_frequent_log_list.append(recent_log_list[i])
83+
contained_frequent_log = None
84+
for frequent_log in unique_frequent_log_list:
85+
if frequent_log.is_same(recent_log_list[i]):
86+
contained_frequent_log = frequent_log
87+
break
88+
89+
if contained_frequent_log:
90+
# update the existing value
91+
unique_frequent_log_list[contained_frequent_log] = max(
92+
unique_frequent_log_list[contained_frequent_log], log_count
93+
)
94+
else:
95+
# add a new key and value
96+
unique_frequent_log_list[recent_log_list[i]] = log_count
9097

9198
if len(unique_frequent_log_list) == 0:
9299
print(
93100
"No frequent log. The log format designated by the `-f` option may be different from the actual log format."
94101
)
95102
else:
96103
for frequent_log in unique_frequent_log_list:
97-
print(frequent_log.full_message)
104+
log_count = unique_frequent_log_list[frequent_log]
105+
print(f"{frequent_log.full_message[:-1]}\t{log_count}")
98106

99107

100108
def main():
101109
parser = argparse.ArgumentParser(description="frequent log checker")
102110
parser.add_argument("log_file", help="launch log file")
103-
parser.add_argument("-d", "--log-duration", default=1.0, help="duration to count log")
104-
parser.add_argument("-c", "--log-count", default=2, help="log count threshold")
111+
parser.add_argument(
112+
"-d", "--log-duration", default=2.0, type=float, help="duration to count log"
113+
)
114+
parser.add_argument("-c", "--log-count", default=5, type=int, help="log count threshold")
105115
parser.add_argument("-f", "--log-format", default="1", help="log format")
106116
args = parser.parse_args()
107117

0 commit comments

Comments
 (0)