From 6f3356ad25dca886a332b7d46d8fe5f47df857ed Mon Sep 17 00:00:00 2001 From: Timofey Mazurov Date: Sun, 14 Mar 2021 20:33:57 +0300 Subject: [PATCH 1/3] Removed logging settings --- access_controller/settings.py | 36 +---------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/access_controller/settings.py b/access_controller/settings.py index 96703b6..afa3c1a 100644 --- a/access_controller/settings.py +++ b/access_controller/settings.py @@ -143,41 +143,7 @@ AUTHENTICATION_BACKENDS = [ # Logging system # https://docs.djangoproject.com/en/3.1/topics/logging/ -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'verbose': { - 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', - 'style': '{', - }, - 'simple': { - 'format': '{levelname} {message}', - 'style': '{', - }, - }, - 'handlers': { - 'console': { - 'level': 'INFO', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, - 'mail_admins': { - 'level': 'ERROR', - 'class': 'django.utils.log.AdminEmailHandler', - } - }, - 'loggers': { - 'django': { - 'handlers': ['console'], - 'propagate': True, - }, - 'main.index': { - 'handlers': ['console'], - 'level': 'INFO', - } - } -} + ZENDESK_ROLES = { 'engineer': 360005209000, From e193ae0f559a560f47862b3a0f64ae60af6c87b5 Mon Sep 17 00:00:00 2001 From: Timofey Mazurov Date: Sun, 14 Mar 2021 20:34:46 +0300 Subject: [PATCH 2/3] Added default date to change_time field --- main/migrations/0009_auto_20210309_2317.py | 61 ++++++++++++++++++++++ main/models.py | 3 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 main/migrations/0009_auto_20210309_2317.py diff --git a/main/migrations/0009_auto_20210309_2317.py b/main/migrations/0009_auto_20210309_2317.py new file mode 100644 index 0000000..a59717a --- /dev/null +++ b/main/migrations/0009_auto_20210309_2317.py @@ -0,0 +1,61 @@ +# Generated by Django 3.1.6 on 2021-03-09 20:17 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0008_auto_20210303_2305'), + ] + + operations = [ + migrations.AlterField( + model_name='rolechangelogs', + name='change_time', + field=models.DateTimeField(help_text='Дата и время изменения роли'), + ), + migrations.AlterField( + model_name='rolechangelogs', + name='changed_by', + field=models.ForeignKey(help_text='Кем была изменена роль', on_delete=django.db.models.deletion.CASCADE, related_name='changed_by', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='rolechangelogs', + name='name', + field=models.TextField(help_text='Имя пользователя'), + ), + migrations.AlterField( + model_name='rolechangelogs', + name='new_role', + field=models.TextField(help_text='Присвоенная роль'), + ), + migrations.AlterField( + model_name='rolechangelogs', + name='user', + field=models.ForeignKey(help_text='Пользователь, которому присвоили другую роль', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='userprofile', + name='image', + field=models.URLField(blank=True, help_text='Аватарка', null=True), + ), + migrations.AlterField( + model_name='userprofile', + name='name', + field=models.CharField(default='None', help_text='Имя пользователя на нашем сайте', max_length=100), + ), + migrations.AlterField( + model_name='userprofile', + name='role', + field=models.CharField(default='None', help_text='Код роли пользователя', max_length=100), + ), + migrations.AlterField( + model_name='userprofile', + name='user', + field=models.OneToOneField(help_text='Пользователь', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/main/models.py b/main/models.py index f8f8385..0fbc988 100644 --- a/main/models.py +++ b/main/models.py @@ -2,6 +2,7 @@ from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver +from django.utils import timezone class UserProfile(models.Model): @@ -29,5 +30,5 @@ class RoleChangeLogs(models.Model): user = models.ForeignKey(to=User, on_delete=models.CASCADE, help_text='Пользователь, которому присвоили другую роль') name = models.TextField(help_text='Имя пользователя') new_role = models.TextField(help_text='Присвоенная роль') - change_time = models.DateTimeField(help_text='Дата и время изменения роли') + change_time = models.DateTimeField(help_text='Дата и время изменения роли', default=timezone.now) changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by', help_text='Кем была изменена роль') From b8883cc8575da0a8bc527e72b33eb226ec731b7d Mon Sep 17 00:00:00 2001 From: Timofey Mazurov Date: Sun, 14 Mar 2021 21:27:26 +0300 Subject: [PATCH 3/3] Added logging to database --- main/extra_func.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/main/extra_func.py b/main/extra_func.py index 691bd37..5fe7edf 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -1,13 +1,18 @@ +import logging import os +from django.utils import timezone from zenpy import Zenpy from zenpy.lib.exception import APIException -from main.models import UserProfile +from main.models import UserProfile, RoleChangeLogs from access_controller.settings import ZENDESK_ROLES as ROLES +# from access_controller.main.models import RoleChangeLogs + + class ZendeskAdmin: """ Класс **ZendeskAdmin** существует, чтобы в каждой фунциии отдельно не проверять аккаунт администратора @@ -28,7 +33,7 @@ class ZendeskAdmin: email: str = os.getenv('ACCESS_CONTROLLER_API_EMAIL') token: str = os.getenv('ACCESS_CONTROLLER_API_TOKEN') password: str = os.getenv('ACCESS_CONTROLLER_API_PASSWORD') - _instance=None + _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: @@ -191,3 +196,27 @@ def check_user_auth(email: str, password: str) -> bool: except APIException: return False return True + + +class DatabaseHandler(logging.Handler): + def __init__(self): + logging.Handler.__init__(self) + self.database = RoleChangeLogs() + + def emit(self, record): + # admin = ZendeskAdmin() + user = record.msg + # data = UserProfile.objects.filter(user=user.user) + self.database.name = user.name + self.database.new_role = user.role + self.database.user = user.user + self.database.changed_by = user.user + self.database.save() + + +def log(user): + dbhandler = DatabaseHandler() + logging.getLogger('MY_LOGGER').addHandler(dbhandler) + logger = logging.getLogger('MY_LOGGER') + logger.setLevel('INFO') + logger.info(user)