File size: 9,120 Bytes
b9c68d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#!/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())