2026-05-11 (lunes)
Foco del día
- Cleanup de
orion— desbloquear root partition al 100%. - Implementación de las 4 reglas nuevas de comisión en Holbox (Fase 1 MVP).
- Arreglar push notifications + reforma grande del sistema de correos en
es-antenas-new.
Hecho
orion: root al 100% → 62% (159G liberados + Round 4 en progreso)
- Diagnóstico read-only por SSH.
/var/log151G,/var/lib/libvirt/images228G,/opt25G como top consumidores. - Round 1 (142G):
rm -rf /var/log/antenas_rrdtool2(90G legacy) +rm /var/log/esconfigbackup.log(52G — Sergio desactivó el proceso durante la sesión). - Round 2 (~2.3G): maillogs
.gzviejos, rsyncd.log, smsd.log truncado, antenas_rrdtool v1 legacy. - Round 3 (~18G): Tier 3 (/tmp/esbackup, /root/bd_speedtest.sql, zabbix installer) +
/opt/antenas_backup. - Dudosos confirmados (~11G): waterhouse_ftp, Contabilidad-0.qcow2 huérfano de 2017.
- Round 4 en background: mover 5 qcow2 archivados (~180G) + ISOs viejos (~10G) a
/media/electrorepo/orion-archived-vms/.virsh dumpxmlguardado al lado. Va lento (~4 MB/s, discos viejos compitiendo con VMs activas).
Hallazgos
- 🚨 orion también corre FreePBX/Asterisk activo en el host (no era solo hypervisor — no estaba documentado). README actualizado.
- VM
prometheusya tenía qcow2 en electrorepo (no requiere migración). smsddaemon vivo desde 2025 pero sin escribir desde Sept 2025 → revisar si sigue en servicio.
Reaffirms de proyectos existentes
- vpn-clientes y backups-infra — Sergio mencionó "VPN de servidores" y "modernizar backups de servidores" como pendientes a recordar; ambos ya están capturados desde el 2026-05-08. Anotada referencia al trigger (desactivación de
esconfigbackup). - dokuwiki → wiki.js — ya estaba en
docs-platform.md:31desde 2026-04-25.
orion: FreePBX local confirmado como prescindible
Después de descubrir el FreePBX activo en orion, Sergio confirmó que no está en uso actualmente — se usaba hace mucho. End-game simplificado: solo apagar el servicio antes de apagar el host, sin migración a otro PBX. Actualizado en projects/orion-decommission.md y electrosystems/servers/orion/README.md.
holbox: Fase 1 de reglas de comisión implementada
Después de cerrar orion, arranqué la implementación de las 4 reglas de comisión (Opción A con flag trigger).
Investigación read-only previa:
- 3 tipos de optometría confirmados en código:
antireflejante,tinte,transition(PosController.php:185). - Categorías + SKUs confirmados en prod vía
php artisan tinker(SSH read-only). - Sergio confirmó 2 ambigüedades pendientes: "Golden" = ambas categorías (Bamboo Golden id=3 + Bamboo Premium Golden id=6 → 2 reglas), y las reglas 3+4 se suman para Ixchel/Kin.
Implementación local:
- Migration
comision_reglas(trigger enum + FKs nullable + tipo enum + monto + paquete + descripcion + activa). - Modelo
ComisionReglacon casts y constantes. - Service
ComisionReglasCalculator(lógica separada del controller, testeable). - Seeder
ComisionReglasSeedercon las 7 filas (1 optometría + 2 Golden + 1 Bamboo Clásico + 3 Ixchel/Kin), idempotente víaupdateOrCreate. ReporteController::comisionesahora sumareglas_totalacomision_total.- Vista Comisiones.vue: columna "Reglas Extra" + tooltip con desglose + esquema actualizado.
Tests: 8 casos Pest, todos pasan. 0 regresiones (33 failures preexistentes verificados con git stash + re-run).
Card "Esquema de Comisiones" hecho dinámico (lee de DB: Configuracion + ComisionRegla), así futuros cambios de monto/regla se reflejan sin tocar código.
Migration de data agregada para que GitHub Actions siembre las 7 reglas en cada deploy (el workflow solo corre migrate, no seeders).
Deploy ejecutado 2026-05-11 — commit ea70491, push a origin/main. GitHub Actions corre deploy.yml (git pull + composer + npm + migrate). Pendiente verificar manualmente en /reportes/comisiones de prod.
Cross-project
Archivos cambiados en sergio/
projects/orion-decommission.md— bitácora 2026-05-11 + tareas actualizadas + tarea nueva (PBX local).projects/vpn-clientes.md— bitácora reaffirm.projects/backups-infra.md— bitácora reaffirm + nota sobre coverage deesconfigbackupviejo.INDEX.md— bloqueador resuelto, "Últimos cambios" actualizado, priorities reordered.log/2026-05-11.md— este archivo (primero del log/).
Archivos cambiados en electrosystems/
servers/orion/README.md— storage post-cleanup, tabla VMs con qcow2 location, sección FreePBX/Asterisk local, changelog 2026-05-11.
Archivos cambiados/nuevos en ~/code/holbox/ (pendiente deploy)
- Nuevos:
app/Models/ComisionRegla.phpapp/Support/ComisionReglasCalculator.phpdatabase/migrations/2026_05_11_130000_create_comision_reglas_table.phpdatabase/seeders/ComisionReglasSeeder.phptests/Feature/ComisionReglasCalculatorTest.php
- Modificados:
app/Http/Controllers/ReporteController.phpresources/js/Pages/Reportes/Comisiones.vue
es-antenas-new: arreglar push + reforma de cómo se mandan correos
Push notifications no funcionaban — root cause encontrado. Diagnóstico vía SSH a monitoreo (192.168.20.17 → /var/www/es-monitoreo/). El log de prod tenía la pista exacta: phpseclib3 (que firma headers VAPID con ECDH) emitía un E_USER_NOTICE por falta de extensión GMP/BCMath; el handler de producción lo convertía en ErrorException; el try/catch de NotificarLogs lo registraba como "Error enviando push" — pero el push nunca se enviaba. Por eso failed_jobs estaba vacío.
Acciones:
sudo apt-get install -y php8.2-gmp+ reload php-fpm (Sergio ejecutó; mi cuenta no tiene NOPASSWD para apt).- Bonus:
storage/logs/laravel.logestaba en 32 GB sin rotar. Truncado a 0; cambiadoLOG_CHANNEL=stack→dailyen.env(rotación con retención de 14 días).
Reforma del sistema de correos. Sergio dictó dos casos concretos: (1) recibió 5 correos en 5 minutos por un enlace flappeando en Caborca, (2) un monitoreo marcado como tier normal le llegó como [ALERTA] inmediato en lugar de digest. Investigación reveló:
- Caso 1: enlace flappeando (rachas de ~3 min cada 2-7 min). Cada racha cruzaba
min_failure_durationy disparaba alerta inicial. No es un bug per se, falta de detección de flapping. - Caso 2: el monitoreo
TX Capacity Mimosa C5ctieneurgente_si_cero=true. Cuando la Mimosa reportó 0 Mbps (falso cero común),resolverTier()lo escaló denormalaurgentey se reseteóultimo_notificado_at, disparando alerta inicial inmediata.
Sergio autorizó ejecutar las 5 fases:
A — Mimosa Capacity urgente_si_cero=false (cambio de datos, sin código). Flipeé los 4 monitoreos Mimosa (ids 91, 96, 126, 127) vía tinker.
B — Detección de flapping (commit 058a22b). N=3 rachas en M=15 min activa el estado flapping. Mientras flappea: suprime alertas normales, manda un solo correo "Flapping detectado", recordatorio cada 24h, y "Resuelto" cuando esté estable por 30 min. 4 columnas nuevas en estatus_monitoreos_dispositivos. Configurable vía monitoreo.flapping.*.
C(ii) — Diferir urgentes durante quiet hours + digest al amanecer (commit 7a01a66). Helper App\Support\QuietHours. NotificarLogs hace early-return 22:00 → 07:00. Nuevo comando es:notificar-urgente-digest agendado a quiet_hours_end que recolecta TODO lo urgente acumulado (alertas, recordatorios, recuperaciones, flapping) en un solo correo agrupado por sitio.
D — Override de tier a nivel dispositivo (commit 8bd832c). Columna dispositivos.tier_default enum nullable. En resolverTier() gana sobre la prioridad por monitoreo (downgrade y upgrade). UI: dropdown nuevo en Dispositivos/Forma.vue.
Extras — Skip monitoreos sin umbral (commit 46ce916). Scope notificable en MonitoreoDispositivo que combina ignorar=false + monitoreo.tiene_limite=true. Filtra 78 monitoreos throughput (RX/TX/Port N Throughput) que generaban ruido al caerse antenas. Los custom labels (precedencia plantilla pivot → device override → nombre canónico) ya estaban implementados en el accessor getEtiquetaAttribute(); ningún cambio de código, solo verificación.
Hotfix de Blade (commit d0dc741). Al recompilar vistas tras el deploy de B, el digest normal de las 21:00 falló con unexpected token "use". Causa: @php use App\Foo; @endphp dentro de <x-mail::message> queda como use fuera del top de archivo (el componente envuelve el slot en closure). Fix: nombres fully-qualified en tres plantillas.
Tooling debt capturado: el server monitoreo no tiene Node/npm instalado, así que los assets se compilan local y se commitean. Pendiente agregado en projects/es-antenas-new.md para instalar Node 20 LTS y .gitignore public/build/.
Tests: 180/181 pasan (1 fallo preexistente SnmpSimulador). 26 tests nuevos hoy entre FlappingDetectionTest, QuietHoursDigestTest, DispositivoTierDefaultTest, MonitoreoSinLimiteSkipTest.
Deploys: 5 (B, C(ii), hotfix, D + assets, Extras), todos manuales vía ssh monitoreo + git pull + migrate --force + optimize:clear + reload php-fpm. La cuenta de Sergio tiene NOPASSWD solo para mysql y horizon:terminate; los demás pasos requieren su contraseña interactiva.
Pendiente / abierto
- Round 4 corriendo via
nohupen orion (/root/mv-orion-archive.sh, PPID=1). Sobrevive cualquier desconexión. Verificar conssh orion 'tail -30 /var/log/orion-mv-archive.log'yssh orion 'ls /var/log/orion-mv-archive.done'. Estimado 1-3 horas. - Investigar el FreePBX local de orion — confirmado por Sergio como prescindible (no en uso). Solo apagar el servicio al hacer decommission, sin migración.
smsddaemon huérfano — revisar si sigue siendo necesario.bookstackpaused (25G en sda2) — fuera de scope esta sesión, parte de docs-platform.- Observar 2-3 días el nuevo sistema de correos de
es-antenas-new:- 07:00 — el digest de fin de quiet hours debe llegar limpio y agrupado.
- 22:00 → 07:00 — ningún correo urgente debe llegar.
- Detección de flapping debe atrapar el patrón Caborca sin falsos positivos.
- Correos de monitoreos throughput (RX/TX) deben haber cesado.
- Instalar Node/npm en
monitoreoy.gitignore public/build/— captura enprojects/es-antenas-new.md.
Próximos pasos sugeridos
- Cuando el Round 4 termine: actualizar bitácora de
orion-decommission.mdcon números finales de disco. - Mañana 2026-05-12 AM: verificar digest urgente de las 07:00 en Gmail. Si llegó bien, considerar
es-antenas-newcasi cerrado (queda solo el pendiente histórico de push notifications, ya resuelto pero la captura del proyecto debe limpiarse). - Atender pendientes ya agendados:
projects-hub— mañana 2026-05-12: seguimiento Meta Cloud API.adfsa-migration— hoy PM ya pasó (Sergio + compañera revisaron el server).