siip-available-ips/CHANGELOG.md
DANYDHSV 695f327ccd fix: corrige falsos positivos de IPs disponibles y actualiza versión a 1.7.1
- Se eliminó el parámetro `suspended=true` en las consultas a la API de UISP (/devices/ips) en `public.php` y `ApiHandlers.php`.
- Este parámetro causaba un error crítico donde la API excluía a los dispositivos activos de la red, devolviendo únicamente los dispositivos suspendidos. Como resultado, las IPs asignadas a clientes sanos (ej. segmento 54) se mostraban erróneamente como "disponibles".
- Se actualizó el manifest.json a la versión 1.7.1.
- Se actualizó el CHANGELOG.md y README.md reflejando la corrección del error y las fechas de lanzamiento.
2026-05-04 13:03:54 -06:00

22 KiB
Executable File

Changelog

Todos los cambios notables en este proyecto serán documentados en este archivo.

El formato está basado en Keep a Changelog, y este proyecto adhiere a Semantic Versioning.


[1.7.1] - 2026-05-04

🐛 Corregido

  • Falsos Positivos de IPs Disponibles: Se eliminó el parámetro suspended=true en las consultas a la API de UISP (/devices/ips). Esto solucionó un error crítico donde los clientes activos eran excluidos de los resultados, lo que causaba que sus IPs asignadas (ej. segmento 54) se mostraran erróneamente como "disponibles". Ahora se muestran correctamente como "en uso".

[1.7.0] - 2026-03-26

Añadido

  • Detección de IPs Flotantes: Nuevo sistema para identificar dispositivos con authorized: false (estado "Pending Adoption") que no eran detectados por /devices/ips.
    • Método obtenerIpsFlotantes() en IpSearchService.php
    • Campo floating en la respuesta JSON del backend
    • Badge naranja "IP Flotante" con estado ⚠️ IP Flotante - {nombre} ({modelo})
    • Las IPs flotantes cuentan como "en uso" en las estadísticas
  • Workers Paralelos: Sistema de pool de workers para validación concurrente de IPs.
    • runProgressiveValidation() ahora usa 7 workers simultáneos (configurable)
    • runProgressiveVerification() también usa 7 workers paralelos
    • Progreso en tiempo real: "Validando IP's... 45/100 procesadas, 8 disponibles"
    • Mejora de rendimiento de ~5-7x respecto a la versión secuencial
  • Inserción Ordenada: Función insertRowSorted() que inserta IPs en la tabla manteniendo el orden por último octeto, sin importar qué worker termina primero.

🐛 Corregido

  • Numeración Consecutiva: La columna # ahora muestra números consecutivos (1, 2, 3...) solo para filas visibles.
    • Función renumberVisibleRows() recalcula la numeración al ocultar/mostrar IPs administrativas
    • Corregido bug donde la numeración comenzaba en 49+ al ocultar filas admin

🔧 Mejorado

  • Rendimiento Frontend: Búsqueda ~7x más rápida gracias a workers paralelos
  • Mensajes de progreso: Actualizados para indicar modo paralelo y conteo de IPs procesadas

[1.6.2] - 2025-12-09

🐛 Bug Fixes

  • Límite Inteligente (Smart Limit): Ahora la opción de límite (5, 10 IPs) busca activamente hasta encontrar esa cantidad de IPs disponibles. Antiguamente solo verificaba las primeras de la lista y si estaban ocupadas por ping devolvía 0 resultados.

[1.6.1] - 2025-12-08

🚀 Mejoras de UX/UI

  • Reorganización de elementos del formulario: Checkboxes apilados verticalmente (Ping arriba, Ocultar Admin abajo) y dropdown de límite al final.
  • Mensajes de progreso persistentes: Los mensajes de estado ("Validando por ping...", "Consultando...") ahora permanecen visibles durante todo el proceso.
  • Badge de IP: Ahora muestra "No disponible" en rojo cuando una IP está en uso por ping o validación de sitios (antes mostraba "Cliente" en verde).
  • Estadísticas reales: Los contadores de "IPs Disponibles" y "IPs en Uso" ahora reflejan exactamente lo que se muestra en la tabla después de la validación progresiva.

