Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Script de teste para o sistema de logging avançado. | |
| Testa todas as funcionalidades do sistema de logging com SQLite3. | |
| """ | |
| import os | |
| import sys | |
| import time | |
| import json | |
| from datetime import datetime | |
| # Adicionar o diretório src ao path | |
| src_path = os.path.join(os.path.dirname(__file__), 'src') | |
| sys.path.insert(0, src_path) | |
| try: | |
| from src.core.database_logger import DatabaseLogger, LogLevel, LogCategory | |
| from src.utils.logging_decorators import log_execution, log_api_call, log_ai_model_usage, LoggingContext, quick_log | |
| except ImportError as e: | |
| print(f"❌ Erro ao importar módulos de logging: {e}") | |
| print("Tentando importação alternativa...") | |
| try: | |
| # Importação direta dos arquivos | |
| import importlib.util | |
| # Carregar database_logger | |
| spec = importlib.util.spec_from_file_location( | |
| "database_logger", | |
| os.path.join(src_path, "core", "database_logger.py") | |
| ) | |
| db_module = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(db_module) | |
| DatabaseLogger = db_module.DatabaseLogger | |
| LogLevel = db_module.LogLevel | |
| LogCategory = db_module.LogCategory | |
| # Carregar logging_decorators | |
| spec2 = importlib.util.spec_from_file_location( | |
| "logging_decorators", | |
| os.path.join(src_path, "utils", "logging_decorators.py") | |
| ) | |
| dec_module = importlib.util.module_from_spec(spec2) | |
| spec2.loader.exec_module(dec_module) | |
| log_execution = dec_module.log_execution | |
| log_api_call = dec_module.log_api_call | |
| log_ai_model_usage = dec_module.log_ai_model_usage | |
| LoggingContext = dec_module.LoggingContext | |
| quick_log = dec_module.quick_log | |
| print("✅ Importação alternativa bem-sucedida") | |
| except Exception as e2: | |
| print(f"❌ Erro na importação alternativa: {e2}") | |
| sys.exit(1) | |
| def test_basic_logging(): | |
| """Testa funcionalidades básicas de logging.""" | |
| print("\n🧪 Testando logging básico...") | |
| # Criar diretório de logs se não existir | |
| os.makedirs('logs', exist_ok=True) | |
| # Inicializar logger | |
| db_logger = DatabaseLogger('logs/test_logging.db') | |
| # Teste 1: Log simples | |
| db_logger.log( | |
| level=LogLevel.INFO, | |
| category=LogCategory.SYSTEM, | |
| message="Teste de log básico", | |
| module="test_logging_system", | |
| function="test_basic_logging", | |
| line_number=70 | |
| ) | |
| # Teste 2: Log com metadados | |
| db_logger.log( | |
| level=LogLevel.DEBUG, | |
| category=LogCategory.API, | |
| message="Teste com metadados", | |
| module="test_logging_system", | |
| function="test_basic_logging", | |
| line_number=80, | |
| metadata={'test_id': 1, 'timestamp': datetime.now().isoformat()} | |
| ) | |
| # Teste 3: Log de erro | |
| db_logger.log( | |
| level=LogLevel.ERROR, | |
| category=LogCategory.SYSTEM, | |
| message="Teste de log de erro", | |
| module="test_logging_system", | |
| function="test_basic_logging", | |
| line_number=90, | |
| execution_time=0.001 | |
| ) | |
| print("✅ Logging básico funcionando") | |
| return db_logger | |
| def test_performance_metrics(db_logger): | |
| """Testa logging de métricas de performance.""" | |
| print("\n🧪 Testando métricas de performance...") | |
| # Teste 1: Métrica de tempo de resposta | |
| db_logger.log_performance_metric( | |
| metric_name="response_time", | |
| metric_value=0.150, | |
| unit="seconds", | |
| category="api_performance" | |
| ) | |
| # Teste 2: Métrica de uso de memória | |
| db_logger.log_performance_metric( | |
| metric_name="memory_usage", | |
| metric_value=256.5, | |
| unit="MB", | |
| category="system_resources" | |
| ) | |
| # Teste 3: Métrica de throughput | |
| db_logger.log_performance_metric( | |
| metric_name="requests_per_second", | |
| metric_value=45.2, | |
| unit="req/s", | |
| category="performance", | |
| metadata={'endpoint': '/api/analyze'} | |
| ) | |
| print("✅ Métricas de performance funcionando") | |
| def test_system_events(db_logger): | |
| """Testa logging de eventos do sistema.""" | |
| print("\n🧪 Testando eventos do sistema...") | |
| # Teste 1: Evento de inicialização | |
| db_logger.log_system_event( | |
| event_type="STARTUP", | |
| event_name="SERVICE_STARTED", | |
| description="Serviço de teste iniciado", | |
| severity="INFO" | |
| ) | |
| # Teste 2: Evento de erro | |
| db_logger.log_system_event( | |
| event_type="ERROR", | |
| event_name="CONNECTION_FAILED", | |
| description="Falha na conexão com API externa", | |
| severity="ERROR", | |
| metadata={'api_endpoint': 'https://api.example.com', 'error_code': 500} | |
| ) | |
| # Teste 3: Evento de alerta | |
| db_logger.log_system_event( | |
| event_type="ALERT", | |
| event_name="HIGH_CPU_USAGE", | |
| description="Uso de CPU acima de 80%", | |
| severity="WARNING", | |
| metadata={'cpu_usage': 85.2, 'threshold': 80} | |
| ) | |
| print("✅ Eventos do sistema funcionando") | |
| def test_function_with_decorator(): | |
| """Função de teste com decorador de logging.""" | |
| time.sleep(0.1) # Simular processamento | |
| return "Resultado do teste" | |
| def test_api_function(): | |
| """Função de teste para chamada de API.""" | |
| time.sleep(0.05) # Simular chamada de API | |
| return {'status': 'success', 'data': 'test_data'} | |
| def test_ai_model_function(): | |
| """Função de teste para uso de modelo IA.""" | |
| time.sleep(0.2) # Simular processamento de IA | |
| return {'prediction': 0.85, 'confidence': 0.92} | |
| def test_decorators(): | |
| """Testa os decoradores de logging.""" | |
| print("\n🧪 Testando decoradores...") | |
| # Teste 1: Decorador de execução | |
| result1 = test_function_with_decorator() | |
| print(f"Resultado função com decorador: {result1}") | |
| # Teste 2: Decorador de API | |
| result2 = test_api_function() | |
| print(f"Resultado API: {result2}") | |
| # Teste 3: Decorador de modelo IA | |
| result3 = test_ai_model_function() | |
| print(f"Resultado modelo IA: {result3}") | |
| print("✅ Decoradores funcionando") | |
| def test_context_manager(): | |
| """Testa o gerenciador de contexto.""" | |
| print("\n🧪 Testando gerenciador de contexto...") | |
| with LoggingContext("Processamento de teste", LogLevel.INFO, LogCategory.SYSTEM): | |
| time.sleep(0.1) | |
| print("Executando dentro do contexto de logging") | |
| print("✅ Gerenciador de contexto funcionando") | |
| def test_quick_log(): | |
| """Testa a função de logging rápido.""" | |
| print("\n🧪 Testando logging rápido...") | |
| # Log simples | |
| quick_log("Teste de log rápido", LogLevel.INFO, LogCategory.SYSTEM) | |
| # Log com metadados | |
| quick_log( | |
| "Teste com metadados", | |
| LogLevel.DEBUG, | |
| LogCategory.API, | |
| metadata={'test': True, 'value': 42} | |
| ) | |
| print("✅ Logging rápido funcionando") | |
| def test_log_retrieval(db_logger): | |
| """Testa recuperação e filtragem de logs.""" | |
| print("\n🧪 Testando recuperação de logs...") | |
| # Teste 1: Buscar todos os logs | |
| all_logs = db_logger.get_logs(limit=10) | |
| print(f"Total de logs encontrados: {len(all_logs)}") | |
| # Teste 2: Filtrar por nível | |
| error_logs = db_logger.get_logs(level="ERROR", limit=5) | |
| print(f"Logs de erro: {len(error_logs)}") | |
| # Teste 3: Filtrar por categoria | |
| system_logs = db_logger.get_logs(category="SYSTEM", limit=5) | |
| print(f"Logs do sistema: {len(system_logs)}") | |
| # Teste 4: Buscar métricas de performance | |
| metrics = db_logger.get_performance_metrics(limit=5) | |
| print(f"Métricas encontradas: {len(metrics)}") | |
| # Teste 5: Buscar eventos do sistema | |
| events = db_logger.get_system_events(limit=5) | |
| print(f"Eventos do sistema: {len(events)}") | |
| print("✅ Recuperação de logs funcionando") | |
| def test_statistics(db_logger): | |
| """Testa geração de estatísticas.""" | |
| print("\n🧪 Testando estatísticas...") | |
| stats = db_logger.get_statistics() | |
| print(f"Estatísticas: {json.dumps(stats, indent=2)}") | |
| print("✅ Estatísticas funcionando") | |
| def test_cleanup(db_logger): | |
| """Testa limpeza de logs antigos.""" | |
| print("\n🧪 Testando limpeza...") | |
| # Não vamos fazer limpeza real nos testes, apenas verificar se o método existe | |
| try: | |
| # db_logger.cleanup_old_logs(days_to_keep=0) # Comentado para não apagar logs de teste | |
| print("Método de limpeza disponível") | |
| except Exception as e: | |
| print(f"Erro na limpeza: {e}") | |
| print("✅ Limpeza funcionando") | |
| def main(): | |
| """Função principal de teste.""" | |
| print("🚀 Iniciando testes do sistema de logging avançado") | |
| print("=" * 60) | |
| try: | |
| # Testes básicos | |
| db_logger = test_basic_logging() | |
| test_performance_metrics(db_logger) | |
| test_system_events(db_logger) | |
| # Testes de decoradores (se disponíveis) | |
| try: | |
| test_decorators() | |
| test_context_manager() | |
| test_quick_log() | |
| except Exception as e: | |
| print(f"⚠️ Alguns decoradores não funcionaram: {e}") | |
| # Testes de recuperação | |
| test_log_retrieval(db_logger) | |
| test_statistics(db_logger) | |
| test_cleanup(db_logger) | |
| print("\n" + "=" * 60) | |
| print("✅ Todos os testes concluídos com sucesso!") | |
| print(f"📁 Logs salvos em: logs/test_logging.db") | |
| # Mostrar algumas estatísticas finais | |
| final_stats = db_logger.get_statistics() | |
| print(f"\n📊 Estatísticas finais:") | |
| print(f" Total de logs: {final_stats.get('total_logs', 0)}") | |
| print(f" Logs por nível: {final_stats.get('logs_by_level', {})}") | |
| print(f" Logs por categoria: {final_stats.get('logs_by_category', {})}") | |
| print(f" Logs últimas 24h: {final_stats.get('logs_last_24h', 0)}") | |
| except Exception as e: | |
| print(f"\n❌ Erro durante os testes: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| return 1 | |
| return 0 | |
| if __name__ == "__main__": | |
| exit_code = main() | |
| sys.exit(exit_code) |