- Добавлена функция сворачивания/разворачивания секций локальных и удаленных контейнеров - Реализовано периодическое обновление списка контейнеров каждые 30 секунд - Добавлена автоматическая фильтрация остановленных контейнеров - Обновлены обработчики событий для корректной работы в свернутом sidebar - Добавлены функции обновления счетчиков контейнеров - Обновлена документация с описанием новых функций - Добавлены тестовые скрипты для проверки функциональности Автор: Сергей Антропов Сайт: https://devops.org.ru
107 lines
5.4 KiB
Python
107 lines
5.4 KiB
Python
#!/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()
|