🐛 Bug Fixes

  • Límite de IPs: Corregido bug donde la validación progresiva ignoraba el límite seleccionado (5, 10, 20) y validaba todas.
  • Indicadores de carga: Corregido problema donde el spinner y mensajes desaparecían prematuramente antes de terminar la validación progresiva.

[1.6.0] - 2025-12-06

Añadido

  • Sistema de Validación Multi-Capa de IPs: Implementación completa de 4 capas de validación para garantizar IPs 100% disponibles.
    • Capa 1 - Filtrado UISP: Filtra IPs de dispositivos registrados en UISP
    • Capa 2 - Filtrado CRM: Filtra IPs de servicios suspendidos/finalizados
    • Capa 3 - Validación por Búsqueda de Sitios: Detecta IPs de clientes activos usando /sites/search?type=subscriber
    • Capa 4 - Verificación por Ping: Detecta dispositivos de terceros (opcional)
  • IpValidator.php: Nueva clase para validación de IPs usando búsqueda de sitios en UISP.
  • Validación Progresiva en Frontend: Las IPs se validan una por una antes de mostrarse en la tabla.
  • Endpoint API action=validate: Nuevo endpoint para validar IPs individuales.
  • Parámetro type=subscriber: Búsqueda específica en sitios de clientes para evitar falsos positivos.

🔧 Mejorado

  • CrmService.php: Filtrado mejorado de servicios suspendidos y finalizados.
    • Mapeo de IPs a sitios bloqueados
    • Extracción de unmsClientSiteId de servicios
    • Logging detallado del proceso de filtrado
  • IpSearchService.php:
    • Integración con CrmService para filtrado de servicios
    • Parámetro suspended=true en API de UISP para incluir dispositivos suspendidos
    • Extracción de todas las IPs de ipAddressList además de IP principal
  • public.php:
    • Handler para action=validate con carga correcta de configuración
    • Integración de validación progresiva en frontend
  • Frontend JavaScript:
    • Función runProgressiveValidation() para validar IPs progresivamente
    • Función updateRowStatus() para actualizar estado de filas
    • Solo renderiza IPs que pasan todas las validaciones
    • Mejor feedback visual durante validación

🐛 Corregido

  • Bug de variable $config indefinida: Corregido cargando configuración dentro del handler de validación.
  • Falsos positivos en búsqueda de sitios: Solucionado agregando type=subscriber al endpoint.
  • IPs secundarias no detectadas: Ahora se extraen todas las IPs de ipAddressList.
  • Servicios suspendidos/finalizados mostrando IPs disponibles: Filtrado completo por estado de servicio CRM.

📝 Documentación

  • README.md: Sección completa sobre "Sistema de Validación Multi-Capa de IPs" con:
    • Descripción detallada de cada capa
    • Diagrama de flujo completo de validación
    • Casos de uso y ejemplos
  • Logs mejorados: Mensajes detallados en cada capa de validación para debugging.

🎯 Casos de Uso Resueltos

  • IPs de servicios finalizados ya no aparecen como disponibles
  • IPs de servicios suspendidos ya no aparecen como disponibles
  • IPs de clientes activos (no en /devices/ips) son detectadas y filtradas
  • IPs secundarias de dispositivos son detectadas correctamente
  • Dispositivos de terceros son detectados con ping opcional

[1.5.1] - 2025-12-01

Añadido

  • Funcionalidad de Edición en Editor Avanzado: Completado el CRUD con la capacidad de editar segmentos existentes.
    • Botón "✏️ Editar" en cada fila de la tabla de segmentos
    • Formulario se pre-llena con datos del segmento seleccionado
    • Modo visual de edición con título y botón dinámicos
    • Campo de número de segmento se deshabilita durante edición (no se puede cambiar el ID)

