// Функция для получения HTML шаблона сервера
var patch_json = '/json/server_status.json';
function getServerTemplate(server) {
// Определяем класс и текст статуса
let statusClass, statusText;
switch(server.Status.toLowerCase()) {
case 'running':
statusClass = 'running';
statusText = 'Работает';
break;
case 'stopped':
statusClass = 'stopped';
statusText = 'Остановлен';
break;
case 'starting':
statusClass = 'starting';
statusText = 'Запускается';
break;
case 'stopping':
statusClass = 'stopping';
statusText = 'Завершается';
break;
default:
statusClass = 'stopped';
statusText = `Неизвестно (${server.Status})`;
}
// Определяем иконку и состояние кнопки
let buttonIcon, buttonDisabled, buttonClass;
if (statusClass === 'starting' || statusClass === 'stopping') {
buttonIcon = '⏳';
buttonDisabled = 'disabled';
buttonClass = 'btn-icon disabled';
} else if (statusClass === 'running') {
buttonIcon = '⏹️';
buttonDisabled = '';
buttonClass = 'btn-icon';
} else {
buttonIcon = '▶️';
buttonDisabled = '';
buttonClass = 'btn-icon';
}
return `
${server.NameService}
Port ${server.Port} - ${statusText}
`;
}
// Создаем загрузчик серверов
const serversLoader = new JSONLoader({
url: patch_json,
container: '.servers-grid',
requiredFields: ['NameService', 'Port', 'Status'],
displayTemplate: getServerTemplate,
errorMessage: 'Ошибка загрузки статуса серверов'
});
// Функция для показа временного статуса
function showTempStatus(serviceName, tempStatus) {
// Ищем элемент этого сервера на странице
const serverElements = document.querySelectorAll('.server-item');
serverElements.forEach(element => {
const nameElement = element.querySelector('.server-name');
if (nameElement && nameElement.textContent === serviceName) {
// Создаем временный объект сервера с новым статусом
fetch(patch_json)
.then(response => response.json())
.then(servers => {
const server = servers.find(s => s.NameService === serviceName);
if (server) {
const tempServer = {...server, Status: tempStatus};
// Заменяем только этот элемент
element.outerHTML = getServerTemplate(tempServer);
}
});
}
});
}
// Функция обновления одного сервера
function updateSingleServer(serviceName) {
fetch(patch_json)
.then(response => response.json())
.then(servers => {
const server = servers.find(s => s.NameService === serviceName);
if (server) {
// Ищем элемент этого сервера на странице
const serverElements = document.querySelectorAll('.server-item');
serverElements.forEach(element => {
const nameElement = element.querySelector('.server-name');
if (nameElement && nameElement.textContent === serviceName) {
// Заменяем только этот элемент
element.outerHTML = getServerTemplate(server);
}
});
}
});
}
// Универсальная функция управления сервером
function serverAction(serviceName, startEndpoint, stopEndpoint, updateDelayMs) {
// Получаем текущий статус сервера из JSON
fetch(patch_json)
.then(response => response.json())
.then(servers => {
const server = servers.find(s => s.NameService === serviceName);
// Блокируем действие если сервер в процессе изменения
if (server.Status === 'starting' || server.Status === 'stopping') {
return;
}
if (server.Status === 'running') {
// Сервер запущен - останавливаем
showTempStatus(serviceName, 'stopping');
fetch(stopEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}).then(() => {
setTimeout(() => {
updateSingleServer(serviceName); // Обновляем только этот сервер
}, updateDelayMs);
});
} else {
// Сервер остановлен - запускаем
showTempStatus(serviceName, 'starting');
fetch(startEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}).then(() => {
setTimeout(() => {
updateSingleServer(serviceName); // Обновляем только этот сервер
}, updateDelayMs);
});
}
});
}
// Функция для переключения сервера
function toggleServer(serviceName) {
if (serviceName === 'MySQL Server') {
serverAction('MySQL Server', '/service/MySql_Start', '/service/MySql_Stop', 2000);
}
if (serviceName === 'HTTP Server') {
serverAction('HTTP Server', '/service/Http_Start', '/service/Http_Stop', 2000);
}
if (serviceName === 'HTTPS Server') {
serverAction('HTTPS Server', '/service/Https_Start', '/service/Https_Stop', 2000);
}
if (serviceName === 'PHP Server') {
serverAction('PHP Server', '/service/Php_Start', '/service/Php_Stop', 2000);
}
}
// Запуск при загрузке страницы
document.addEventListener('DOMContentLoaded', function() {
serversLoader.load();
});