3.2 Secuencia: Auditoría Híbrida
Este diagrama modela la orquestación no bloqueante del registro de actividad forense entre el middleware interceptor, la memoria de colas en Redis, los demonios de Horizon y el motor de persistencia en MongoDB.
1. Explicación y Semántica del Diagrama
El objetivo es demostrar visualmente cómo Mañuti logra registrar eventos de auditoría complejos sin introducir latencia en la experiencia del operador:
- Interceptación: El cliente envía una petición HTTP que atraviesa
AuditMiddleware. - Continuación Inmediata: El middleware invoca
$next($request)para permitir que los controladores procesen la lógica de negocio y retornen la respuesta HTTP inmediatamente al cliente. - Fase Post-Respuesta (Terminable):
- El middleware captura el código de estado retornado (
200 OK,302,500). - Inspecciona las directivas
@canasociadas a la ruta y consulta en caché si la capacidad es auditable. - Sanitiza el payload eliminando contraseñas, tokens CSRF y serializando metadatos de archivos.
- El middleware captura el código de estado retornado (
- Despacho Asíncrono: Despacha la tarea
ProcessAuditLoga Redis en microsegundos y libera el hilo. - Persistencia en Segundo Plano: Un worker en el clúster de Horizon extrae el job de Redis e inserta el documento BSON en la colección
auditoriade MongoDB.
2. Cómo se Lee este Diagrama
- Las llamadas hacia
Appy el retorno haciaClientsuceden antes de que los datos toquen MongoDB. - El bloque
par(Proceso Asíncrono) representa una línea de ejecución paralela e independiente de la conexión del navegador del usuario.
3. Implementación en el Framework Mañuti
- Middleware:
App\Http\Middleware\AuditMiddleware. - Job:
App\Jobs\ProcessAuditLog. - Persistencia:
App\Models\AuditLogcon conexiónmongodb.
4. Diagrama Mermaid
sequenceDiagram
autonumber
actor Client as Cliente HTTP
participant Mid as AuditMiddleware
participant App as Laravel App
box rgba(0, 0, 0, 1) Infraestructura Asíncrona
participant Redis as Redis (Queue)
participant Worker as Horizon Worker
participant Mongo as MongoDB
end
Client->>Mid: HTTP Request (POST /usuarios)
activate Mid
Mid->>App: next(request)
activate App
App-->>Mid: Response (200 OK)
deactivate App
opt Lógica de Auditoría (Post-Request)
Mid->>Mid: Detectar Permiso (@can)
Mid->>Mid: Verificar si es Auditable (Cache/DB)
alt Es Auditable
Mid->>Mid: Preparar Payload (Sanitizar Passwords)
Mid->>Redis: Dispatch ProcessAuditLog (JSON)
Note right of Mid: Operación rápida (ms)
end
end
Mid-->>Client: HTTP Response
deactivate Mid
opt Procesamiento en Background
Worker->>Redis: Pop Job
activate Worker
Worker->>Mongo: Insert Documento JSON
deactivate Worker
end