#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Тестовый скрипт для проверки нового интерфейса LogBoard+ Автор: Сергей Антропов Сайт: https://devops.org.ru """ import requests import json from datetime import datetime def test_interface(): """Тестирование нового интерфейса с разделением локальных и удаленных контейнеров""" 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/projects", headers=headers) if response.status_code != 200: print(f"❌ Ошибка получения проектов: {response.status_code}") return projects = response.json() print(f"✅ Проектов получено: {len(projects)}") # Показываем удаленные проекты remote_projects = [p for p in projects if p.startswith('remote-')] local_projects = [p for p in projects if not p.startswith('remote-')] print(f" 📍 Локальные проекты: {len(local_projects)}") for project in local_projects[:5]: # Показываем первые 5 print(f" • {project}") if len(local_projects) > 5: print(f" ... и еще {len(local_projects) - 5}") print(f" 🌐 Удаленные проекты: {len(remote_projects)}") for project in remote_projects: hostname = project.replace('remote-', '') print(f" • {project} (хост: {hostname})") # 3. Получение контейнеров 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[:3]: # Показываем первые 3 print(f" • {container['name']} ({container['status']}) - {container.get('project', 'standalone')}") if len(local_containers) > 3: print(f" ... и еще {len(local_containers) - 3}") 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[:2]: # Показываем первые 2 с каждого хоста last_update = "" if container.get('last_modified'): last_update = f" (обновлено: {datetime.fromtimestamp(container['last_modified']).strftime('%H:%M:%S')})" print(f" • {container['name']} ({container['status']}){last_update}") if len(host_containers) > 2: print(f" ... и еще {len(host_containers) - 2}") # 4. Тестирование получения логов удаленного контейнера if remote_containers: print(f"\n📝 Тестирование получения логов удаленного контейнера...") test_container = remote_containers[0] container_id = test_container['id'] response = requests.get(f"{base_url}/api/logs/{container_id}?tail=3", headers=headers) if response.status_code == 200: logs_data = response.json() print(f"✅ Логи получены для {test_container['name']} (хост: {test_container['hostname']})") print(f" Количество строк: {len(logs_data.get('logs', []))}") print(f" Флаг is_remote: {logs_data.get('is_remote', False)}") # Показываем последние логи logs = logs_data.get('logs', []) if logs: print(f" Последние логи:") for log in logs[-2:]: # Показываем последние 2 строки timestamp = log.get('timestamp', '')[:19] # Обрезаем до секунд message = log.get('message', '')[:80] # Обрезаем длинные сообщения print(f" [{timestamp}] {message}") else: print(f"❌ Ошибка получения логов: {response.status_code}") # 5. Тестирование статистики логов if remote_containers: print(f"\n📊 Тестирование статистики логов...") test_container = remote_containers[0] container_id = test_container['id'] response = requests.get(f"{base_url}/api/logs/stats/{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}") print(f"\n🎉 Тестирование завершено!") print(f"🌐 Откройте http://localhost:9001 в браузере для просмотра нового интерфейса") if __name__ == "__main__": test_interface()