🔧 Mejorado

  • Función addSegmentToTable(): Ahora maneja tanto creación como actualización de segmentos.
  • Funciones Helper: Agregadas funciones auxiliares para gestión de rangos:
    • clearRangeContainers() - Limpia contenedores de rangos
    • addInitialRangeWithData() / addFinalRangeWithData() - Agregan rangos con datos pre-cargados
    • resetForm() - Resetea formulario al modo agregar
    • editSegment() - Carga datos del segmento en el formulario
  • UX del Editor: Scroll automático al inicio del formulario al editar.
  • Validación: Verificación de duplicados solo en modo creación, no en edición.

🎨 Interfaz

  • Botón de editar con estilo azul distintivo
  • Indicadores visuales claros de modo edición vs. agregar
  • Mensajes de éxito diferenciados ("agregado" vs. "actualizado")

[1.5.0] - 2025-11-27

Añadido

  • Configuración Avanzada de IPs Administrativas por Segmento: Sistema completo de gestión de rangos administrativos personalizados por segmento.
    • Editor visual protegido por contraseña
    • Configuración JSON por segmento
    • Múltiples rangos iniciales y finales por segmento
    • Interfaz amigable para gestionar rangos
  • Botón de Configuración Avanzada (⚙️): Acceso rápido al editor desde la interfaz principal.
  • Modal de Autenticación: Protección por contraseña para acceso al editor.
  • Fallback Inteligente: Segmentos no configurados en JSON usan automáticamente rangos globales.
  • Indicador Visual de Modo: Badge que muestra si está activo "Rangos Personalizados" o "Rangos Globales".
  • Logs de Depuración: Mensajes detallados en consola para diagnosticar clasificación de IPs.

🔧 Mejorado

  • AdminRangeHelper.php: Nueva clase helper para procesar configuración JSON por segmento.
  • IpSearchService.php: Lógica mejorada con soporte para rangos personalizados y fallback.
    • Configuración inyectada en constructor para consistencia
    • Rangos dinámicos en lugar de hardcodeados
    • Logs de depuración opcionales con debugMode
  • Validación de Cambios: Advertencia al salir del editor con cambios sin guardar.
  • Tabla de Resultados: Eliminada columna redundante "Tipo de IP" en escritorio, badge ahora aparece junto a la IP.
  • Inicialización de Datos: editorData se carga correctamente al inicio para asegurar que los rangos personalizados se apliquen inmediatamente.

🐛 Corregido

  • Error de Escape de Strings: Reemplazado addslashes() por json_encode() para variables PHP en JavaScript, evitando errores de sintaxis.
  • Guardado de Configuración: Implementada escritura directa a config.json debido a limitaciones del SDK de UCRM.
  • Clasificación de IPs en Frontend: Función getIpType() ahora respeta rangos personalizados por segmento, no solo globales.
  • Carga de Configuración Personalizada: Corregido bug crítico donde editorData se inicializaba vacío y nunca se cargaba hasta abrir el editor, causando que los rangos personalizados fueran ignorados.
  • Comparación de Segmentos: Mejorada robustez con conversión explícita a string y trim para evitar fallos por espacios o tipos de datos.

🎨 Interfaz

  • Editor visual completo con formularios dinámicos
  • Tabla de segmentos configurados
  • Agregar/eliminar rangos en tiempo real
  • Diseño responsive con soporte para temas claro/oscuro
  • Valor por defecto de 254 para rangos finales (optimización UX)

[1.4.0] - 2025-11-27

Añadido

  • Rangos de IPs Administrativas Configurables: Ahora puedes configurar qué rangos de IPs se consideran administrativas mediante 4 campos numéricos en la configuración del plugin (inicio/fin de rango inicial y final), en lugar de tener valores fijos (1-30 y 254).

🔧 Mejorado

  • Flexibilidad: Permite adaptar la clasificación de IPs según las necesidades específicas de cada red.
  • Backend y Frontend: Toda la lógica de clasificación ahora usa configuración dinámica.

