@@ -199,17 +199,148 @@ Este documento resume la documentación agregada a todo el proyecto del Bot de D
199199
200200---
201201
202+ ## 🔍 Monitoreo y Logging
203+
204+ ### 📄 ` src/utils/logger.ts `
205+ ** Sistema centralizado de logging**
206+ - ✅ Descripción completa del sistema de logging profesional
207+ - ✅ JSDoc para enum ` LogLevel ` (DEBUG/INFO/WARN/ERROR/CRITICAL)
208+ - ✅ JSDoc para interface ` LogContext ` (requestId, userId, guildId, commandName, duration)
209+ - ✅ JSDoc para interface ` LogEntry ` (timestamp, level, message, context)
210+ - ✅ JSDoc para interface ` ErrorWindow ` (total, errors)
211+ - ✅ JSDoc para interface ` ErrorMetrics ` (errorRate, totalRequests, totalErrors, topErrorCommands, topErrorTypes)
212+ - ✅ JSDoc para función ` getErrorRate() ` - Calcula porcentaje de errores en ventana de 5 minutos
213+ - ✅ JSDoc para función ` getRequestCount() ` - Obtiene total de requests en ventana actual
214+ - ✅ JSDoc para función ` getErrorCount() ` - Obtiene total de errores en ventana actual
215+ - ✅ JSDoc para función ` checkErrorThreshold(threshold) ` - Verifica si supera threshold (requiere min 10 requests)
216+ - ✅ JSDoc para función ` getErrorsByCommand() ` - Map de comando -> cantidad de errores
217+ - ✅ JSDoc para función ` getErrorsByType() ` - Map de tipo de error -> cantidad
218+ - ✅ JSDoc para función ` getErrorMetrics() ` - Métricas completas agregadas
219+ - ✅ JSDoc para función ` resetMetrics() ` - Limpia todas las métricas
220+ - ✅ JSDoc para función ` maskSensitive(text) ` - Enmascara emails y tokens automáticamente
221+ - ✅ JSDoc para función ` generateRequestId() ` - Genera UUID v4 único
222+ - ✅ JSDoc para clase ` Logger ` con métodos debug/info/warn/error/critical
223+ - ✅ Documentación del sistema de ventanas deslizantes (5 min)
224+ - ✅ Documentación de limpieza automática (>15 min)
225+ - ✅ Ejemplo: ` logger.info('User verified', {requestId, userId, email: maskEmail(email)}) `
226+
227+ ### 📄 ` src/utils/rateLimit.ts `
228+ ** Sistema de rate limiting**
229+ - ✅ Descripción del sistema en memoria
230+ - ✅ JSDoc para interface ` RateLimitResult ` (allowed, remainingMs)
231+ - ✅ JSDoc para interface ` RateLimitInfo ` (lastUsed, isActive)
232+ - ✅ JSDoc para función ` checkRateLimit(key, ttlMs) ` - Valida cooldowns y retorna estado
233+ - ✅ JSDoc para función ` getRateLimitInfo(key) ` - Obtiene info de rate limit
234+ - ✅ JSDoc para función ` clearRateLimit(key) ` - Limpia rate limit específico (testing/admin)
235+ - ✅ JSDoc para función ` getRateLimitSize() ` - Número de entradas activas
236+ - ✅ Documentación de limpieza automática cada 5 minutos
237+ - ✅ Documentación de formato de keys: ` action:guildId:userId `
238+ - ✅ Ejemplo: ` checkRateLimit("verify:123456789:987654321", 30000) `
239+
240+ ### 📄 ` src/utils/retry.ts `
241+ ** Sistema de retry inteligente**
242+ - ✅ Descripción del sistema con exponential backoff
243+ - ✅ JSDoc para interface ` RetryOptions ` (maxAttempts, delays, shouldRetry, onRetry)
244+ - ✅ JSDoc para función ` retryWithBackoff(fn, options) ` - Ejecuta con reintentos y backoff
245+ - ✅ JSDoc para función ` isTemporaryError(error) ` - Detecta errores retriables (network, timeout, 5xx)
246+ - ✅ JSDoc para función ` isPermanentError(error) ` - Detecta errores permanentes (auth, 4xx)
247+ - ✅ Documentación de errores temporales: AbortError, NetworkError, TimeoutError, ECONNRESET, ETIMEDOUT, códigos HTTP 408/429/500-504
248+ - ✅ Documentación de errores permanentes: EAUTH, códigos HTTP 400/401/403/404/422, validación de email
249+ - ✅ Documentación de propagación de error original con contexto enriquecido
250+ - ✅ Ejemplo: ` retryWithBackoff(() => fetchData(), {maxAttempts: 3, delays: [2000, 4000, 8000], shouldRetry: isTemporaryError}) `
251+
252+ ### 📄 ` src/utils/alerts.ts `
253+ ** Sistema de alertas a Discord**
254+ - ✅ Descripción del sistema de notificaciones a admins
255+ - ✅ JSDoc para type ` AlertSeverity ` (info/warning/critical)
256+ - ✅ JSDoc para interface ` AlertOptions ` (title, description, severity, fields, timestamp)
257+ - ✅ JSDoc para función ` sendAdminAlert(client, guildId, options) ` - Envía alerta al canal configurado
258+ - ✅ Documentación de colores por severidad: azul (#5865F2) info, naranja (#F59E0B) warning, rojo (#EF4444) critical
259+ - ✅ Documentación de emojis por severidad: ℹ️ info, ⚠️ warning, 🚨 critical
260+ - ✅ Documentación de rate limiting interno (1 alerta del mismo tipo cada 10 minutos)
261+ - ✅ Documentación de fallback: canal alerts > announcements
262+ - ✅ Documentación de validación de permisos (ViewChannel, SendMessages, EmbedLinks)
263+ - ✅ JSDoc para función ` hashAlertKey(title) ` - Hash MD5 para rate limiting
264+ - ✅ JSDoc para función ` clearAlertHistory() ` - Limpia historial (testing)
265+ - ✅ Ejemplo: ` sendAdminAlert(client, "123", {title: "High Error Rate", description: "25% errors", severity: "warning", fields: [...]}) `
266+
267+ ---
268+
269+ ## 📊 Comandos de Administración
270+
271+ ### 📄 ` src/commands/metrics.ts `
272+ ** Visualización de métricas en tiempo real**
273+ - ✅ Descripción del comando de estadísticas
274+ - ✅ JSDoc para función ` formatDuration(ms) ` - Convierte ms a formato legible (días/horas/minutos)
275+ - ✅ JSDoc para función ` execute(interaction) ` - Muestra métricas del bot
276+ - ✅ Documentación de permisos requeridos: Administrator o rol admin/junta
277+ - ✅ Documentación de métricas mostradas:
278+ - Error rate con emoji según severidad (🔴 >20%, 🟡 >10%, 🟢 <10%)
279+ - Total requests/errors en ventana de 5 minutos
280+ - Uptime del bot formateado
281+ - Rate limits activos
282+ - Ping del websocket
283+ - Top comandos con errores
284+ - Top tipos de errores
285+ - ✅ Documentación de respuesta efímera (solo visible para quien ejecuta)
286+ - ✅ Ejemplo de uso: ` /metrics ` muestra embed con todas las estadísticas
287+
288+ ---
289+
202290## ⚙️ Configuración
203291
292+ ### 📄 ` src/commands/setup.ts `
293+ ** Configuración del servidor**
294+ - ✅ Documentación ampliada con nuevas opciones
295+ - ✅ Nueva opción ` channel_alerts ` (opcional) - Canal para alertas del sistema
296+ - ✅ Nueva opción ` alert_threshold ` (opcional, 10-50, default: 20) - % de errores para alertar
297+ - ✅ Documentación de validación de threshold (mínimo 10%, máximo 50%)
298+ - ✅ Actualización de embed de confirmación mostrando canal de alertas y threshold
299+ - ✅ Ejemplo: ` /setup ... channel_alerts:#alertas alert_threshold:25 `
300+
301+ ### 📄 ` src/commands/verify.ts `
302+ ** Sistema de verificación por email**
303+ - ✅ Documentación actualizada con mejoras de producción
304+ - ✅ Rate limiting: 30s cooldown entre intentos de ` /verify start `
305+ - ✅ Retry logic del mailer: 3 intentos con delays de 2s, 4s, 8s
306+ - ✅ Request IDs únicos para rastrear flujo completo de verificación
307+ - ✅ Logging estructurado en cada paso (start, email send, code verify, role assign)
308+ - ✅ OTP persistente en caso de error de email (permite reintentos)
309+ - ✅ Defer automático vía handler global (elimina race conditions)
310+ - ✅ Validación de estado de interacción antes de cada respuesta
311+ - ✅ Propagación de requestId a mailer y store para logging correlacionado
312+ - ✅ Ejemplo de flujo: User → /verify start → Rate limit check → Generate OTP → Send email (retry 3x) → Log success
313+
204314### 📄 ` src/config/store.ts `
205315** Sistema de almacenamiento**
206316- ✅ Descripción completa del sistema
207317- ✅ JSDoc para interface ` GuildConfig `
318+ - ✅ Nuevo campo ` channels.alerts ` - ID del canal de alertas administrativas
319+ - ✅ Nuevo campo ` alertThreshold ` - Porcentaje de error rate (0-100) para alertas automáticas
208320- ✅ JSDoc para interface ` ConfigFile `
209321- ✅ Documentación de variables de AWS S3
210322- ✅ JSDoc para función ` streamToString() `
211- - ✅ JSDoc para función ` loadFromBucket() `
212- - ✅ JSDoc para función ` saveToBucket() `
323+ - ✅ JSDoc actualizado para función ` loadFromBucket() ` - Incluye logging con métricas de latencia
324+ - ✅ JSDoc actualizado para función ` saveToBucket() ` - Incluye logging con métricas de latencia
213325- ✅ JSDoc para función ` getGuildConfig() `
214- - ✅ JSDoc para función ` upsertGuildConfig() `
326+ - ✅ JSDoc actualizado para función ` upsertGuildConfig(config, requestId?) ` - Acepta requestId opcional
215327- ✅ Explicación del sistema de caché
328+ - ✅ Logging de operaciones S3 con códigos HTTP y duración
329+
330+ ---
331+
332+ ## 🎯 Eventos
333+
334+ ### 📄 ` src/events/interactionCreate.ts `
335+ ** Handler principal de interacciones**
336+ - ✅ Documentación actualizada con sistema de monitoreo
337+ - ✅ Generación de requestId único para cada interacción
338+ - ✅ Inyección de requestId en objeto interaction
339+ - ✅ Logging estructurado con contexto completo (type, commandName, userId, guildId, requestId)
340+ - ✅ Contador de interacciones para verificar error threshold cada 10 interacciones
341+ - ✅ Sistema de alertas automáticas cuando error rate supera threshold configurado
342+ - ✅ Envío de alerta con métricas detalladas: error rate, requests, errors, top commands, window
343+ - ✅ Defer automático para comandos con flag ` defer: true `
344+ - ✅ Logging de éxito/error de ejecución de comandos
345+ - ✅ Manejo robusto de errores con logging estructurado
346+ - ✅ Nivel CRITICAL para errores en el handler principal
0 commit comments