This commit is contained in:
Lizandro Guarnizo
2026-05-21 22:37:31 -05:00
parent 154a2fa245
commit 0cf7c6d279
7 changed files with 218 additions and 2 deletions
+33 -2
View File
@@ -46,8 +46,11 @@
<span x-show="agentOnline(servidor)">● En línea</span>
<span x-show="!agentOnline(servidor) && servidor.agent_token">● Fuera</span>
<span x-show="!servidor.agent_token">○ Sin agente</span>
</span>
</div>
</span> <!-- Badge estado Hostinger -->
<span x-show="servidor.hostinger_vps_id" class="text-xs px-2 py-0.5 rounded-full font-bold"
:class="servidor.hostinger_state === 'running' ? 'bg-emerald-200 text-emerald-900' : (servidor.hostinger_state ? 'bg-amber-200 text-amber-900' : 'bg-slate-200 text-slate-600')">
<span x-text="servidor.hostinger_state || 'Hostinger'" class="capitalize"></span>
</span> </div>
</div>
</div>
@@ -153,6 +156,14 @@
</svg>
Agente
</button>
<button x-show="servidor.hostinger_vps_id" @click="syncHostinger(servidor)"
:disabled="syncCargando[servidor.ID]"
title="Sincronizar specs desde Hostinger"
class="px-3 py-2 rounded-lg font-medium transition-colors text-sm border border-orange-300 text-orange-600 hover:bg-orange-50 flex items-center gap-1 disabled:opacity-40">
<svg :class="syncCargando[servidor.ID] ? 'animate-spin' : ''" class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
</div>
</div>
@@ -484,6 +495,7 @@
agentTokenCargando: false,
cargando: true,
cargandoConexiones: false,
syncCargando: {},
pingCargando: {},
pingResultado: {},
@@ -560,6 +572,25 @@
}
},
async syncHostinger(servidor) {
const id = servidor.ID;
if (!id || this.syncCargando[id]) return;
this.syncCargando[id] = true;
try {
const r = await fetch(`/app/servidor/${id}/sync-hostinger`, { method: 'POST' });
const data = await r.json();
if (data.ok) {
await this.cargarServidores();
} else {
alert('Error: ' + (data.error || 'No se pudo sincronizar'));
}
} catch (e) {
alert('Error al sincronizar con Hostinger: ' + e.message);
} finally {
this.syncCargando[id] = false;
}
},
agentOnline(servidor) {
if (!servidor?.agent_last_seen) return false;
const last = new Date(servidor.agent_last_seen);