#!/usr/bin/env python3 """ Script de Demonstração - Análise de Logs Este script demonstra como usar os analisadores de log e fornece exemplos práticos de uso para desenvolvedores. Autor: Sistema de Análise de Mercado Versão: 1.0.0 """ import os import sys import time import subprocess from pathlib import Path def print_header(title: str): """Imprime cabeçalho formatado""" print("\n" + "="*60) print(f" {title}") print("="*60) def print_step(step: str, description: str): """Imprime passo da demonstração""" print(f"\n🔹 {step}: {description}") print("-" * 50) def run_command(command: list, description: str = ""): """Executa comando e mostra resultado""" if description: print(f"\n💻 Executando: {description}") print(f"Comando: {' '.join(command)}") print("\nSaída:") print("-" * 30) try: result = subprocess.run(command, capture_output=True, text=True, cwd=Path(__file__).parent.parent.parent) if result.stdout: print(result.stdout) if result.stderr: print(f"⚠️ Avisos/Erros:\n{result.stderr}") if result.returncode != 0: print(f"❌ Comando falhou com código: {result.returncode}") else: print("✅ Comando executado com sucesso") except Exception as e: print(f"❌ Erro ao executar comando: {str(e)}") print("-" * 30) def check_prerequisites(): """Verifica se os pré-requisitos estão atendidos""" print_header("VERIFICAÇÃO DE PRÉ-REQUISITOS") # Verifica se estamos no diretório correto current_dir = Path.cwd() expected_files = ['app.py', 'config.py', 'logs'] print(f"📁 Diretório atual: {current_dir}") missing_files = [] for file in expected_files: if not (current_dir / file).exists(): missing_files.append(file) if missing_files: print(f"❌ Arquivos/diretórios não encontrados: {', '.join(missing_files)}") print("💡 Execute este script a partir do diretório raiz do projeto") return False # Verifica se o banco de logs existe log_db = current_dir / 'logs' / 'application.db' if not log_db.exists(): print(f"⚠️ Banco de logs não encontrado: {log_db}") print("💡 Execute a aplicação primeiro para gerar logs") return False print("✅ Todos os pré-requisitos atendidos") return True def demo_basic_analysis(): """Demonstra análise básica de logs""" print_header("DEMONSTRAÇÃO: ANÁLISE BÁSICA DE LOGS") print_step("1", "Análise das últimas 2 horas") run_command([ sys.executable, "scripts/log_analysis/advanced_log_analyzer.py", "--hours", "2" ], "Análise básica das últimas 2 horas") print_step("2", "Análise silenciosa (apenas resumo)") run_command([ sys.executable, "scripts/log_analysis/advanced_log_analyzer.py", "--hours", "1", "--quiet" ], "Modo silencioso") def demo_export_features(): """Demonstra recursos de exportação""" print_header("DEMONSTRAÇÃO: RECURSOS DE EXPORTAÇÃO") print_step("1", "Exportação para arquivo de texto") run_command([ sys.executable, "scripts/log_analysis/advanced_log_analyzer.py", "--hours", "1", "--output", "demo_report.txt" ], "Salvando relatório em arquivo") # Mostra conteúdo do arquivo gerado report_file = Path("demo_report.txt") if report_file.exists(): print("\n📄 Conteúdo do relatório gerado:") with open(report_file, 'r', encoding='utf-8') as f: content = f.read() # Mostra apenas as primeiras 20 linhas lines = content.split('\n')[:20] print('\n'.join(lines)) if len(content.split('\n')) > 20: print("\n... (conteúdo truncado)") print_step("2", "Exportação para JSON") run_command([ sys.executable, "scripts/log_analysis/advanced_log_analyzer.py", "--hours", "1", "--json", "demo_analysis.json", "--quiet" ], "Exportando dados em JSON") # Mostra estrutura do JSON json_file = Path("demo_analysis.json") if json_file.exists(): print("\n📊 Estrutura do JSON gerado:") import json with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) print(f" - total_logs: {data.get('total_logs', 0)}") print(f" - by_level: {dict(list(data.get('by_level', {}).items())[:3])}...") print(f" - errors: {len(data.get('errors', []))} entradas") print(f" - warnings: {len(data.get('warnings', []))} entradas") def demo_realtime_monitor(): """Demonstra monitor em tempo real (simulação)""" print_header("DEMONSTRAÇÃO: MONITOR EM TEMPO REAL") print("\n🔍 O monitor em tempo real seria executado com:") print("python scripts/log_analysis/realtime_monitor.py") print("\n💡 Para esta demonstração, vamos simular com verificação única:") print_step("1", "Simulação de monitoramento") print("\n⏱️ Em um cenário real, o monitor ficaria ativo continuamente...") print("🔄 Verificando logs a cada 5 segundos...") print("🚨 Alertando sobre problemas críticos...") print("📊 Mostrando estatísticas em tempo real...") print("\n🛑 Para parar o monitor real, use Ctrl+C") print("\n📋 Comandos úteis do monitor:") print(" --verbose : Mostra todos os logs") print(" --interval 10: Verifica a cada 10 segundos") print(" --threshold 3: Máximo 3 alertas por verificação") def demo_practical_examples(): """Mostra exemplos práticos de uso""" print_header("EXEMPLOS PRÁTICOS DE USO") examples = [ { "title": "Debugging após deploy", "command": "python scripts/log_analysis/advanced_log_analyzer.py --hours 1 --output deploy_check.txt", "description": "Analisa logs da última hora após um deploy" }, { "title": "Monitoramento de desenvolvimento", "command": "python scripts/log_analysis/realtime_monitor.py --verbose --interval 3", "description": "Monitor detalhado durante desenvolvimento" }, { "title": "Relatório semanal", "command": "python scripts/log_analysis/advanced_log_analyzer.py --hours 168 --json weekly_report.json", "description": "Gera relatório JSON da semana completa" }, { "title": "Verificação rápida de erros", "command": "python scripts/log_analysis/advanced_log_analyzer.py --hours 6 --quiet", "description": "Verificação silenciosa das últimas 6 horas" } ] for i, example in enumerate(examples, 1): print(f"\n{i}. {example['title']}") print(f" Comando: {example['command']}") print(f" Uso: {example['description']}") def cleanup_demo_files(): """Remove arquivos de demonstração""" demo_files = ['demo_report.txt', 'demo_analysis.json'] print("\n🧹 Limpando arquivos de demonstração...") for file in demo_files: file_path = Path(file) if file_path.exists(): file_path.unlink() print(f" ✅ Removido: {file}") else: print(f" ℹ️ Não encontrado: {file}") def main(): """Função principal da demonstração""" print_header("DEMONSTRAÇÃO DOS SCRIPTS DE ANÁLISE DE LOGS") print("\n🎯 Esta demonstração mostra como usar os scripts de análise de logs") print("📚 Consulte o README.md para documentação completa") # Verifica pré-requisitos if not check_prerequisites(): print("\n❌ Não é possível continuar sem os pré-requisitos") return 1 try: # Executa demonstrações demo_basic_analysis() demo_export_features() demo_realtime_monitor() demo_practical_examples() print_header("DEMONSTRAÇÃO CONCLUÍDA") print("\n✅ Todos os exemplos foram executados com sucesso!") print("\n📖 Próximos passos:") print(" 1. Leia o README.md para mais detalhes") print(" 2. Execute os scripts com seus próprios parâmetros") print(" 3. Integre os scripts em seu workflow de desenvolvimento") # Pergunta sobre limpeza response = input("\n🗑️ Deseja remover os arquivos de demonstração? (s/N): ") if response.lower() in ['s', 'sim', 'y', 'yes']: cleanup_demo_files() return 0 except KeyboardInterrupt: print("\n\n🛑 Demonstração interrompida pelo usuário") return 1 except Exception as e: print(f"\n❌ Erro durante demonstração: {str(e)}") return 1 if __name__ == "__main__": exit(main())