Corrige lentidão do frontend com múltiplos clientes simultâneos

---

- Substituída consulta individual por stream (supervisorctl status {p}-{id} × 5) por uma única chamada supervisorctl status que retorna todos os programas de uma vez, com cache de 3s em fetchAllStatuses();
- Adicionado endpoint GET /api/streams/statuses que retorna os statuses de todos os streams em uma resposta batch;
- Frontend alterado para usar o endpoint batch em vez de N requests paralelos por ciclo de polling;
- Token de sessão HMAC-SHA256 em auth.ts agora é computado uma vez e cacheado no módulo, eliminando operações de crypto a cada requisição;
- Rolling session no middleware limitado a rotas de página, removendo overhead de Set-Cookie em respostas de API e HLS;

---
This commit is contained in:
2026-04-27 10:41:23 -03:00
parent 8046310f27
commit 059807b9ef
5 changed files with 65 additions and 33 deletions
+6
View File
@@ -0,0 +1,6 @@
import { NextResponse } from "next/server"
import { getAllStreamStatuses } from "@/lib/supervisor"
export async function GET() {
return NextResponse.json(getAllStreamStatuses())
}
+3 -8
View File
@@ -135,14 +135,9 @@ export default function GalleryPage() {
const fetchStatuses = useCallback(async (list: Stream[]) => {
if (list.length === 0) return
const results = await Promise.all(
list.map(async (s) => {
const res = await fetch(`/api/streams/${s.id}/status`)
const data = await res.json()
return [s.id, data] as const
})
)
setStatuses(Object.fromEntries(results))
const res = await fetch("/api/streams/statuses")
const data: Record<string, Record<string, string>> = await res.json()
setStatuses(data)
}, [])
useEffect(() => {