Alenorze
@Alenorze
Python love

API для регистрации логов активности оператора?

URL: /client/<client_id>/log/operator
Method: POST
Data:
{
    "access_token": "TOKEN",
    "limit": 100,
    "sort": "asc",
    "start_date": "2018-01-01T00:00:00Z"
}
OR
{
    "access_token": "TOKEN",
    "limit": 100,
    "sort": "asc",
    "offset": "500"
}

Success Response:
{
    "result": "ok",
    "logs": [
        {
            "date": "2018-01-01T00:00:00Z",
            "text": "Log entry"
        },
        ...
    ]
}

Log entry в формате: "message. User: имя фамилия оператора."

Мне нужно создать запрос на получение логов активности оператора. Который возвращает форматированный лог всех действий пользователя.

У меня есть приложение activity в котором есть модель OperatorLog.
from django.db import models

from users.models import User
from .constants import ACTIVITY_ACTIONS


class OperatorLogManager(models.Manager):
    """Manager for operator logs"""

    def active(self):
        """Mark object as active"""
        return self.filter(is_delete=False)
    
    def get_by_user_id(self, id):
        return self.active().filter(pk=id)

    def get_by_client_id(self, client_uid):
        return self.active().filter(client_uid=client_uid)


class OperatorLog(models.Model):
    """Model for logs"""

    user        = models.ForeignKey(User, on_delete=models.CASCADE)
    created     = models.DateTimeField(auto_now_add=True)
    is_deleted  = models.BooleanField(default=False)
    action_type = models.CharField(max_length=32,
         сhoices=ACTIVITY_ACTIONS)
    message     = models.TextField(max_length=2048)
    client_uid  = models.CharField(max_length=50)
    bitrix_id   = models.PositiveIntegerField()

    # Operator Manager
    objects = OperatorLogManager()

    def delete(self, **kwargs):
        self.is_deleted = True
        self.save()


Нужно публичное api (activity/api.py) для регистрации событий в других приложениях,
также есть файл со списком типов активности (constants.py), он должен быть доступен в других приложениях через импорт api.py, выводить логи нужно с помощью serializer (DRF).

Вот настройки лог
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(asctime)s %(levelname)s %(message)s',
            'datefmt': '%b %d %H:%M:%S',
        },
    },
    'handlers': {
        # Mute
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        # Sends all messages to console
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'actions': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': root('logs/actions.log'),
            'formatter': 'verbose',
        },
        'errors': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': root('logs/errors.log'),
            'formatter': 'verbose',
        },
        'debug_file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': root('logs/debug.log'),
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['errors'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'actions': {
            'handlers': ['actions', 'console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'db': {
            'handlers': ['errors', 'console'],
            'level': 'WARNING',
            'propagate': False,
        },
        'apps': {
            'handlers': ['debug_file', 'errors'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}


constants.py(Примерная версия)
from model_utils import Choices


ACTIVITY_ACTIONS = Choices(
    ('ACTION_REQ_PHONE_VERIFY', 'Request phone verification'),
    ('VALIDATE_PHONE', 'Request phone validation'),
    ('VALIDATE_EMAIL', 'Email validation'),
    ('SET_INTERNAL_VERIFY', 'Set result of Internal verification'),
    ('SET_BANK_VERIFY', 'Set result of Bank verification'),
    ('GET_CLIENT_DATA', 'Request client data'),
    ('GET_SENSITIVE_INFO', 'Request sensitive info'),
)


Нужно что-то вроде logs.api.register(user, message, flags) Чтоб можно было расставить в ключевых местах. А метод сам уже сохранял как надо и куда надо.
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
сделаю за час в течение недели
а в чем вопрос? что не получается?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы