#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Тестовый скрипт для проверки исправлений LogBoard+ Server Автор: Сергей Антропов Сайт: https://devops.org.ru """ import requests import json def test_fixes(): """Тестирование исправлений""" 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)}") # Анализируем контейнеры (исключаем demo и test контейнеры) local_containers = [c for c in containers if not c.get('is_remote', False) and not any(x in c['name'].lower() for x in ['demo', 'test'])] remote_containers = [c for c in containers if c.get('is_remote', False) and not any(x in c['name'].lower() for x in ['demo', 'test'])] 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. Тестирование получения логов print(f"\n📝 Тестирование получения логов...") # Тестируем локальный контейнер if local_containers: test_container = local_containers[0] print(f" Тестируем локальный контейнер: {test_container['name']}") response = requests.get(f"{base_url}/api/logs/{test_container['id']}?tail=10", headers=headers) if response.status_code == 200: logs = response.json() print(f" ✅ Логи получены: {len(logs.get('logs', []))} строк") else: print(f" ❌ Ошибка получения логов: {response.status_code}") # Тестируем удаленный контейнер if remote_containers: test_remote_container = remote_containers[0] print(f" Тестируем удаленный контейнер: {test_remote_container['name']}") response = requests.get(f"{base_url}/api/logs/{test_remote_container['id']}?tail=10", headers=headers) if response.status_code == 200: logs = response.json() print(f" ✅ Логи получены: {len(logs.get('logs', []))} строк") else: print(f" ❌ Ошибка получения логов: {response.status_code}") # 4. Тестирование статистики print(f"\n📊 Тестирование статистики...") if local_containers: test_container = local_containers[0] response = requests.get(f"{base_url}/api/logs/stats/{test_container['id']}", headers=headers) if response.status_code == 200: stats = response.json() print(f" ✅ Статистика получена для {test_container['name']}:") print(f" DEBUG: {stats.get('debug', 0)}") print(f" INFO: {stats.get('info', 0)}") print(f" WARN: {stats.get('warn', 0)}") print(f" ERROR: {stats.get('error', 0)}") else: print(f" ❌ Ошибка получения статистики: {response.status_code}") # 5. Проверка структуры данных для tooltip print(f"\n🔍 Проверка структуры данных для tooltip...") for container in local_containers[:2]: # Проверяем первые 2 локальных контейнера print(f" 📍 Локальный контейнер {container['name']}:") print(f" Имя: {container['name']}") print(f" Сервис: {container.get('service', 'N/A')}") print(f" Проект: {container.get('project', 'standalone')}") print(f" Статус: {container['status']}") print(f" Хост: localhost") if container.get('url'): print(f" URL: {container['url']}") if container.get('host_port'): print(f" Порт: {container['host_port']}") for container in remote_containers[:2]: # Проверяем первые 2 удаленных контейнера print(f" 🌐 Удаленный контейнер {container['name']}:") print(f" Имя: {container['name']}") print(f" Сервис: {container.get('service', 'N/A')}") print(f" Проект: {container.get('project', 'remote')}") print(f" Статус: {container['status']}") print(f" Хост: {container.get('hostname', 'unknown')}") if container.get('last_modified'): print(f" Обновлено: {container['last_modified']}") print(f"\n🎉 Тестирование завершено!") print(f"🌐 Откройте http://localhost:9001 в браузере") print(f" 🔽 Проверьте сворачивание секций в sidebar") print(f" 💡 Проверьте tooltip на карточках контейнеров") print(f" 📝 Проверьте отображение логов при клике на карточки") if __name__ == "__main__": test_fixes()