Realtime Log Streaming with FastAPI and Server-Sent Events
Este projeto de exemplo se utiliza da api EventSource A interface EventSource é usada para receber eventos enviados pelo servidor (server-sent events). Ele se conecta via HTTP em um servidor e recebe eventos com o formato text/event-stream.
A conexão permanece aberta até ser fechada chamando EventSource.close(). Assim que a conexão estiver aberta, mensagens recebidas do servidor são entregues para o seu código na forma de eventos message. Ao contrário dos WebSockets, server-sent events são unidirecionais; ou seja, mensagens são entregues em uma direção, do servidor para o cliente (por exemplo, um navegador web). Isso torna-os uma excelente escolha quando não há necessidade de enviar mensagens do cliente para o servidor.
Como executar o exemplo?
Requisitos: poetry instalado.
cd SSELoggerDemo
poetry shell
poetry install
Abra um outro terminal, também ative-o com o comando:
poetry shell
uvicorn app.main:app --reload --port 8000
Se acessar o endereço http://127.0.0.1:8000/docs você verá a documentação das rotas criadas.
- A rota http://127.0.0.1:8000/stream-logs fica lendo o arquivo de log:
import psutil
import platform
from datetime import datetime
import time
import asyncio
import json
async def main():
# it = 0
while True:
# cpu_contagem = psutil.cpu_count(logical=False)
# cpu_nucleos = psutil.cpu_count(logical=True)
# dict_cpu = {"contagem": cpu_contagem, "nucleos": cpu_nucleos,
# "porcentagem": cpu_porcentagem}
cpu_porcentagem = psutil.cpu_percent()
dict_cpu = {"porcentagem": cpu_porcentagem * 10.}
yield {
"event": "msg_cpu",
"retry": 3000, # tempo de reconexão - 3000 ms
"data": json.dumps(dict_cpu),
}
await asyncio.sleep(0.5)
Exemplo 02
Texto do Exemplo 02
Exemplo 03
Texto do Exemplo 02