Adiciona auto-reload do Chromium via CDP por stream

---

- Adicionado scripts/autoreload.sh: loop com reload via WebSocket CDP raw (net + frames manuais), sem dependências externas; trap de SIGTERM encerra limpo sem aguardar o sleep;
- Adicionado [program:autoreload-{{STREAM_ID}}] em stream.template.conf com autostart=false e autorestart=unexpected;
- Adicionados campos AUTO_RELOAD e AUTO_RELOAD_INTERVAL em reprovision.mjs e supervisor.ts (provisionStream);
- Adicionados campos autoReload e autoReloadInterval em src/types/stream.ts;
- Adicionado autoreload nas listas de startStream e stopStream em supervisor.ts; adicionada função applyAutoReload;
- Adicionado endpoint dedicado POST /api/streams/[id]/autoreload: salva, re-provisiona e aplica sem reiniciar o stream inteiro;
- Adicionado toggle + input de intervalo (minutos) no menu de 3 pontos do card em StreamCard.tsx; toggle pill corrigido com posicionamento left absoluto;
- Atualizado README e CHANGELOG com a nova feature;

---
This commit is contained in:
2026-04-27 22:05:41 -03:00
parent 6315cd1312
commit 14094cf5ed
9 changed files with 180 additions and 5 deletions
+12 -3
View File
@@ -63,7 +63,9 @@ export function provisionStream(stream: Stream): void {
THREADS: stream.threads ?? 0,
USER: stream.user ?? "",
PASS: stream.pass ?? "",
GPU_FLAGS: stream.gpu ? "" : " --disable-gpu \\\n",
GPU_FLAGS: stream.gpu ? "" : " --disable-gpu \\\n",
AUTO_RELOAD: stream.autoReload ? "true" : "false",
AUTO_RELOAD_INTERVAL: stream.autoReloadInterval ?? 3600,
}
const confTpl = fs.readFileSync("/opt/scripts/stream.template.conf", "utf-8")
@@ -91,16 +93,23 @@ export function recreateStream(id: string): void {
}
export function startStream(id: string): void {
const programs = ["xvfb", "chromium", "autologin", "x11vnc", "ffmpeg"]
const programs = ["xvfb", "chromium", "autologin", "autoreload", "x11vnc", "ffmpeg"]
for (const p of programs) supervisorctl(`start ${p}-${id}`)
captureThumb(id, 60)
}
export function stopStream(id: string): void {
const programs = ["ffmpeg", "x11vnc", "autologin", "chromium", "xvfb"]
const programs = ["ffmpeg", "x11vnc", "autoreload", "autologin", "chromium", "xvfb"]
for (const p of programs) supervisorctl(`stop ${p}-${id}`)
}
export function applyAutoReload(id: string): void {
const stream = getStream(id)
if (!stream) return
supervisorctl(`stop autoreload-${id}`)
if (stream.autoReload) supervisorctl(`start autoreload-${id}`)
}
export function restartStream(id: string): void {
stopStream(id)
startStream(id)