#!/usr/bin/env python3 """ Тестовый скрипт для проверки работы LogBoard клиента Автор: Сергей Антропов Сайт: https://devops.org.ru """ import asyncio import aiohttp import json import os from datetime import datetime # Конфигурация теста SERVER_URL = os.getenv('LOGBOARD_SERVER_URL', 'http://localhost:8000') API_KEY = os.getenv('LOGBOARD_API_KEY', 'dev-key-123') HOSTNAME = os.getenv('HOSTNAME', 'test-host') async def test_remote_logs_endpoint(): """Тестирование эндпоинта для удаленных логов""" print(f"Тестирование подключения к серверу: {SERVER_URL}") # Тестовые данные test_data = { "hostname": HOSTNAME, "container_name": "test-nginx", "logs": [ f"{datetime.now().isoformat()} nginx: [info] Test log line 1", f"{datetime.now().isoformat()} nginx: [info] Test log line 2", f"{datetime.now().isoformat()} nginx: [error] Test error log", f"{datetime.now().isoformat()} nginx: [warn] Test warning log" ], "timestamp": datetime.now().isoformat() } headers = { 'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json', 'User-Agent': 'LogBoard-Client-Test/1.0' } try: async with aiohttp.ClientSession() as session: async with session.post( f"{SERVER_URL}/api/v1/logs/remote", json=test_data, headers=headers, timeout=aiohttp.ClientTimeout(total=30) ) as response: print(f"Статус ответа: {response.status}") if response.status == 200: result = await response.json() print("✅ Успешно отправлены логи:") print(f" - Хост: {result.get('hostname')}") print(f" - Контейнер: {result.get('container_name')}") print(f" - Количество строк: {result.get('message')}") print(f" - Файл логов: {result.get('log_file')}") return True else: error_text = await response.text() print(f"❌ Ошибка отправки логов: {response.status}") print(f" Ответ сервера: {error_text}") return False except aiohttp.ClientError as e: print(f"❌ Ошибка подключения к серверу: {e}") return False except Exception as e: print(f"❌ Неожиданная ошибка: {e}") return False async def test_server_health(): """Тестирование доступности сервера""" print(f"Проверка доступности сервера: {SERVER_URL}") try: async with aiohttp.ClientSession() as session: async with session.get( f"{SERVER_URL}/", timeout=aiohttp.ClientTimeout(total=10) ) as response: if response.status == 200: print("✅ Сервер доступен") return True else: print(f"❌ Сервер недоступен, статус: {response.status}") return False except Exception as e: print(f"❌ Ошибка подключения к серверу: {e}") return False async def main(): """Основная функция тестирования""" print("=" * 60) print("LogBoard Client - Тестирование") print("=" * 60) print(f"Сервер: {SERVER_URL}") print(f"API ключ: {API_KEY[:10]}..." if len(API_KEY) > 10 else f"API ключ: {API_KEY}") print(f"Хост: {HOSTNAME}") print() # Тест 1: Проверка доступности сервера print("1. Проверка доступности сервера...") server_available = await test_server_health() print() if not server_available: print("❌ Сервер недоступен. Проверьте настройки и запустите сервер.") return # Тест 2: Отправка тестовых логов print("2. Отправка тестовых логов...") logs_sent = await test_remote_logs_endpoint() print() # Результаты тестирования print("=" * 60) print("РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ") print("=" * 60) if server_available and logs_sent: print("✅ Все тесты пройдены успешно!") print(" LogBoard клиент готов к работе.") elif server_available and not logs_sent: print("⚠️ Сервер доступен, но есть проблемы с отправкой логов.") print(" Проверьте настройки API ключа.") else: print("❌ Тесты не пройдены.") print(" Проверьте настройки подключения к серверу.") print() print("Для запуска клиента используйте: make up") print("Для просмотра логов: make logs") if __name__ == "__main__": asyncio.run(main())