# app.py from fastapi import FastAPI from fastapi.responses import HTMLResponse import json from pathlib import Path import psutil # <--- IMPORTANTE: Biblioteca para ler status do sistema app = FastAPI() # ATUALIZE O CAMINHO: O worker agora salva em 'trabalho/stats.json' # Se o seu app.py e o worker.py rodam a partir do mesmo diretório, # este caminho deve estar correto. STATS_FILE = Path("./trabalho/stats.json") @app.get("/", response_class=HTMLResponse) def root(): stats = {} if STATS_FILE.exists(): try: stats = json.loads(STATS_FILE.read_text(encoding='utf-8')) except (json.JSONDecodeError, FileNotFoundError): stats = {} # --- Coleta de Dados --- # Extrai totais GLOBAIS total_paginas = stats.get("total_global_paginas", 0) total_processos = stats.get("total_global_processos", 0) # Extrai ritmo da SESSÃO ritmo = stats.get("ritmo_sessao", {}) default_rate = {"novas_paginas": 0, "novos_processos": 0, "media_pag_min": 0.0, "media_proc_min": 0.0} r5 = ritmo.get("5min", default_rate) r30 = ritmo.get("30min", default_rate) r180 = ritmo.get("180min", default_rate) last_update = stats.get("timestamp_atualizacao", "Aguardando worker...") # NOVO: Coleta de Status do Sistema cpu_usage = psutil.cpu_percent() mem_info = psutil.virtual_memory() disk_info = psutil.disk_usage('/') html_content = f""" Monitor de Extração TJPR

Monitor de Extração TJPR🐝

{total_paginas:,}
Total de Páginas Processadas
{total_processos:,}
Total de Processos Únicos
CPU
{cpu_usage:.1f}%
Memória
{mem_info.percent:.1f}%
Disco
{disk_info.percent:.1f}%

Atividade Recente da Sessão

Intervalo Novas Páginas (Total / Média) Novos Processos (Total / Média)
Últimos 5 min {r5['novas_paginas']:,} ({r5['media_pag_min']:.2f}/min) {r5['novos_processos']:,} ({r5['media_proc_min']:.2f}/min)
Últimos 30 min {r30['novas_paginas']:,} ({r30['media_pag_min']:.2f}/min) {r30['novos_processos']:,} ({r30['media_proc_min']:.2f}/min)
Últimos 3 horas {r180['novas_paginas']:,} ({r180['media_pag_min']:.2f}/min) {r180['novos_processos']:,} ({r180['media_proc_min']:.2f}/min)
""".replace(',', '.') return HTMLResponse(content=html_content)