SSH: adiciona consulta usuario Juniper
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
89cf8844eb
commit
7f38d16821
3 files changed
+151
-2
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user