SSH: adiciona consulta usuario Juniper

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-03-30 21:27:31 -03:00
1 parent 89cf8844eb
commit 7f38d16821
3 files changed
+151 -2

No files matched your search

+73
View File
@@ -395,6 +395,79 @@ class SSHManager {
}
}
/**
* Busca informações de um assinante específico no concentrador Juniper
* @param {string} equipmentId - ID do equipamento Juniper
* @param {string} username - Login do usuário a pesquisar
* @returns {Promise} - Promise com status, IP e interface PPPoE do usuário
*/
async getJuniperSubscriberInfo(equipmentId, username) {
try {
const connection = await this.connect(equipmentId);
if (!connection.success) {
throw new Error(`Falha na conexão: ${connection.message}`);
}
const command = `show subscribers terse | find ${username}`;
const result = await this.executeCommand(connection.connectionId, command);
this.disconnect(connection.connectionId);
if (!result.success && !result.output) {
return {
success: false,
connected: false,
message: `Erro ao consultar assinante: ${result.error}`,
username
};
}
// Procurar linha que contenha o username
const lines = result.output.split('\n');
const userLine = lines.find(l => l.includes(username));
if (!userLine) {
return {
success: true,
connected: false,
message: `Usuário ${username} não está conectado`,
username,
ip: null,
interface: null
};
}
// Formato típico da saída terse:
// pp0.1234 inet 203.0.113.5/32 user@dominio PPPoE
// Colunas: interface tipo endereço usuário [estado]
const parts = userLine.trim().split(/\s+/);
const iface = parts[0] || null;
// Endereço IP fica na coluna que contém "/"
const ipField = parts.find(p => p.includes('/') || /^\d{1,3}(\.\d{1,3}){3}$/.test(p));
const ip = ipField ? ipField.split('/')[0] : null;
return {
success: true,
connected: true,
message: `Usuário ${username} está conectado`,
username,
ip,
interface: iface,
rawLine: userLine.trim()
};
} catch (error) {
return {
success: false,
connected: false,
message: `Erro ao consultar assinante: ${error.message}`,
username,
error: error.message
};
}
}
/**
* Busca informações de uma ONU pelo serial number na OLT
* @param {string} equipmentId - ID do equipamento OLT