[1.3.3] - 2025-11-27

Añadido

  • Modo Claro/Oscuro: Botón toggle (☀️/🌙) en esquina superior derecha para cambiar entre temas con persistencia en localStorage.
  • Tema Claro: Paleta de colores profesional para uso diurno con fondo claro y textos oscuros.

🔄 Mejorado

  • Tabla Móvil: Optimizada para pantallas pequeñas ocultando columna "Tipo de IP" y mostrando el badge bajo la dirección IP (3 columnas en lugar de 5).
  • Límite por Defecto: Cambiado a 5 IPs para búsquedas más rápidas.
  • Tipografía: Direcciones IP más destacadas con fuente más grande y negrita.

[1.3.2] - 2025-11-26

Añadido

  • Botón de Cancelar Verificación: Nuevo botón dinámico que aparece durante la verificación por ping, permitiendo detener el proceso en cualquier momento mientras se conservan los resultados ya obtenidos.

🔄 Mejorado

  • Responsividad Móvil: Optimizada la alineación de checkboxes en dispositivos móviles para una mejor experiencia visual.

[1.3.1] - 2025-11-26

🔄 Refinado

  • Renderizado Secuencial: Las IPs de cliente aparecen una por una en la tabla conforme se inician sus verificaciones, creando un efecto visual más limpio y ordenado.
  • Limpieza de Resultados: Si se selecciona un límite (ej. 5 IPs), la tabla solo muestra esas 5 IPs de cliente (más las administrativas), ocultando el resto del segmento.
  • Textos UI: Actualizados para mayor claridad ("Válida para cliente", "Sólo validada con UISP").

[1.3.0] - 2025-11-26

Añadido

  • Carga Progresiva: Los resultados de la búsqueda aparecen inmediatamente y la verificación por ping se realiza en segundo plano, actualizando el estado en tiempo real.
  • Feedback Visual Mejorado: Nuevos iconos de estado ( Verificando, Disponible, ⚠️ En uso) en la tabla de resultados.
  • Filtro de IPs Administrativas: Nuevo checkbox para ocultar/mostrar IPs de administración (1-30, 254) al instante.

🔄 Mejorado

  • Rendimiento: La interfaz ya no se bloquea durante la verificación por ping.
  • Experiencia de Usuario: Se puede ver el progreso de la verificación IP por IP.

[1.2.1] - 2025-11-26

Añadido

  • Límite de IPs para verificación: Nuevo selector para limitar la cantidad de IPs a verificar con ping (5, 10, 20 o Todas)
    • Evita timeouts en segmentos grandes
    • Prioriza IPs de cliente (las administrativas se muestran sin verificar cuando hay límite)
  • Defaults mejorados: Checkbox de verificación activado por defecto (si está habilitado en config)

🔄 Mejorado

  • Optimización de verificación: Al usar un límite, las IPs administrativas se excluyen del ping para acelerar el proceso
  • Interfaz de usuario: Feedback visual más claro sobre el límite aplicado

[1.2.0] - 2025-11-26

Añadido

Verificación por Ping

  • Clase PingService.php: Servicio de verificación de IPs mediante ping
    • Ping paralelo a múltiples IPs simultáneamente (hasta 30 IPs por lote)
    • Timeout configurable (default: 1 segundo)
    • Detección automática de disponibilidad del comando ping
    • Procesamiento en lotes para evitar sobrecarga de red
    • Fallback graceful si ping no está disponible
  • Parámetro de configuración enablePingVerification: Control global de verificación por ping
    • Modo opcional: usuario decide en cada búsqueda
    • Checkbox condicional en frontend (solo visible si está habilitado)
    • Parámetro verify_ping en API REST
  • Detección de dispositivos no registrados: Identifica IPs que responden a ping pero no están en UISP
    • Filtra automáticamente IPs que responden
    • Advertencias en logs para IPs no registradas
    • Estadísticas de ping en respuestas

