# Captura do gráfico "Perfil de Desempenho" (Playwright) — relatório ARS

O relatório ARS embute o gráfico **Perfil de Desempenho** no DOCX. O gráfico é
capturado do **sistema real** (Highcharts) pela rota por token própria do ARS:

```
{BASE}/site/grafico-perfil-desempenho-coleta-token?token={TOKEN}&contexto_id={ID}&aplicacao_id={APP}&coleta_id={COLETA}
```

onde `TOKEN = md5('gledson' . date('dmY'))` (o próprio controller valida). Se o
`coleta_id` não pertencer ao contexto/aplicação, a rota usa a última coleta com data.

A rota antiga `site/grafico-perfil-desempenho-token` (sempre a coleta mais antiga)
continua intacta porque pode estar em uso por wildcards.

## Como funciona (no servidor)

`AnexoController::arsGerarGraficoPerfilDesempenho()` chama
`arsCapturarPerfilPlaywright()`, que procura um Node >= 14 (`ARS_NODE_BIN`,
`/opt/node*/bin/node` ou o `node` do PATH), roda `capture.js` e devolve o PNG.
**Não há fallback**: se Node/Playwright faltar ou a captura falhar, o DOCX mostra
"Erro ao gerar a imagem". O motivo fica em `runtime/ars/playwright_last.log`
(`CAPTURE_SEM_NODE`, `CAPTURE_SEM_PLAYWRIGHT`, `CAPTURE_SEM_COLETA`, ...).

## Instalar no servidor (Debian/Ubuntu — uma vez por servidor)

```bash
cd /var/www/html/accia/charts/perfil-desempenho
sudo bash instalar-playwright.sh
# com teste de captura:
sudo ARS_TESTE_CONTEXTO=<id> ARS_TESTE_APLICACAO=<id> bash instalar-playwright.sh
```

O script (feito para servidor de produção compartilhado):
- **Node sem apt**: tarball oficial `v20.20.2` em `/opt/node-v20.20.2-linux-x64`
  (SHA256 conferido), fora do PATH — o PHP já procura `/opt/node*/bin/node`;
- `npm ci` (Playwright fixado no `package-lock.json`);
- bibliotecas do Chromium: **simula** (`playwright install-deps --dry-run` +
  `apt-get -s`), mostra pacotes novos/atualizados, **recusa atualizar** pacotes já
  instalados (salvo `ARS_PERMITIR_UPGRADE=1`) e instala só o que falta com
  `--no-install-recommends`;
- `NEEDRESTART_SUSPEND=1` / `NEEDRESTART_MODE=l`: **nenhum serviço é reiniciado**
  (ao final só lista os que precisariam de restart);
- pede confirmação ("sim") antes de baixar/instalar (`ARS_CONFIRMAR=sim` pula);
- Chromium baixado em `/ms-playwright` (`npx playwright install chromium`, sem apt);
- opcionalmente testa a captura como `www-data` → `/tmp/perfil_<contexto>.png`.

> **Nunca** use `npx playwright install --with-deps` nem `apt install nodejs npm`
> em produção: o primeiro instala/atualiza pacotes sem controle (atualizou a glib
> no server4 e o needrestart reiniciou o Apache); o segundo puxa centenas de
> pacotes (compiladores, `javascript-common` com alias `/javascript` global).

> **Importante**: o Apache roda como `www-data`; por isso os browsers ficam em
> `/ms-playwright` (o helper do PHP já usa esse caminho). Instalar só em
> `/root/.cache` não funciona → o DOCX sai com "Erro ao gerar a imagem".

## Testar a captura manualmente

```bash
cd /var/www/html/accia/charts/perfil-desempenho
TOKEN=$(php -r "echo md5('gledson' . date('dmY'));")
sudo -u www-data env PLAYWRIGHT_BROWSERS_PATH=/ms-playwright node capture.js \
  --url "https://app.accia.com.br/site/grafico-perfil-desempenho-coleta-token?token=${TOKEN}&contexto_id=<id>&aplicacao_id=<id>" \
  --out /tmp/perfil.png \
  --width 1280 --height 720 --dsf 2 --wait 4500
```

## Pré-requisitos / observações

- **Node >= 18** (exigido pelo Playwright do lock). PHP precisa de `shell_exec`.
- O Chromium roda com `--no-sandbox`.
- O host da URL vem do `hostInfo` da requisição (em produção
  `https://app.accia.com.br`); em CLI use `ARS_BASE_URL`.
- O gráfico capturado é o elemento `#perfilDesempenho` (Highcharts) da rota de
  token, com `deviceScaleFactor=2` para boa resolução no Word.
