--- name: GOL Otimizações 2026-05-04 - cache-guard, watchdog, multipax 9x description: Após fix do gol-solver.service quebrado, 3 otimizações: dedup nao marca fromCache em erro, watchdog systemd checa hasBearer, waitAbckValid 40s→5s acelera multipax 9x type: project originSessionId: da5514be-fbd6-46e5-a3de-cf03a5dda20d --- # GOL Otimizações pós-fix do .service — 2026-05-04 ## 1. Cache-guard no scraper (`/opt/skymilhas/scrapers/gol/service.js`) **Já existia** `if (result.success) cache.set(...)` no fluxo principal — bug real era no dedup, que marcava `fromCache:true` em qualquer resultado pendente, inclusive falhas. Fix: `return res.json(Object.assign({}, result, { fromCache: result.success === true }));` Backup: `service.js.bak-pre-cacheguard-`. Restart isolado: `pm2 restart scraper-gol --update-env`. Outros scrapers não afetados. ## 2. Watchdog systemd (`/opt/gol-solver/watchdog.sh` + timer) Timer roda a cada 1 min, checa `http://127.0.0.1:9092/health`. Se `hasBearer:false` por mais de **120s contínuos** (`THRESHOLD_SECONDS`), `pkill -9 -f gol-solver-profile` + `systemctl restart gol-solver`. Estado em `/var/lib/gol-watchdog/last-bearer-ok` (timestamp Unix do último OK). Logs via `journalctl -t gol-watchdog`. Arquivos instalados na VM ADV-22: - `/opt/gol-solver/watchdog.sh` (755) - `/etc/systemd/system/gol-watchdog.service` (oneshot) - `/etc/systemd/system/gol-watchdog.timer` (OnUnitActiveSec=1min) `systemctl enable --now gol-watchdog.timer` — ativo e enabled. Validado: rodou 1× e logou `ok hasBearer=true`. Parsing de `hasBearer:false` testado isoladamente. **Why:** evitar repetição do crash-loop silencioso (35h sem detecção). Se ExecStart quebrar de novo OU bearer expirar OU Akamai sessão pifar, watchdog reage em 2-3 min. ## 3. waitAbckValid 40s → 5s (gargalo multipax) `/opt/gol-solver/gol-solver.mjs` em `searchInBrowser` chama `waitAbckValid(40000)` esperando cookie `_abck` virar `~0~`. Akamai do GOL **nunca** retorna `~0~` — sempre `~-1~`. Mas `page.evaluate(fetch)` funciona mesmo assim (TLS Chrome real passa o Akamai). Fix: `await waitAbckValid(5000)` no searchInBrowser (mantido `20000` no getBearer, que usa curl externo e precisa do `_abck` válido pra create-token). ### Resultados (rota nova GIG-POA 20/05, sem cache): | Teste | Antes | Depois | Speedup | |---|---|---|---| | OW 1A | 5 s | 5 s | igual | | RT 1A | 5 s | 5 s | igual | | **RT 2A+1C** | **>90 s** | **10 s** | **9×** | | Cache hit qualquer | 17-32 ms | 20 ms | igual | Multipax era o caso bloqueado pelo timeout fixo. OW e RT simples já não esperavam tanto. Backup: `gol-solver.mjs.bak-pre-abck-fast-`. Restart `systemctl restart gol-solver` na VM. ## How to apply (rollback) ```bash # Cache-guard scraper: sudo mv /opt/skymilhas/scrapers/gol/service.js.bak-pre-cacheguard-* /opt/skymilhas/scrapers/gol/service.js sudo pm2 restart scraper-gol --update-env # Watchdog: sudo systemctl disable --now gol-watchdog.timer sudo rm /etc/systemd/system/gol-watchdog.{service,timer} /opt/gol-solver/watchdog.sh /var/lib/gol-watchdog/ sudo systemctl daemon-reload # waitAbckValid (na VM): sudo cp /opt/gol-solver/gol-solver.mjs.bak-pre-abck-fast-* /opt/gol-solver/gol-solver.mjs sudo systemctl restart gol-solver ```