You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.6 KiB
67 lines
1.6 KiB
#!/usr/bin/env python3 |
|
# |
|
# Copyright (c) 2021 Intel Corporation |
|
# |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
""" |
|
Abstract Class for Dictionary-based Logging Parsers |
|
""" |
|
|
|
import abc |
|
|
|
from colorama import Fore |
|
|
|
from .data_types import DataTypes |
|
|
|
LOG_LEVELS = [ |
|
('none', Fore.WHITE), |
|
('err', Fore.RED), |
|
('wrn', Fore.YELLOW), |
|
('inf', Fore.GREEN), |
|
('dbg', Fore.BLUE) |
|
] |
|
|
|
def get_log_level_str_color(lvl): |
|
"""Convert numeric log level to string""" |
|
if lvl < 0 or lvl >= len(LOG_LEVELS): |
|
return ("unk", Fore.WHITE) |
|
|
|
return LOG_LEVELS[lvl] |
|
|
|
|
|
def formalize_fmt_string(fmt_str): |
|
"""Replace unsupported formatter""" |
|
new_str = fmt_str |
|
|
|
for spec in ['d', 'i', 'o', 'u', 'x', 'X']: |
|
# Python doesn't support %ll for integer specifiers, so remove extra 'l' |
|
new_str = new_str.replace("%ll" + spec, "%l" + spec) |
|
|
|
if spec in ['x', 'X']: |
|
new_str = new_str.replace("%#ll" + spec, "%#l" + spec) |
|
|
|
# Python doesn't support %hh for integer specifiers, so remove extra 'h' |
|
new_str = new_str.replace("%hh" + spec, "%h" + spec) |
|
|
|
# No %p for pointer either, so use %x |
|
new_str = new_str.replace("%p", "0x%x") |
|
|
|
# No %z support, use %d instead |
|
new_str = new_str.replace("%z", "%d") |
|
|
|
return new_str |
|
|
|
|
|
class LogParser(abc.ABC): |
|
"""Abstract class of log parser""" |
|
def __init__(self, database): |
|
self.database = database |
|
|
|
self.data_types = DataTypes(self.database) |
|
|
|
|
|
@abc.abstractmethod |
|
def parse_log_data(self, logdata, debug=False): |
|
"""Parse log data""" |
|
return None
|
|
|