Files
LogBoard/Makefile
T
inecs 6e51f00791 feat: Добавлено AJAX обновление логов и улучшения интерфейса
Основные изменения:
- Добавлено AJAX обновление логов с чекбоксом 'Auto-update logs'
- Добавлена опция 'All logs' в выпадающий список tail lines
- Исправлено отображение длинных названий контейнеров в multi-view режиме
- Восстановлена загрузка истории логов при включенном AJAX обновлении

Новые функции:
- Чекбокс 'Auto-update logs' в секции Options (включен по умолчанию)
- Настройка интервала обновления через LOGBOARD_AJAX_UPDATE_INTERVAL
- API эндпоинт /api/settings для получения настроек приложения
- Поддержка параметра tail=all для загрузки всех логов
- Автоматический запуск AJAX обновления при включении чекбокса

Исправления UI:
- Кнопки LogLevels не уезжают вправо при длинных названиях контейнеров
- Добавлено обрезание длинных названий с многоточием
- Фиксированная высота заголовков в multi-view режиме
- Защита от сжатия кнопок LogLevels

Тестирование:
- Добавлены тесты для AJAX обновления (test_ajax_update.py)
- Тест multi-view AJAX обновления (test_multi_view_ajax.py)
- Тест опции 'all logs' (test_all_logs.py)
- Тест отображения длинных названий (test_multi_view_layout.py)
- Команды make test-ajax, make test-multi-view-ajax, make test-all-logs, make test-multi-view-layout

Документация:
- Создана подробная документация AJAX обновления (app/docs/ajax-update.md)
- Обновлен CHANGELOG.md с версиями 1.3.0, 1.5.0, 1.6.0
- Обновлен README.md с описанием новых функций

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-08-18 19:35:47 +03:00

185 lines
9.0 KiB
Makefile

