Mudanza de repo
This commit is contained in:
98
api/logger/utils.py
Normal file
98
api/logger/utils.py
Normal file
@@ -0,0 +1,98 @@
|
||||
from django.contrib.auth.models import User
|
||||
from .models import UserActivity, ErrorLog
|
||||
import logging
|
||||
|
||||
def get_client_ip(request):
|
||||
"""Obtiene la IP real del cliente"""
|
||||
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
||||
if x_forwarded_for:
|
||||
ip = x_forwarded_for.split(',')[0]
|
||||
else:
|
||||
ip = request.META.get('REMOTE_ADDR')
|
||||
return ip
|
||||
|
||||
def log_user_activity(user, action, object_type='', object_id='', description='', request=None):
|
||||
"""
|
||||
Registra actividad del usuario
|
||||
|
||||
Args:
|
||||
user: Usuario que realiza la acción
|
||||
action: Tipo de acción (login, logout, create, update, delete, view, search, export, import)
|
||||
object_type: Tipo de objeto afectado (opcional)
|
||||
object_id: ID del objeto afectado (opcional)
|
||||
description: Descripción adicional (opcional)
|
||||
request: Request object para obtener IP (opcional)
|
||||
"""
|
||||
ip_address = '127.0.0.1'
|
||||
if request:
|
||||
ip_address = get_client_ip(request)
|
||||
|
||||
try:
|
||||
UserActivity.objects.create(
|
||||
user=user,
|
||||
action=action,
|
||||
object_type=object_type,
|
||||
object_id=str(object_id) if object_id else '',
|
||||
description=description,
|
||||
ip_address=ip_address
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Error logging user activity: {e}")
|
||||
|
||||
def log_error(level, message, traceback='', user=None, request=None):
|
||||
"""
|
||||
Registra errores personalizados
|
||||
|
||||
Args:
|
||||
level: Nivel del error (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
||||
message: Mensaje del error
|
||||
traceback: Traceback del error (opcional)
|
||||
user: Usuario relacionado (opcional)
|
||||
request: Request object (opcional)
|
||||
"""
|
||||
ip_address = None
|
||||
request_path = ''
|
||||
|
||||
if request:
|
||||
ip_address = get_client_ip(request)
|
||||
request_path = request.path
|
||||
|
||||
try:
|
||||
ErrorLog.objects.create(
|
||||
level=level,
|
||||
message=message,
|
||||
traceback=traceback,
|
||||
user=user,
|
||||
ip_address=ip_address,
|
||||
request_path=request_path
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Error logging custom error: {e}")
|
||||
|
||||
# Decorador para loggear automáticamente acciones
|
||||
def log_action(action, object_type=''):
|
||||
"""
|
||||
Decorador para loggear automáticamente acciones en vistas
|
||||
|
||||
Usage:
|
||||
@log_action('create', 'Pedimento')
|
||||
def create_pedimento(request):
|
||||
# tu código aquí
|
||||
"""
|
||||
def decorator(func):
|
||||
def wrapper(request, *args, **kwargs):
|
||||
result = func(request, *args, **kwargs)
|
||||
|
||||
if hasattr(request, 'user') and request.user.is_authenticated:
|
||||
object_id = kwargs.get('pk', kwargs.get('id', ''))
|
||||
log_user_activity(
|
||||
user=request.user,
|
||||
action=action,
|
||||
object_type=object_type,
|
||||
object_id=object_id,
|
||||
request=request
|
||||
)
|
||||
|
||||
return result
|
||||
return wrapper
|
||||
return decorator
|
||||
Reference in New Issue
Block a user