Integración

  • Frontend: Checkbox "Verificar con ping" (condicional según configuración)
    • Solo visible si enablePingVerification está habilitado
    • Integrado en formulario de búsqueda
    • Indicador de progreso durante verificación
  • API REST: Soporte para parámetro verify_ping en ambos endpoints
    • event.ip_request: Incluye estadísticas de ping en respuesta
    • event.ip_check: Indica si IP específica responde a ping
    • Campo ping_verified en todas las respuestas
    • Campo ping_stats con métricas detalladas

🔄 Mejorado

  • IpSearchService::buscarIpsDisponibles(): Ahora acepta parámetro $verifyPing
    • Integración transparente con PingService
    • Filtrado automático de IPs que responden
    • Logging detallado de resultados de ping
  • Respuestas de API: Información enriquecida con datos de ping
    • Estadísticas: total verificado, respondiendo, no respondiendo
    • Tiempo de ejecución de verificación
    • Lista de IPs que responden (posibles conflictos)

🔧 Técnico

  • Ping paralelo: Implementación usando procesos en background
    • Archivos temporales para capturar resultados
    • Espera asíncrona con timeout
    • Limpieza automática de archivos temporales
  • Performance: Optimizado para grandes rangos de IPs
    • Procesamiento en lotes de 30 IPs
    • Timeout total controlado
    • Mínimo impacto en tiempo de respuesta

[1.1.0] - 2025-11-26

Añadido

API REST Completa

  • Endpoint event.ip_request: Búsqueda de IPs disponibles en un segmento de red
    • Acepta parámetro segment para especificar el tercer octeto (0-255)
    • Retorna lista de IPs disponibles y en uso
    • Filtra automáticamente IPs administrativas (1-30, 254)
    • Incluye contadores de IPs disponibles, en uso y filtradas
  • Endpoint event.ip_check: Verificación de estado de una IP específica
    • Acepta parámetro ip con dirección completa (172.16.X.X)
    • Retorna estado: disponible, en uso o desconocido
    • Incluye información del tipo de IP (administrativa vs. cliente)
    • Proporciona recomendaciones de uso
  • Soporte para webhooks: Habilitado supportsWebhookEvents: true en manifest
  • Manejo de peticiones JSON: Detección automática de Content-Type para API vs Frontend

Arquitectura y Código

  • Clase ApiHandlers.php: Manejadores dedicados para eventos de API REST
    • handleApiRequest(): Router principal de eventos
    • handleIpRequest(): Procesamiento de búsqueda de IPs
    • handleIpCheck(): Procesamiento de verificación de IPs
  • Clase IpSearchService.php: Servicio de búsqueda de IPs con lógica de negocio
    • buscarIpsDisponibles(): Búsqueda de IPs en segmento específico
    • obtenerIpsEnUso(): Obtención de IPs desde API UNMS
    • isAdminIp(): Método estático para detectar IPs administrativas
    • getIpType(): Método estático para obtener información del tipo de IP
  • Sistema de filtrado de IPs: Clasificación automática de IPs administrativas vs. cliente
    • Rango administrativo: .1-.30 y .254
    • Rango cliente: .31-.253
    • Etiquetas visuales en frontend
    • Filtrado automático en API REST

Documentación

  • README.md completo: Documentación profesional del plugin
    • Guía de instalación y configuración
    • Documentación completa de API REST
    • Ejemplos de uso en múltiples lenguajes (cURL, PHP, JavaScript, Python)
    • Tabla de códigos de error
    • Troubleshooting y soporte
  • CHANGELOG.md: Archivo dedicado para control de versiones

🔄 Mejorado

  • Separación de responsabilidades: Lógica de negocio separada en clases dedicadas
  • Manejo de errores mejorado: Respuestas JSON estructuradas con códigos de error descriptivos
  • Sistema de logging: Logs más detallados y organizados para debugging
    • Registro de tipo de petición (HTML vs JSON)
    • Logging de eventos API procesados
    • Información de errores con stack traces
  • Compatibilidad dual: Frontend HTML y API REST funcionan simultáneamente
    • Detección automática del tipo de petición
    • Sin interferencia entre modos
  • Validación de datos: Validación robusta de parámetros en API
    • Validación de formato de IP
    • Validación de rangos de segmento
    • Mensajes de error descriptivos