# Makefile для LogBoard+
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
.PHONY: help setup build up down restart logs clean status ps shell generate test-auth
# Переменные
COMPOSE_FILE = docker-compose.yml
SERVICE_NAME = logboard
# Цвета для вывода
GREEN = \033[0;32m
YELLOW = \033[1;33m
RED = \033[0;31m
NC = \033[0m # No Color
help: ## Показать справку по командам
@echo "$(GREEN)LogBoard+ - Команды управления$(NC)"
@echo ""
@echo "$(YELLOW)Основные команды:$(NC)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}'
@echo ""
@echo "$(YELLOW)Примеры использования:$(NC)"
@echo " make setup # Настроить переменные окружения"
@echo " make build # Собрать образ"
@echo " make up # Запустить сервисы"
@echo " make down # Остановить сервисы"
@echo " make restart # Перезапустить сервисы"
@echo " make logs # Показать логи"
setup: ## Настроить переменные окружения (копировать env.example в .env)
@echo "$(GREEN)Настройка переменных окружения...$(NC)"
@if [ ! -f .env ]; then \
cp env.example .env; \
echo "$(GREEN)Файл .env создан из env.example$(NC)"; \
echo "$(YELLOW)Не забудьте отредактировать .env под свои нужды!$(NC)"; \
echo "$(YELLOW)После редактирования .env запустите make generate для обновления docker-compose.yml$(NC)"; \
else \
echo "$(YELLOW)Файл .env уже существует.$(NC)"; \
echo "$(YELLOW)Для пересоздания удалите .env и запустите make setup$(NC)"; \
fi
generate: ## Сгенерировать docker-compose.yml из .env файла
@echo "$(GREEN)Генерация docker-compose.yml из .env файла...$(NC)"
@if [ ! -f .env ]; then \
echo "$(RED)Файл .env не найден! Сначала запустите make setup$(NC)"; \
exit 1; \
fi
python3 scripts/generate-compose.py
@echo "$(GREEN)docker-compose.yml сгенерирован успешно!$(NC)"
build: ## Собрать Docker образ
@echo "$(GREEN)Сборка Docker образа...$(NC)"
docker compose -f $(COMPOSE_FILE) build --no-cache
@echo "$(GREEN)Образ собран успешно!$(NC)"
up: ## Запустить сервисы в фоновом режиме (с правами root)
@echo "$(GREEN)Запуск сервисов с правами root...$(NC)"
docker compose -f $(COMPOSE_FILE) up -d
@echo "$(GREEN)Сервисы запущены с правами root!$(NC)"
@echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"
down: ## Остановить и удалить сервисы (с правами root)
@echo "$(YELLOW)Остановка сервисов с правами root...$(NC)"
docker compose -f $(COMPOSE_FILE) down
@echo "$(GREEN)Сервисы с правами root остановлены!$(NC)"
restart: ## Перезапустить сервисы (с правами root)
@echo "$(YELLOW)Перезапуск сервисов с правами root...$(NC)"
docker compose -f $(COMPOSE_FILE) restart
@echo "$(GREEN)Сервисы с правами root перезапущены!$(NC)"
logs: ## Показать логи сервисов
@echo "$(GREEN)Логи сервисов:$(NC)"
docker compose -f $(COMPOSE_FILE) logs -f
logs-tail: ## Показать последние 100 строк логов
@echo "$(GREEN)Последние 100 строк логов:$(NC)"
docker compose -f $(COMPOSE_FILE) logs --tail=100
clean: ## Остановить сервисы и удалить образы
@echo "$(RED)Очистка проекта...$(NC)"
docker compose -f $(COMPOSE_FILE) down --rmi all --volumes --remove-orphans
@echo "$(GREEN)Очистка завершена!$(NC)"
status: ## Показать статус сервисов
@echo "$(GREEN)Статус сервисов:$(NC)"
docker compose -f $(COMPOSE_FILE) ps
ps: status ## Алиас для команды status
shell: ## Подключиться к контейнеру сервиса
@echo "$(GREEN)Подключение к контейнеру $(SERVICE_NAME)...$(NC)"
docker compose -f $(COMPOSE_FILE) exec $(SERVICE_NAME) /bin/bash
start: up ## Алиас для команды up
stop: down ## Алиас для команды down
dev: ## Запуск в режиме разработки (с выводом логов)
@echo "$(GREEN)Запуск в режиме разработки...$(NC)"
docker compose -f $(COMPOSE_FILE) up --build
rebuild: ## Пересобрать и запустить сервисы
@echo "$(YELLOW)Пересборка и запуск сервисов...$(NC)"
docker compose -f $(COMPOSE_FILE) down
docker compose -f $(COMPOSE_FILE) build --no-cache
docker compose -f $(COMPOSE_FILE) up -d
@echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)"
@echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"
test-auth: ## Тестирование новой системы авторизации
@echo "$(GREEN)Тестирование системы авторизации...$(NC)"
@if [ ! -f test_auth.py ]; then \
echo "$(RED)Файл test_auth.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 test_auth.py
@echo "$(GREEN)Тестирование завершено!$(NC)"
test-ajax: ## Тестирование AJAX обновления логов
@echo "$(GREEN)Тестирование AJAX обновления логов...$(NC)"
@if [ ! -f app/scripts/test_ajax_update.py ]; then \
echo "$(RED)Файл test_ajax_update.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 app/scripts/test_ajax_update.py
@echo "$(GREEN)Тестирование AJAX завершено!$(NC)"
test-multi-view-ajax: ## Тестирование AJAX обновления в multi-view режиме
@echo "$(GREEN)Тестирование AJAX обновления в multi-view режиме...$(NC)"
@if [ ! -f app/scripts/test_multi_view_ajax.py ]; then \
echo "$(RED)Файл test_multi_view_ajax.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 app/scripts/test_multi_view_ajax.py
@echo "$(GREEN)Тестирование multi-view AJAX завершено!$(NC)"
test-ajax-no-history: ## Тестирование AJAX обновления без загрузки истории
@echo "$(GREEN)Тестирование AJAX обновления без загрузки истории...$(NC)"
@if [ ! -f app/scripts/test_ajax_no_history.py ]; then \
echo "$(RED)Файл test_ajax_no_history.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 app/scripts/test_ajax_no_history.py
@echo "$(GREEN)Тестирование AJAX без истории завершено!$(NC)"
test-all-logs: ## Тестирование опции "all logs" в AJAX обновлении
@echo "$(GREEN)Тестирование опции 'all logs' в AJAX обновлении...$(NC)"
@if [ ! -f app/scripts/test_all_logs.py ]; then \
echo "$(RED)Файл test_all_logs.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 app/scripts/test_all_logs.py
@echo "$(GREEN)Тестирование опции 'all logs' завершено!$(NC)"
test-multi-view-layout: ## Тестирование отображения длинных названий в multi-view режиме
@echo "$(GREEN)Тестирование отображения длинных названий в multi-view режиме...$(NC)"
@if [ ! -f app/scripts/test_multi_view_layout.py ]; then \
echo "$(RED)Файл test_multi_view_layout.py не найден!$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Убедитесь, что сервис запущен: make up$(NC)"
@echo "$(YELLOW)Ожидание запуска сервиса...$(NC)"
@sleep 5
python3 app/scripts/test_multi_view_layout.py
@echo "$(GREEN)Тестирование multi-view layout завершено!$(NC)"