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