feat(ping): implement dynamic ping target selection from UI settings or default value
This commit is contained in:
@@ -18,6 +18,18 @@ const { createRosClient, applyBlock } = require('../services/mikrotikApplyServic
|
||||
|
||||
const IPSEC_PASSWORDS_KEY = 'network-config/ipsec-passwords.json';
|
||||
const NETWORK_CONFIG_KEY = 'network-config.json';
|
||||
const UI_SETTINGS_KEY = 'bgp_data/rt_ui_settings.json';
|
||||
|
||||
/** Загрузить UI-настройки из S3 (для pingDomain и др.) */
|
||||
async function loadUiSettings() {
|
||||
try {
|
||||
const data = await readS3TextObject(UI_SETTINGS_KEY).catch(() => ({ body: '{}' }));
|
||||
const parsed = JSON.parse(data?.body || '{}');
|
||||
return parsed && typeof parsed === 'object' ? parsed : {};
|
||||
} catch (_) {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
/** Загрузить network-config из S3 */
|
||||
async function loadNetworkConfig() {
|
||||
@@ -287,11 +299,11 @@ async function applyMikrotikConfig(req, res) {
|
||||
*/
|
||||
async function pingViaInterface(req, res) {
|
||||
try {
|
||||
const {
|
||||
let {
|
||||
serverId,
|
||||
gatewayIp,
|
||||
interfaceName,
|
||||
target = 'www.gstatic.com',
|
||||
target,
|
||||
count = 5,
|
||||
} = req.body || {};
|
||||
|
||||
@@ -299,6 +311,15 @@ async function pingViaInterface(req, res) {
|
||||
return sendError(res, 400, 'serverId is required', 'E_BAD_REQUEST');
|
||||
}
|
||||
|
||||
// Цель пинга: из тела запроса, иначе из настроек интерфейса (Домен для пинга), иначе по умолчанию
|
||||
if (target == null || String(target).trim() === '') {
|
||||
const uiSettings = await loadUiSettings();
|
||||
const pingDomain = (uiSettings.pingDomain && String(uiSettings.pingDomain).trim()) || '';
|
||||
target = pingDomain || 'www.gstatic.com';
|
||||
} else {
|
||||
target = String(target).trim();
|
||||
}
|
||||
|
||||
const servers = await readServersFromS3();
|
||||
const server = servers.find((s) => (s.id || s.dns || s.ip) === serverId);
|
||||
if (!server || server.type !== 'jumphost') {
|
||||
|
||||
Reference in New Issue
Block a user