89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
# Ajuste para garantir que o diretório base do projeto seja incluído no PYTHONPATH
|
|
import os
|
|
import sys
|
|
|
|
# Adiciona o diretório atual (onde está o main.py) ao sys.path
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|
|
|
# Importa a classe principal do FastAPI
|
|
from fastapi import FastAPI, Request
|
|
from pathlib import Path
|
|
# Importa o middleware de CORS
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import Response
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
|
|
# Importa o roteador principal da API versão 1
|
|
from packages.v1.api import api_router
|
|
from packages.v1.system.service.startup_check_service import \
|
|
StartupCheckService
|
|
|
|
# Importa as configurações globais da aplicação
|
|
from actions.log.log import Log
|
|
from actions.config.config import Config
|
|
from actions.system.handlers import register_exception_handlers
|
|
|
|
config = Config.get('app.json')
|
|
|
|
# Instancia o app FastAPI com um título personalizado
|
|
app = FastAPI(title='Monitoramento Orius')
|
|
|
|
# Controle de erros personalizados
|
|
register_exception_handlers(app)
|
|
|
|
# Adiciona o middleware de CORS
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["http://localhost:3000"], # Domínio do frontend
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
@app.on_event("startup")
|
|
async def on_startup():
|
|
|
|
# Realiza as verificações do servidor
|
|
startupCheckService = StartupCheckService()
|
|
|
|
# Exibe o amarzenamento do servidor
|
|
print(startupCheckService.execute())
|
|
|
|
@app.middleware("http")
|
|
async def log_tempo_requisicao(request: Request, call_next):
|
|
|
|
# Ação responsavel por registrar o log de requisição
|
|
log = Log()
|
|
config = Config.get('app.json')
|
|
|
|
# Obtem os dados da requisição
|
|
log_data = {
|
|
"method": request.method,
|
|
"url": str(request.url),
|
|
"headers": dict(request.headers)
|
|
}
|
|
|
|
# Gera o nome do arquivo
|
|
file = Path(config.log.request.path) / config.log.request.name
|
|
|
|
# Registra as requisições
|
|
log.register(log_data, file)
|
|
|
|
# Passa adiante
|
|
response = await call_next(request)
|
|
|
|
return response
|
|
|
|
# Inclui as rotas da versão 1 da API com prefixo definido em settings (ex: /api/v1)
|
|
app.include_router(api_router, prefix=config.url)
|
|
|
|
# Executa o servidor com Uvicorn se este arquivo for executado diretamente
|
|
if __name__ == '__main__':
|
|
import uvicorn
|
|
uvicorn.run(
|
|
"main:app", # Caminho do app para execução
|
|
host="0.0.0.0", # Disponibiliza a aplicação externamente
|
|
port=8000, # Porta padrão
|
|
log_level='info', # Define o nível de log para desenvolvimento
|
|
reload=True # Ativa auto-reload durante desenvolvimento
|
|
)
|