logboard/test_collapse.py
Сергей Антропов 011d460a38 feat: добавлено сворачивание секций и периодическое обновление контейнеров
- Добавлена функция сворачивания/разворачивания секций локальных и удаленных контейнеров
- Реализовано периодическое обновление списка контейнеров каждые 30 секунд
- Добавлена автоматическая фильтрация остановленных контейнеров
- Обновлены обработчики событий для корректной работы в свернутом sidebar
- Добавлены функции обновления счетчиков контейнеров
- Обновлена документация с описанием новых функций
- Добавлены тестовые скрипты для проверки функциональности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-08-20 20:06:33 +03:00

107 lines
5.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Тестовый скрипт для проверки сворачивания секций LogBoard+
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
import requests
import json
def test_collapse_functionality():
"""Тестирование функциональности сворачивания секций"""
base_url = "http://localhost:9001"
# 1. Вход в систему
print("🔐 Вход в систему...")
login_data = {"username": "admin", "password": "admin"}
response = requests.post(f"{base_url}/api/auth/login", json=login_data)
if response.status_code != 200:
print(f"❌ Ошибка входа: {response.status_code}")
return
token = response.json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}
print("✅ Вход выполнен успешно")
# 2. Получение контейнеров
print("\n🐳 Получение контейнеров...")
response = requests.get(f"{base_url}/api/containers/services", headers=headers)
if response.status_code != 200:
print(f"❌ Ошибка получения контейнеров: {response.status_code}")
return
containers = response.json()
print(f"✅ Контейнеров получено: {len(containers)}")
# Анализируем контейнеры
local_containers = [c for c in containers if not c.get('is_remote', False)]
remote_containers = [c for c in containers if c.get('is_remote', False)]
print(f"\n📊 Статистика контейнеров:")
print(f" 📍 Локальные контейнеры: {len(local_containers)}")
for container in local_containers:
print(f"{container['name']} ({container['status']})")
print(f"\n 🌐 Удаленные контейнеры: {len(remote_containers)}")
# Группируем удаленные контейнеры по хостам
containers_by_host = {}
for container in remote_containers:
hostname = container.get('hostname', 'unknown')
if hostname not in containers_by_host:
containers_by_host[hostname] = []
containers_by_host[hostname].append(container)
for hostname, host_containers in containers_by_host.items():
print(f" 🖥️ Хост: {hostname} ({len(host_containers)} контейнеров)")
for container in host_containers:
print(f"{container['name']} ({container['status']})")
# 3. Проверяем, что все контейнеры работающие
stopped_containers = [c for c in containers if c['status'] != 'running']
if stopped_containers:
print(f"\n⚠️ Найдены остановленные контейнеры:")
for container in stopped_containers:
print(f"{container['name']} ({container['status']})")
else:
print(f"\nВсе контейнеры работают (остановленные отфильтрованы)")
# 4. Проверяем структуру данных для сворачивания
print(f"\n🔍 Проверка структуры данных для сворачивания:")
# Проверяем локальные контейнеры
if local_containers:
print(f" 📍 Секция 'Локальные контейнеры' должна содержать {len(local_containers)} контейнеров")
print(f" ID секции: local")
print(f" Кнопка сворачивания: data-target='local'")
print(f" Контент: id='local-content'")
# Проверяем удаленные контейнеры
if remote_containers:
print(f" 🌐 Секция 'Удаленные контейнеры' должна содержать {len(remote_containers)} контейнеров")
print(f" ID секции: remote")
print(f" Кнопка сворачивания: data-target='remote'")
print(f" Контент: id='remote-content'")
# Проверяем секции хостов
for hostname, host_containers in containers_by_host.items():
print(f" 🖥️ Подсекция '{hostname}' должна содержать {len(host_containers)} контейнеров")
print(f" ID секции: host-{hostname}")
print(f" Кнопка сворачивания: data-target='host-{hostname}'")
print(f" Контент: id='host-{hostname}-content'")
print(f"\n🎉 Проверка структуры завершена!")
print(f"🌐 Откройте http://localhost:9001 в браузере")
print(f" 📍 Проверьте, что секции 'Локальные контейнеры' и 'Удаленные контейнеры' можно сворачивать")
print(f" 🖥️ Проверьте, что секции хостов внутри 'Удаленные контейнеры' можно сворачивать")
print(f" ⚡ Проверьте, что остановленные контейнеры не отображаются в интерфейсе")
if __name__ == "__main__":
test_collapse_functionality()