Spaces:
Sleeping
Sleeping
| #!/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()) |