Display test result separately

Add option to mark them as reviewed to sort them by priority

PRODX-35953

Change-Id: If45d137b234db0fa42d5fb4316497989c5cd12bf
diff --git a/testrail_bot/control/utils.py b/testrail_bot/control/utils.py
index 6c41f58..73ea55f 100644
--- a/testrail_bot/control/utils.py
+++ b/testrail_bot/control/utils.py
@@ -1,6 +1,8 @@
+import logging
 from typing import Any, Callable, Dict, List
 
 from django.core.cache import cache
+from django.db.models import Model
 from parse import parse
 
 
@@ -109,5 +111,35 @@
     return decorator
 
 
+class DBHandler(logging.Handler):
+
+    def __init__(self, storage: Model) -> None:
+        logging.Handler.__init__(self)
+        self.storage = storage
+
+    def emit(self, record: logging.LogRecord) -> None:
+        msg = self.format(record)
+        color = "black"
+        if record.levelno == logging.ERROR:
+            color = "red"
+        if record.levelno == logging.DEBUG:
+            color = "grey"
+        self.storage.text += f"<a style='color:{color}'>{msg} </a>\n"
+        self.storage.save()
+        print(self.storage.text)
+
+
+def DBlogger(name: str, storage: Model) -> logging.Logger:
+    _log = logging.getLogger(name)
+    _log.setLevel(logging.DEBUG)
+    formatter = logging.Formatter(
+        "[%(asctime)s] %(message)s", "%d %b %H:%M:%S"
+    )
+    db_h = DBHandler(storage)
+    db_h.setFormatter(formatter)
+    _log.addHandler(db_h)
+    return _log
+
+
 if __name__ == "__main__":
     pass