torxyton's picture
feat: Implementa estrutura completa de testes com pytest
b9c68d4
#!/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())