fix: ping real de BD + campo Host en ConxDb + reactividad Alpine

Problema raíz:
1. El ping TCP usaba Servidor.IpServidor → fallaba si la BD solo escucha
   en localhost del servidor remoto (comportamiento normal en producción)
2. La reactividad Alpine v3.13 no detectaba keys nuevas en objeto vacío {}
   dentro de x-for loops, spinner nunca aparecía

Cambios:
- pkg/models/conx_db.go: nuevo campo Host (vacío = usa Servidor.IpServidor)
  + método HostEfectivo() como fuente única de verdad para host
- pkg/services/query_runner_service.go: todos los puntos (openDynamicDB,
  openDynamicDBWithName, redisConnect, mongoURI) usan c.HostEfectivo()
- rest/controllers/servidor_controller.go: PingConexion reescrito —
  primero prueba conexión real a la BD (no solo TCP), si falla prueba TCP,
  devuelve host+puerto testeado y mensajes de error descriptivos
- servidor_dashboard.html: hacerPing usa spread-replace para forzar
  reactividad + $nextTick, resultado muestra host:puerto testeado y
  mensaje de error completo en múltiples líneas

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Lizandro Guarnizo
2026-05-21 11:56:12 -05:00
co-authored by Copilot
parent c3f19991c9
commit 2779c0a15d
4 changed files with 73 additions and 51 deletions
+10
View File
@@ -10,6 +10,7 @@ import (
type ConxDb struct {
gorm.Model
Nombre string `json:"nombre" gorm:"column:nombre"`
Host string `json:"host" gorm:"column:host"` // vacío = usa Servidor.IpServidor
Puerto string `json:"puerto" gorm:"column:puerto"`
Usuario string `json:"usuario" gorm:"column:usuario"`
Password string `json:"password" gorm:"column:password"`
@@ -21,6 +22,15 @@ type ConxDb struct {
Servidor Servidor `json:"servidor" gorm:"foreignKey:ServidorID"`
}
// HostEfectivo devuelve el host de conexión: el campo Host si está definido,
// o el IP del servidor asociado como fallback.
func (c ConxDb) HostEfectivo() string {
if c.Host != "" {
return c.Host
}
return c.Servidor.IpServidor
}
func (ConxDb) TableName() string {
return "conx_db"
}