feat: Implementa job de ranking para 300k consultores
Backend: - Adiciona Scroll API no cliente Elasticsearch para processar todos os 300k+ consultores - Cria tabela TB_RANKING_CONSULTOR no Oracle para ranking pré-calculado - Implementa job de processamento com APScheduler (diário às 3h) - Adiciona endpoints: /ranking/paginado, /ranking/status, /ranking/processar, /ranking/estatisticas - Repository Oracle com paginação eficiente via ROW_NUMBER - Status do job com progresso em tempo real (polling) - Leitura automática de LOBs no OracleClient Frontend: - Componente RankingPaginado com paginação completa - Barra de progresso do job em tempo real - Botão para reprocessar ranking - Alternância entre Top N (rápido) e Ranking Completo (300k) Infraestrutura: - Docker compose com depends_on para garantir Oracle disponível - Schema SQL com procedure SP_ATUALIZAR_POSICOES - Índices otimizados para paginação
This commit is contained in:
@@ -4,7 +4,8 @@ from contextlib import asynccontextmanager
|
||||
|
||||
from .routes import router
|
||||
from .config import settings
|
||||
from .dependencies import es_client, oracle_client
|
||||
from .dependencies import es_client, oracle_client, get_processar_job
|
||||
from ...application.jobs.scheduler import RankingScheduler
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
@@ -14,7 +15,24 @@ async def lifespan(app: FastAPI):
|
||||
oracle_client.connect()
|
||||
except Exception as e:
|
||||
print(f"AVISO: Oracle não conectou: {e}. Sistema rodando sem Coordenação PPG.")
|
||||
|
||||
scheduler = None
|
||||
try:
|
||||
job = get_processar_job()
|
||||
scheduler = RankingScheduler(job)
|
||||
scheduler.iniciar()
|
||||
print("Scheduler do ranking iniciado: job rodará diariamente às 3h")
|
||||
except Exception as e:
|
||||
print(f"AVISO: Scheduler não iniciou: {e}")
|
||||
|
||||
yield
|
||||
|
||||
if scheduler:
|
||||
try:
|
||||
scheduler.parar()
|
||||
except:
|
||||
pass
|
||||
|
||||
await es_client.close()
|
||||
try:
|
||||
oracle_client.close()
|
||||
|
||||
Reference in New Issue
Block a user