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
@@ -288,10 +288,16 @@
|
||||
<!-- Resultado del ping -->
|
||||
<div x-show="pingResultado[cx.ID || cx.id] !== undefined && pingResultado[cx.ID || cx.id] !== null" class="mt-1">
|
||||
<div :class="pingResultado[cx.ID || cx.id]?.exitoso ? 'bg-green-50 border-green-200 text-green-800' : 'bg-red-50 border-red-200 text-red-800'"
|
||||
class="rounded-lg px-3 py-2 border text-xs flex items-center gap-2">
|
||||
<span x-text="pingResultado[cx.ID || cx.id]?.exitoso ? '✓' : '✗'" class="font-bold text-base leading-none"></span>
|
||||
<span x-show="pingResultado[cx.ID || cx.id]?.exitoso" x-text="'Conectado en ' + pingResultado[cx.ID || cx.id]?.tiempo + ' ms'"></span>
|
||||
<span x-show="!pingResultado[cx.ID || cx.id]?.exitoso" x-text="pingResultado[cx.ID || cx.id]?.error || 'Sin conexión'"></span>
|
||||
class="rounded-lg px-3 py-2 border text-xs flex flex-col gap-1">
|
||||
<div class="flex items-center gap-2">
|
||||
<span x-text="pingResultado[cx.ID || cx.id]?.exitoso ? '✓' : '✗'" class="font-bold text-base leading-none"></span>
|
||||
<span x-show="pingResultado[cx.ID || cx.id]?.exitoso" x-text="'Conectado en ' + pingResultado[cx.ID || cx.id]?.tiempo + ' ms'"></span>
|
||||
<span x-show="!pingResultado[cx.ID || cx.id]?.exitoso" class="font-medium">Sin conexión</span>
|
||||
</div>
|
||||
<span x-show="pingResultado[cx.ID || cx.id]?.host" class="font-mono opacity-70"
|
||||
x-text="(pingResultado[cx.ID || cx.id]?.host || '') + ':' + (pingResultado[cx.ID || cx.id]?.puerto || '')"></span>
|
||||
<span x-show="!pingResultado[cx.ID || cx.id]?.exitoso && pingResultado[cx.ID || cx.id]?.error"
|
||||
x-text="pingResultado[cx.ID || cx.id]?.error" class="opacity-80 break-words"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -575,8 +581,10 @@
|
||||
async hacerPing(cx) {
|
||||
const id = cx.ID || cx.id;
|
||||
if (!id) return;
|
||||
this.pingCargando[id] = true;
|
||||
this.pingResultado[id] = undefined;
|
||||
// Spread-replace para forzar reactividad Alpine v3 con keys nuevas
|
||||
this.pingCargando = { ...this.pingCargando, [id]: true };
|
||||
this.pingResultado = { ...this.pingResultado, [id]: null };
|
||||
await this.$nextTick();
|
||||
try {
|
||||
const r = await fetch(`/app/conx-ping/${id}`);
|
||||
if (!r.ok) {
|
||||
@@ -584,11 +592,11 @@
|
||||
throw new Error(`HTTP ${r.status}${txt ? ': ' + txt.substring(0, 80) : ''}`);
|
||||
}
|
||||
const data = await r.json();
|
||||
this.pingResultado[id] = data;
|
||||
this.pingResultado = { ...this.pingResultado, [id]: data };
|
||||
} catch (e) {
|
||||
this.pingResultado[id] = { exitoso: false, error: e.message || 'Sin conexión' };
|
||||
this.pingResultado = { ...this.pingResultado, [id]: { exitoso: false, error: e.message || 'Sin conexión' } };
|
||||
} finally {
|
||||
this.pingCargando[id] = false;
|
||||
this.pingCargando = { ...this.pingCargando, [id]: false };
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user