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:
co-authored by
Copilot
parent
c3f19991c9
commit
2779c0a15d
@@ -39,7 +39,7 @@ type QueryResult struct {
|
||||
// openDynamicDB abre una conexión a la base de datos indicada por ConxDb.
|
||||
func openDynamicDB(c models.ConxDb) (*sql.DB, error) {
|
||||
driver := strings.ToLower(c.TipoDb.Nombre)
|
||||
host := c.Servidor.IpServidor
|
||||
host := c.HostEfectivo()
|
||||
port := c.Puerto
|
||||
user := c.Usuario
|
||||
pass := c.Password
|
||||
@@ -319,7 +319,7 @@ func TestDBConnection(conx models.ConxDb) error {
|
||||
// ── helpers ──────────────────────────────────────────────────────────────────
|
||||
|
||||
func openDynamicDBWithName(c models.ConxDb, dbName string) (*sql.DB, error) {
|
||||
host := c.Servidor.IpServidor
|
||||
host := c.HostEfectivo()
|
||||
port := c.Puerto
|
||||
user := c.Usuario
|
||||
pass := c.Password
|
||||
@@ -486,7 +486,7 @@ func isRedisDriver(driver string) bool {
|
||||
}
|
||||
|
||||
func redisConnect(c models.ConxDb, dbIndex int) (*goredis.Client, error) {
|
||||
host := c.Servidor.IpServidor
|
||||
host := c.HostEfectivo()
|
||||
port := c.Puerto
|
||||
pass := c.Password
|
||||
if port == "" {
|
||||
@@ -637,10 +637,10 @@ func redisExecuteCommand(conx models.ConxDb, database, cmdText string) QueryResu
|
||||
}
|
||||
elapsed := time.Since(start).Milliseconds()
|
||||
result := QueryResult{
|
||||
Columns: []string{"command", "result", "error"},
|
||||
Rows: rows,
|
||||
RowCount: len(rows),
|
||||
IsSelect: true,
|
||||
Columns: []string{"command", "result", "error"},
|
||||
Rows: rows,
|
||||
RowCount: len(rows),
|
||||
IsSelect: true,
|
||||
DurationMs: elapsed,
|
||||
}
|
||||
saveHistory(conx.ID, cmdText, "ok", "", int64(len(rows)), elapsed)
|
||||
@@ -700,11 +700,11 @@ func redisResultToQueryResult(val any, cmd string) QueryResult {
|
||||
label = "count"
|
||||
}
|
||||
return QueryResult{
|
||||
IsSelect: false,
|
||||
IsSelect: false,
|
||||
AffectedRows: v,
|
||||
Columns: []string{label},
|
||||
Rows: []map[string]any{{label: v}},
|
||||
RowCount: 1,
|
||||
Columns: []string{label},
|
||||
Rows: []map[string]any{{label: v}},
|
||||
RowCount: 1,
|
||||
}
|
||||
case []any:
|
||||
// Lista o conjunto de valores
|
||||
@@ -797,7 +797,7 @@ func isMongoDriver(driver string) bool {
|
||||
}
|
||||
|
||||
func mongoURI(c models.ConxDb) string {
|
||||
host := c.Servidor.IpServidor
|
||||
host := c.HostEfectivo()
|
||||
port := c.Puerto
|
||||
user := c.Usuario
|
||||
pass := c.Password
|
||||
|
||||
Reference in New Issue
Block a user