se registra cambios de usuarios y consultas dispositivos en base mongodb

francisco/logger
Francisco Sandoval 2024-02-25 00:08:59 -03:00
parent 0032c1af1e
commit 3ff0eb4898
13 changed files with 133 additions and 23 deletions

View File

@ -10,6 +10,12 @@ DBPASS=password
DB_REDIS_HOST=dbproto
DB_REDIS_PORT=6379
# Conexion con base datos mongo
DB_MONGO_HOST=dbmongo
DB_MONGO_PORT=27017
DB_MONGO_USER=root
DB_MONGO_PASS=password
# Datos de emisor de correos
SMTP_HOST=smtp-mail.outlook.com
SMTP_PORT=587

View File

@ -9,7 +9,7 @@ POST {{server}}/auth/
Content-Type: application/json
{
"username": "usuario1",
"rut": "11111111-1",
"password": "usuario1"
}

View File

@ -5,12 +5,15 @@ from django.db.models import F
from django.db import connection
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.decorators import action
from .. import models, serializers
from api import models, serializers
from os import getenv
import redis
import json
import logging
# funcion para registrar en mongo
from logger.views import save_log_dispositivo
class DispositivoViewSet(viewsets.ModelViewSet):
queryset = models.Dispositivo.objects.all()
serializer_class = serializers.DispositivoSerializer
@ -29,6 +32,8 @@ class DispositivoViewSet(viewsets.ModelViewSet):
.first()
if (record):
save_log_dispositivo(id_dispositivo=whoami['idDispositivo'], accion_url='whoami')
return JsonResponse({
"WhoamiResponse": {
"NroParadero": record.nro_paradero,
@ -51,7 +56,6 @@ class DispositivoViewSet(viewsets.ModelViewSet):
input = json.loads(request.body)
getInfoDevice = input['GetInfoDevice']
record = models.Paradero.objects \
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
@ -106,10 +110,13 @@ class DispositivoViewSet(viewsets.ModelViewSet):
for pk_linea in lineas_agrupadas:
detalle_lineas.append(lineas_agrupadas[pk_linea])
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
return JsonResponse({
"GetInfoDeviceResponse": {
"DetalleLineas": detalle_lineas,
"MensajeParadero": "No considerar, uso futuro"
"MensajeParadero": "No considerar, uso futuro",
"NroParadero": record.nro_paradero,
"NombreParadero": record.nombre_paradero
}
})

View File

@ -18,6 +18,7 @@ class PersonaViewSet(viewsets.ModelViewSet):
def create(self, request):
try:
if 'photo' in request.data:
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
fs.save(request.data['photo'], request.data['photo'])
@ -27,8 +28,10 @@ class PersonaViewSet(viewsets.ModelViewSet):
return HttpResponse(e.detail['rut'][0], status=400)
return HttpResponse(e, status=400)
def partial_update(self, request, pk=None):
try:
if 'photo' in request.data:
# indicar el nombre con que se guardara el archivo
archivo = request.data['photo']
extension = Path(archivo.name).suffix

View File

@ -6,9 +6,10 @@ from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action
from .. import models, schemas, serializers
from api import models, schemas, serializers
from logger.views import save_log_usuario
import json
import datetime
import logging
class UsuarioViewSet(viewsets.ModelViewSet):
@ -22,13 +23,18 @@ class UsuarioViewSet(viewsets.ModelViewSet):
def create(self, request):
try:
login = self.request.jwt_info['login']
usuario_session = models.Usuario.objects.filter(login=login)
with transaction.atomic():
input = json.loads(request.body)
persona = models.Persona.objects.filter(rut = input['rut']).first()
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)
if not id_tipo_tratamiento:
id_tipo_tratamiento = None
tipo_tratamiento = None
if id_tipo_tratamiento:
tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first()
if not persona:
persona = models.Persona(
@ -38,7 +44,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
apellido_a = input.get('apellido_a',None),
apellido_b = input.get('apellido_b',None),
email = input.get('email',None),
id_tipo_tratamiento = id_tipo_tratamiento
id_tipo_tratamiento = tipo_tratamiento
)
persona.save()
else:
@ -46,7 +52,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
persona.apellido_a = input.get('apellido_a',None)
persona.apellido_b = input.get('apellido_b',None)
persona.email = input.get('email',None)
persona.id_tipo_tratamiento = id_tipo_tratamiento
persona.id_tipo_tratamiento = tipo_tratamiento
persona.save()
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
@ -61,6 +67,8 @@ class UsuarioViewSet(viewsets.ModelViewSet):
)
usuario.save()
save_log_usuario(accion_tabla='create', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
if input['clave']:
logging.error('Modificar clave de usuario')
usuario.clave = make_password(input['clave'])
@ -86,10 +94,14 @@ class UsuarioViewSet(viewsets.ModelViewSet):
print(e)
return HttpResponse(str(e), status = 500)
def update(self, request, *args, **kwargs):
def partial_update(self, request, *args, **kwargs):
input = json.loads(request.body)
try:
pk = input['rut']
login = self.request.jwt_info['login']
usuario_session = models.Usuario.objects.filter(login=login).first()
with transaction.atomic():
# validaciones se realiza a nivel del model
@ -107,6 +119,8 @@ class UsuarioViewSet(viewsets.ModelViewSet):
usuario.clave = make_password(input['clave'])
usuario.save()
save_log_usuario(accion_tabla='update', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
return Response({
'rut': persona.rut,
'dv': persona.dv,
@ -127,6 +141,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
logging.error(e)
return HttpResponse(str(e), status = 500)
@action(detail=False, methods=['post'])
def permisos(self, request):
input = {}

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class LoggerConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'logger'

View File

@ -0,0 +1,17 @@
# from django.db import models
# Create your models here.
# ref: https://docs.mongoengine.org/tutorial.html
from mongoengine import Document, StringField, DateTimeField
class LogConsultaDispositivo(Document):
id_dispositivo = StringField(required=True)
accion_url = StringField(required=True)
fecha_hora = DateTimeField(required=True)
class LogTablaUsuario(Document):
accion_tabla = StringField(required=True)
rut_usuario_tabla = StringField(required=True)
rut_usuario_ejecutor = StringField(required=True)
fecha_hora = DateTimeField(required=True)

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,48 @@
# from django.shortcuts import render
from mongoengine import connect
from decouple import config
from logger.models import LogConsultaDispositivo, LogTablaUsuario
import datetime
dbname = config('DB_MONGO_NAME', 'nombre_basedatos')
dbhost = config('DB_MONGO_HOST', 'localhost')
dbport = int(config('DB_MONGO_PORT', '27017'))
dbuser = config('DB_MONGO_USER', 'usuario')
dbpass = config('DB_MONGO_PASS', 'contrasena')
connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
# Create your views here.
def save_log_dispositivo(id_dispositivo, accion_url):
try:
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
nuevo_registro = LogConsultaDispositivo(
id_dispositivo = id_dispositivo,
accion_url = accion_url,
fecha_hora = datetime.datetime.now()
)
nuevo_registro.save()
return True
except Exception as err:
print(err, flush=True)
return False
def save_log_usuario(accion_tabla, rut_tabla, rut_usuario_ejecutor):
try:
print(rut_tabla, flush=True)
print(rut_usuario_ejecutor, flush=True)
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
nuevo_registro = LogTablaUsuario(
accion_tabla = accion_tabla,
rut_usuario_tabla = str(rut_tabla),
rut_usuario_ejecutor = str(rut_usuario_ejecutor),
fecha_hora = datetime.datetime.now()
)
nuevo_registro.save()
return True
except Exception as err:
print(err, flush=True)
return False

View File

@ -46,6 +46,7 @@ INSTALLED_APPS = [
'corsheaders',
'django_filters',
'api',
'logger',
]
MIDDLEWARE = [

View File

@ -8,6 +8,7 @@ python-dotenv
python-decouple
PyJWT
pymongo
mongoengine
Pillow
openpyxl
google