# 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
{total_paginas:,}
Total de Páginas Processadas
{total_processos:,}
Total de Processos Únicos
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)