diff --git a/example.log b/example.log index bf0fbaf..05e35ba 100644 --- a/example.log +++ b/example.log @@ -15,8 +15,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| 2019-08-07 00:02:10,598 [catalina-exec-16] INFO c.r.c.u.l.PerformancePointcut - Executed SecurityController.loginIndex in 0 ms successful. [jv3fw7r2.m1uf] 2019-08-07 00:02:16,467 [catalina-exec-36] INFO c.r.c.u.l.PerformancePointcut - Executed HealthCheckController.checkOperativeness in 1 ms successful. [jv3fw7r2.m1ug] 2019-08-07 00:02:23,519 [catalina-exec-53] ERROR c.r.c.u.l.PerformancePointcut - Executed AuthenticationProvider.authenticate in 224 ms successful. [jv3fw7r2.m1uh] -2019-08-07 00:02:24,195 [catalina-exec-43] INFO c.r.c.u.l.PerformancePointcut - Executed SecurityController.accessDenied in 0 ms successful. [jv3fw7r2.m1uj] -2019-08-07 00:02:24,937 [catalina-exec-74] INFO c.r.c.u.l.PerformancePointcut - Executed RedirectController.redirect in 1159 ms successful. [jv3fw7r2.m1ui] +2019-08-07 00:02:24,195 [catalina-exec-43] WARN c.r.c.u.l.PerformancePointcut - Executed SecurityController.accessDenied in 0 ms successful. [jv3fw7r2.m1uj] +2019-08-07 00:02:24,937 [catalina-exec-74] WARN c.r.c.u.l.PerformancePointcut - Executed RedirectController.redirect in 1159 ms successful. [jv3fw7r2.m1ui] 2019-08-07 00:02:25,674 [catalina-exec-29] INFO c.r.c.u.l.PerformancePointcut - Executed AssignmentsController.index in 683 ms successful. [jv3fw7r2.m1uk] 2019-08-07 00:02:26,825 [catalina-exec-20] INFO c.r.c.u.l.PerformancePointcut - Executed I18NController.getI18NKeyValues in 1 ms successful. [jv3fw7r2.m1ul] 2018-09-06T00:00:16.381Z,0,vapfacbk01,HealthCheckService.isOperable,AXC_5.14_526,,successful diff --git a/highlighting.py b/highlighting.py new file mode 100644 index 0000000..02ad35c --- /dev/null +++ b/highlighting.py @@ -0,0 +1,57 @@ +import logging +import re + +from PyQt6.QtGui import QBrush, QColor + +from highlight import Highlight +from highlight_regex import HighlightRegex +from settings import Settings + +log = logging.getLogger("highlighting") + + +class Highlighting: + + @staticmethod + def read_config(settings: Settings) -> [Highlight]: + result = [] + config = settings.config + + for section in config.sections(): + if not section.startswith("highlighting."): + continue + + query = config.get(section, "query", fallback="") + if len(query) == 0: + continue + ignore_case = config.getboolean(section, "ignore-case", fallback=True) + is_regex = config.getboolean(section, "is-regex", fallback=False) + line_background_color = Highlighting.brush(config.get(section, "line.background.color", fallback="None")) + hit_background_color = Highlighting.brush(config.get(section, "hit.background.color", fallback="None")) + try: + flags = re.IGNORECASE if ignore_case else 0 + if is_regex: + regex = re.compile(query, flags=flags) + else: + regex = re.compile(re.escape(query), flags=flags) + except: + log.exception("failed to parse query for highlighter: %s" % section) + continue + + highlight = HighlightRegex( + regex=regex, + brush=hit_background_color, + brush_full_line=line_background_color + ) + result.append(highlight) + + return result + + @staticmethod + def brush(color: str) -> QBrush: + if re.match("[0-9a-f]{6}", color, flags=re.IGNORECASE): + red = int(color[0:2], 16) + green = int(color[2:4], 16) + blue = int(color[4:6], 16) + return QBrush(QColor(red, green, blue)) + return QBrush() diff --git a/logFileModel.py b/logFileModel.py index 6ab6ab4..f69b424 100644 --- a/logFileModel.py +++ b/logFileModel.py @@ -7,6 +7,7 @@ from typing import List, Optional from PyQt6.QtGui import QBrush, QColor, QPen from highlight_regex import HighlightRegex +from highlighting import Highlighting from line import Line import os from settings import Settings @@ -20,14 +21,15 @@ class LogFileModel: self._file = os.path.realpath(file) self._lock = threading.RLock() - self.highlights = [ - HighlightRegex( - re.compile("ERROR"), - brush=QBrush(QColor(220, 112, 122)), - pen=QPen(QColor(0, 0, 0)), - brush_full_line=QBrush(QColor(255, 112, 122)) - ) - ] + self.highlights = Highlighting.read_config(settings) + # [ + # HighlightRegex( + # re.compile("ERROR"), + # brush=QBrush(QColor(220, 112, 122)), + # pen=QPen(QColor(0, 0, 0)), + # brush_full_line=QBrush(QColor(255, 112, 122)) + # ) + # ] def get_file(self): return self._file