feat: Enhance FilterManager to include filter copying functionality and improve user prompts for server configuration deployment
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m42s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m42s
This commit is contained in:
@@ -136,18 +136,14 @@ function FilterManager() {
|
|||||||
|
|
||||||
const handleSaveServerConfig = async (serverId) => {
|
const handleSaveServerConfig = async (serverId) => {
|
||||||
try {
|
try {
|
||||||
console.log('Starting to save server config for serverId:', serverId);
|
|
||||||
const config = await generateMikrotikConfig();
|
const config = await generateMikrotikConfig();
|
||||||
|
|
||||||
console.log('Generated config:', config);
|
|
||||||
|
|
||||||
// Проверяем, что конфигурация не пустая
|
// Проверяем, что конфигурация не пустая
|
||||||
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
|
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
|
||||||
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
|
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Sending config to save:', { config });
|
|
||||||
await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
|
await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
|
||||||
|
|
||||||
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
|
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
|
||||||
@@ -187,7 +183,7 @@ function FilterManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const confirm = window.confirm(
|
const confirm = window.confirm(
|
||||||
`Скопировать конфигурацию с сервера "${sourceServer.name}" на ${targetServers.length} сервер(ов)?\n\n` +
|
`Скопировать конфигурацию и фильтры с сервера "${sourceServer.name}" на ${targetServers.length} сервер(ов)?\n\n` +
|
||||||
`Целевые серверы: ${targetServers.map(s => s.name).join(', ')}`
|
`Целевые серверы: ${targetServers.map(s => s.name).join(', ')}`
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -195,9 +191,13 @@ function FilterManager() {
|
|||||||
|
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
|
// Получаем фильтры исходного сервера
|
||||||
|
const sourceFiltersResponse = await axios.get(`${API_URL}/server-filters/${sourceServerId}`);
|
||||||
|
const sourceFilters = sourceFiltersResponse.data;
|
||||||
|
|
||||||
// Получаем конфигурацию исходного сервера
|
// Получаем конфигурацию исходного сервера
|
||||||
const sourceResponse = await axios.get(`${API_URL}/server-configs/${sourceServerId}`);
|
const sourceConfigResponse = await axios.get(`${API_URL}/server-configs/${sourceServerId}`);
|
||||||
const sourceConfig = sourceResponse.data.config;
|
const sourceConfig = sourceConfigResponse.data.config;
|
||||||
|
|
||||||
if (!sourceConfig || sourceConfig === '// Конфигурация не найдена') {
|
if (!sourceConfig || sourceConfig === '// Конфигурация не найдена') {
|
||||||
setError(`У сервера "${sourceServer.name}" нет сохраненной конфигурации.`);
|
setError(`У сервера "${sourceServer.name}" нет сохраненной конфигурации.`);
|
||||||
@@ -206,13 +206,18 @@ function FilterManager() {
|
|||||||
|
|
||||||
const results = [];
|
const results = [];
|
||||||
|
|
||||||
// Копируем конфигурацию на все целевые серверы
|
// Копируем фильтры и конфигурацию на все целевые серверы
|
||||||
for (const targetServer of targetServers) {
|
for (const targetServer of targetServers) {
|
||||||
try {
|
try {
|
||||||
|
// Копируем фильтры
|
||||||
|
await axios.post(`${API_URL}/server-filters/${targetServer.id}`, { filters: sourceFilters });
|
||||||
|
|
||||||
|
// Копируем конфигурацию
|
||||||
await axios.post(`${API_URL}/server-configs/${targetServer.id}`, { config: sourceConfig });
|
await axios.post(`${API_URL}/server-configs/${targetServer.id}`, { config: sourceConfig });
|
||||||
|
|
||||||
results.push({ server: targetServer.name, status: 'success' });
|
results.push({ server: targetServer.name, status: 'success' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error copying config to ${targetServer.name}:`, error);
|
console.error(`Error copying to ${targetServer.name}:`, error);
|
||||||
results.push({ server: targetServer.name, status: 'error', error: error.message });
|
results.push({ server: targetServer.name, status: 'error', error: error.message });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,7 +226,12 @@ function FilterManager() {
|
|||||||
const errorCount = results.filter(r => r.status === 'error').length;
|
const errorCount = results.filter(r => r.status === 'error').length;
|
||||||
|
|
||||||
if (errorCount === 0) {
|
if (errorCount === 0) {
|
||||||
setSuccess(`Конфигурация успешно скопирована на ${successCount} сервер(ов)!`);
|
setSuccess(`Конфигурация и фильтры успешно скопированы на ${successCount} сервер(ов)!`);
|
||||||
|
|
||||||
|
// Если текущий выбранный сервер был в списке копируемых, обновляем его фильтры
|
||||||
|
if (selectedServer && targetServers.some(s => s.id === selectedServer.id)) {
|
||||||
|
await fetchServerFilters(selectedServer.id);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setError(
|
setError(
|
||||||
`Копирование завершено с ошибками:\n` +
|
`Копирование завершено с ошибками:\n` +
|
||||||
@@ -251,20 +261,25 @@ function FilterManager() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleDeployToAllServers = async () => {
|
const handleDeployToAllServers = async () => {
|
||||||
if (servers.length === 0) {
|
if (!selectedServer) {
|
||||||
setError('Нет серверов для развертывания.');
|
setError('Сначала выберите сервер с фильтрами для развертывания.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const enabledServers = servers.filter(s => s.enabled);
|
if (serverFilters.length === 0) {
|
||||||
|
setError('У выбранного сервера нет фильтров для развертывания.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const enabledServers = servers.filter(s => s.enabled && s.id !== selectedServer.id);
|
||||||
if (enabledServers.length === 0) {
|
if (enabledServers.length === 0) {
|
||||||
setError('Нет включенных серверов для развертывания.');
|
setError('Нет других включенных серверов для развертывания.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const confirm = window.confirm(
|
const confirm = window.confirm(
|
||||||
`Вы уверены, что хотите развернуть конфигурацию на ${enabledServers.length} сервер(ов)?\n\n` +
|
`Развернуть фильтры и конфигурацию с сервера "${selectedServer.name}" на ${enabledServers.length} сервер(ов)?\n\n` +
|
||||||
`Серверы: ${enabledServers.map(s => s.name).join(', ')}`
|
`Целевые серверы: ${enabledServers.map(s => s.name).join(', ')}`
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!confirm) return;
|
if (!confirm) return;
|
||||||
@@ -276,7 +291,12 @@ function FilterManager() {
|
|||||||
|
|
||||||
for (const server of enabledServers) {
|
for (const server of enabledServers) {
|
||||||
try {
|
try {
|
||||||
|
// Копируем фильтры
|
||||||
|
await axios.post(`${API_URL}/server-filters/${server.id}`, { filters: serverFilters });
|
||||||
|
|
||||||
|
// Копируем конфигурацию
|
||||||
await axios.post(`${API_URL}/server-configs/${server.id}`, { config });
|
await axios.post(`${API_URL}/server-configs/${server.id}`, { config });
|
||||||
|
|
||||||
results.push({ server: server.name, status: 'success' });
|
results.push({ server: server.name, status: 'success' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error deploying to ${server.name}:`, error);
|
console.error(`Error deploying to ${server.name}:`, error);
|
||||||
@@ -288,7 +308,7 @@ function FilterManager() {
|
|||||||
const errorCount = results.filter(r => r.status === 'error').length;
|
const errorCount = results.filter(r => r.status === 'error').length;
|
||||||
|
|
||||||
if (errorCount === 0) {
|
if (errorCount === 0) {
|
||||||
setSuccess(`Конфигурация успешно развернута на ${successCount} сервер(ов)!`);
|
setSuccess(`Фильтры и конфигурация успешно развернуты на ${successCount} сервер(ов)!`);
|
||||||
} else {
|
} else {
|
||||||
setError(
|
setError(
|
||||||
`Развертывание завершено с ошибками:\n` +
|
`Развертывание завершено с ошибками:\n` +
|
||||||
@@ -396,15 +416,10 @@ function FilterManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
console.log('Sending filters to generate config:', serverFilters);
|
|
||||||
console.log('Making request to:', `${API_URL}/server-filters/generate-config`);
|
|
||||||
const response = await axios.post(`${API_URL}/server-filters/generate-config`, {
|
const response = await axios.post(`${API_URL}/server-filters/generate-config`, {
|
||||||
filters: serverFilters
|
filters: serverFilters
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Response from generate-config:', response.data);
|
|
||||||
console.log('Response status:', response.status);
|
|
||||||
|
|
||||||
if (response.data && response.data.config) {
|
if (response.data && response.data.config) {
|
||||||
return response.data.config;
|
return response.data.config;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user