diff options
| author | Андрей Гущин <saintruler@gmail.com> | 2019-05-16 10:39:35 +0300 |
|---|---|---|
| committer | Андрей Гущин <saintruler@gmail.com> | 2019-05-16 10:39:35 +0300 |
| commit | e7974e2383d3c61f2d77512f57d5231142d64205 (patch) | |
| tree | 97bf1f3952641c30191f0de601fbb380dcea80db /day3 | |
| parent | 97549e39691754cacc75b6ac16a97f87f660b4a5 (diff) | |
| parent | c20e7afef4c0d0bdc555578156c882d00b04f8db (diff) | |
Merge branch 'day3_task4' into 'master'
День 3, Задача 4
See merge request saintruler/trainee!16
Diffstat (limited to 'day3')
| -rw-r--r-- | day3/task4/task4.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/day3/task4/task4.py b/day3/task4/task4.py new file mode 100644 index 0000000..b02f1fa --- /dev/null +++ b/day3/task4/task4.py @@ -0,0 +1,56 @@ +import re +from datetime import datetime + +f = open('otrs_error.log') + +matcher = re.compile(r'\[(?P<date>.*?)\]\[(?P<type>.*?)\]\[(?P<module>.*?)\]\[(?P<id>.*?)\] (?P<text>.*)') + +match_date_low = datetime(2017, 8, 6, 10, 0) +match_date_high = datetime(2017, 8, 6, 19, 0) +count_module = 'Kernel::System::Ticket::TicketPermission' +counter = 0 + +errors_by_module = {} +errors_by_date = {} + +lines = f.readlines() +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') + + if match_date_low <= date <= match_date_high and module == count_module: + counter += 1 + + errors_by_module[module] = errors_by_module.get(module, 0) + 1 + + err_date = datetime(date.year, date.month, date.day) + errors_by_date[err_date] = errors_by_date.get(err_date, []) + [{ + 'date': date, + 'type': match.group('type'), + 'module': module, + 'id': match.group('id'), + 'text': match.group('text') + }] + + else: + print(f'Ошибка при разборе строки:\n{line}') + +print(f'За период с {match_date_low} по {match_date_high} в модуле "{count_module}" произошло {counter} ошибок') + +for module, count in sorted(errors_by_module.items(), key=lambda p: p[1], reverse=True): + print(f'В модуле {module} за все время произошло {count} ошибок') + +for date, errors in errors_by_date.items(): + # Дополняем дни и месяцы до ширины 2 с помощью нулей слева + with open(f'{str(date.day).rjust(2, "0")}.{str(date.month).rjust(2, "0")}.{date.year}.txt', 'w') as f: + for error in errors: + f.write(f"[{date.ctime()}][{error['type']}][{error['module']}][{error['id']}] {error['text']}\n") |