summaryrefslogtreecommitdiff
path: root/day4/task3/db.py
diff options
context:
space:
mode:
Diffstat (limited to 'day4/task3/db.py')
-rw-r--r--day4/task3/db.py68
1 files changed, 47 insertions, 21 deletions
diff --git a/day4/task3/db.py b/day4/task3/db.py
index f4cbd0b..c23e9fb 100644
--- a/day4/task3/db.py
+++ b/day4/task3/db.py
@@ -2,30 +2,9 @@ import re
import bisect
from datetime import datetime
-f = open('otrs_error.log')
-
-matcher = re.compile(r'\[(?P<date>.*?)\]\[(?P<type>.*?)\]\[(?P<module>.*?)\]\[(?P<id>.*?)\] (?P<text>.*)')
db = []
-lines = f.readlines()
-f.close()
-for line in lines:
- line = line.strip()
- match = re.match(matcher, line)
-
- if match:
- date = datetime.strptime(match.group('date'), '%c')
- module = match.group('module')
-
- db.append((date.hour, date.minute, date.second, module, line))
-
- else:
- print(f'Ошибка при разборе строки:\n{line}')
-
-
-db.sort()
-
def search_by_date(hour, minute=None, second=None, data=None):
low = [hour]
@@ -45,3 +24,50 @@ def search_by_date(hour, minute=None, second=None, data=None):
left = bisect.bisect_left(db, tuple(low))
right = bisect.bisect_left(db, tuple(high))
return [t[4] for t in db[left:right] if data in t[3]]
+
+
+def open_log(path):
+ try:
+ f = open(path)
+
+ except FileNotFoundError:
+ print('Файл с логом не обнаружен')
+ return
+
+ except PermissionError:
+ print('Файл с логом не доступен для чтения')
+ return
+
+ return f
+
+
+# Возвращает значение успешности инициализации базы данных
+def init(path) -> bool:
+ f = open_log(path)
+ if f is None:
+ return False
+
+ matcher = re.compile(r'\[(?P<date>.*?)\]\[(?P<type>.*?)\]\[(?P<module>.*?)\]\[(?P<id>.*?)\] (?P<text>.*)')
+
+ lines = f.readlines()
+ f.close()
+ for line in lines:
+ line = line.strip()
+ match = re.match(matcher, line)
+
+ if match:
+ try:
+ date = datetime.strptime(match.group('date'), '%c')
+ except ValueError:
+ print(f'Ошибка при разборе строки (Неверный формат даты):\n{line}')
+ continue
+
+ module = match.group('module')
+
+ db.append((date.hour, date.minute, date.second, module, line))
+
+ else:
+ print(f'Ошибка при разборе строки:\n{line}')
+
+ db.sort()
+ return True