🔧 Técnico

  • Namespace PHP: SiipAvailableIps para evitar conflictos
  • Manejo global de errores: Error handler para convertir errores PHP en respuestas JSON
  • Configuración SSL: Soporte para certificados autofirmados en desarrollo
  • Timeouts configurados: Timeouts de conexión y ejecución para API UNMS

[1.0.1] - 2025-11-25

Añadido

  • Frontend web moderno: Interfaz de usuario con diseño responsive y atractivo
    • Diseño con gradientes y glassmorphism
    • Tipografía Google Fonts (Inter)
    • Animaciones suaves y micro-interacciones
    • Modo oscuro integrado
  • Búsqueda de IPs por segmento: Campo de entrada para tercer octeto
  • Función copiar al portapapeles: Botón de copia rápida para cada IP
    • Feedback visual al copiar
    • Compatible con navegadores modernos
  • Estadísticas en tiempo real: Contadores de IPs disponibles y en uso
    • Tarjetas de estadísticas visuales
    • Actualización dinámica tras búsqueda
  • Integración con API UNMS: Conexión directa con UISP Network
    • Obtención de IPs en uso desde dispositivos
    • Soporte para HTTPS
    • Manejo de errores de conexión

🔄 Mejorado

  • Conexión con API UNMS: Optimización de peticiones HTTP
    • Timeouts configurables
    • Mejor manejo de errores de red
    • Logging de respuestas
  • Búsqueda de IPs: Algoritmo optimizado para comparación de rangos
    • Ordenamiento de IPs por último octeto
    • Cálculo eficiente de IPs disponibles
    • Validación de segmentos (0-255)

🐛 Corregido

  • Mejoras en la estabilidad de conexión con API UNMS
  • Corrección de validación de segmentos fuera de rango
  • Fix en ordenamiento de IPs en tabla de resultados

[1.0.0] - 2025-11-25

Lanzamiento Inicial

Funcionalidades Core

  • Búsqueda básica de IPs: Funcionalidad principal del plugin
    • Búsqueda en rangos 172.16.X.x
    • Detección de IPs en uso
    • Cálculo de IPs disponibles
  • Integración con UISP CRM: Plugin nativo para UCRM
    • Instalación vía interfaz de plugins
    • Configuración desde panel de administración
    • Acceso desde menú de reportes
  • Interfaz web básica: Primera versión del frontend
    • Formulario de búsqueda simple
    • Tabla de resultados
    • Diseño básico responsive

Configuración

  • Parámetros de configuración:
    • Dirección IP/dominio del servidor
    • Token de API UCRM
    • Token de API UNMS (opcional)
    • Modo debug
    • Nivel de logging

Integración

  • API UNMS: Conexión con UISP Network para obtener IPs
  • Sistema de logs: Archivo plugin.log para debugging
  • Compatibilidad: UCRM 1.0.0+ y UNMS 1.0.0+

Tipos de Cambios

  • Añadido: Para nuevas funcionalidades
  • 🔄 Mejorado: Para cambios en funcionalidades existentes
  • 🐛 Corregido: Para corrección de bugs
  • 🔧 Técnico: Para cambios técnicos internos
  • 🗑️ Eliminado: Para funcionalidades removidas
  • ⚠️ Deprecado: Para funcionalidades que serán removidas
  • 🔒 Seguridad: Para parches de seguridad

Versionamiento

Este proyecto sigue Semantic Versioning:

  • MAJOR (X.0.0): Cambios incompatibles con versiones anteriores
  • MINOR (0.X.0): Nueva funcionalidad compatible con versiones anteriores
  • PATCH (0.0.X): Correcciones de bugs compatibles con versiones anteriores

Última actualización: 4 de mayo de 2026