diagnostico: busca pelo circuit-id no username

Signed-off-by: Rodrigo Martins <rodrigo@martinsevieira.adv.br>
This commit is contained in:
Rodrigo Martins committed 2026-04-05 20:14:54 -03:00
1 parent ec92ef1b88
commit 6176a150e1
1 file changed
+20 -6
+20 -6
View File
@@ -1108,6 +1108,7 @@ Digite /help para ver todos os comandos disponíveis!
const pppoeLogin = servico.usuario || servico.pppoe_login || servico.login || null; const pppoeLogin = servico.usuario || servico.pppoe_login || servico.login || null;
const serial = servico.serial || servico.comodato_serial || servico.mac || null; const serial = servico.serial || servico.comodato_serial || servico.mac || null;
const circuitId = servico.dhcp_agent_circuit_id || null;
const statusServico = this.topsapp.getStatusServicoDetalhado const statusServico = this.topsapp.getStatusServicoDetalhado
? this.topsapp.getStatusServicoDetalhado(servico.id_status) ? this.topsapp.getStatusServicoDetalhado(servico.id_status)
: (servico.status || 'N/A'); : (servico.status || 'N/A');
@@ -1120,7 +1121,7 @@ Digite /help para ver todos os comandos disponíveis!
// Executar consultas em paralelo: Juniper + ONU + GenieACS (por TAG/login) // Executar consultas em paralelo: Juniper + ONU + GenieACS (por TAG/login)
// No concentrador Juniper usa-se só o usuário (antes do @) // No concentrador Juniper usa-se só o usuário (antes do @)
const pppoeUser = pppoeLogin ? pppoeLogin.split('@')[0] : null; const pppoeUser = pppoeLogin ? pppoeLogin.split('@')[0] : null;
const [juniperResult, onuResult, genieResult] = await Promise.all([ let [juniperResult, onuResult, genieResult] = await Promise.all([
pppoeUser pppoeUser
? this.ssh.getJuniperSubscriberInfo('juniper', pppoeUser).catch(e => ({ success: false, error: e.message })) ? this.ssh.getJuniperSubscriberInfo('juniper', pppoeUser).catch(e => ({ success: false, error: e.message }))
: Promise.resolve({ success: false, skipped: true }), : Promise.resolve({ success: false, skipped: true }),
@@ -1132,6 +1133,18 @@ Digite /help para ver todos os comandos disponíveis!
: Promise.resolve({ success: false, skipped: true }) : Promise.resolve({ success: false, skipped: true })
]); ]);
// Fallback: se PPPoE não encontrou sessão ativa e há circuit-id (IPoE), buscar pelo circuit-id
if (circuitId && (!juniperResult.connected)) {
try {
const circuitResult = await this.ssh.getJuniperSubscriberInfo('juniper', circuitId);
if (circuitResult.success && circuitResult.connected) {
juniperResult = { ...circuitResult, viaCircuitId: true };
}
} catch (e) {
logger.warn(`Fallback circuit-id Juniper falhou: ${e.message}`);
}
}
// Sincronização TAG GenieACS ↔ PPPoE TopSapp (fire-and-forget, silencioso) // Sincronização TAG GenieACS ↔ PPPoE TopSapp (fire-and-forget, silencioso)
// Garante que o login PPPoE do cliente fica registrado como TAG no GenieACS, // Garante que o login PPPoE do cliente fica registrado como TAG no GenieACS,
// permitindo buscas futuras por "ver roteador <login>". // permitindo buscas futuras por "ver roteador <login>".
@@ -1156,22 +1169,23 @@ Digite /help para ver todos os comandos disponíveis!
msg += ` 🔌 Status: ${statusServico}\n`; msg += ` 🔌 Status: ${statusServico}\n`;
if (pppoeLogin) msg += ` 👤 Login PPPoE: \`${pppoeLogin}\`\n`; if (pppoeLogin) msg += ` 👤 Login PPPoE: \`${pppoeLogin}\`\n`;
if (servico.dhcp_username) msg += ` 👤 DHCP Username: \`${servico.dhcp_username}\`\n`; if (servico.dhcp_username) msg += ` 👤 DHCP Username: \`${servico.dhcp_username}\`\n`;
if (servico.dhcp_agent_circuit_id) msg += ` 🔗 Agent Circuit ID: \`${servico.dhcp_agent_circuit_id}\`\n`; if (circuitId) msg += ` 🔗 Circuit\-ID: \`${circuitId}\`\n`;
if (endereco) msg += ` 📍 Endereço: ${endereco}${cidade ? `, ${cidade}` : ''}\n`; if (endereco) msg += ` 📍 Endereço: ${endereco}${cidade ? `, ${cidade}` : ''}\n`;
msg += '\n'; msg += '\n';
// Bloco 2: Concentrador Juniper // Bloco 2: Concentrador Juniper
msg += `🌐 *Concentrador Juniper*\n`; msg += `🌐 *Concentrador Juniper*\n`;
if (juniperResult.skipped) { if (juniperResult.skipped && !circuitId) {
msg += ` ⚫ Login PPPoE não informado no cadastro\n`; msg += ` ⚫ Login PPPoE/Circuit\-ID não informado no cadastro\n`;
} else if (!juniperResult.success) { } else if (!juniperResult.success) {
msg += ` ⚠️ Erro ao consultar: ${juniperResult.error || 'falha na consulta'}\n`; msg += ` ⚠️ Erro ao consultar: ${juniperResult.error || 'falha na consulta'}\n`;
} else if (juniperResult.connected) { } else if (juniperResult.connected) {
msg += ` 🟢 *Conectado*\n`; const modoAuth = juniperResult.viaCircuitId ? 'IPoE/Circuit\-ID' : 'PPPoE';
msg += ` 🟢 *Conectado* (${modoAuth})\n`;
msg += ` 🌐 IP: \`${juniperResult.ip || 'N/A'}\`\n`; msg += ` 🌐 IP: \`${juniperResult.ip || 'N/A'}\`\n`;
msg += ` 🔌 Interface: \`${juniperResult.interface || 'N/A'}\`\n`; msg += ` 🔌 Interface: \`${juniperResult.interface || 'N/A'}\`\n`;
} else { } else {
msg += ` 🔴 *Desconectado* (sem sessão PPPoE ativa)\n`; msg += ` 🔴 *Desconectado* (sem sessão ativa)\n`;
} }
msg += '\n'; msg += '\n';