# Monitoramento - v2.0

## Sentry (erros)

### Configuração

**Frontend (Next.js):**
```bash
npm install @sentry/nextjs
npx @sentry/wizard@latest -i nextjs
```

Variáveis de ambiente:
- `NEXT_PUBLIC_SENTRY_DSN` — DSN do projeto Sentry

**API (PHP):**
```bash
composer require sentry/sentry
```

```php
// api/bootstrap.php ou index.php
\Sentry\init(['dsn' => getenv('SENTRY_DSN')]);
```

---

## GA4 (analytics)

### Eventos de conversão sugeridos

| Evento | Momento |
|--------|---------|
| `cadastro_iniciado` | Usuário clica em Cadastre-se |
| `aposta_iniciada` | Usuário adiciona primeiro jogo ao carrinho |
| `aposta_finalizada` | Compra concluída com sucesso |
| `credito_comprado` | Pedido de crédito criado |

### Implementação

Adicionar em `frontend/app/layout.tsx`:

```tsx
{process.env.NEXT_PUBLIC_GA_ID && (
  <>
    <script async src={`https://www.googletagmanager.com/gtag/js?id=${process.env.NEXT_PUBLIC_GA_ID}`} />
    <script dangerouslySetInnerHTML={{ __html: `
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', '${process.env.NEXT_PUBLIC_GA_ID}');
    `}} />
  </>
)}
```

---

## Logs estruturados (JSON)

Para facilitar busca em ferramentas (ELK, Datadog, etc.):

```json
{"ts":"2025-03-07T12:00:00Z","level":"error","msg":"Falha ao finalizar","user_id":123,"trace":"..."}
```

API: usar `error_log(json_encode($payload))` em catch blocks.

---

## Uptime

Endpoints críticos para monitorar:

- `GET /api/v2/health` — disponibilidade geral
- `GET /api/v2/loterias` — banco acessível
- `GET /api/v2/concursos?id_loteria=1` — fluxo principal

Ferramentas: UptimeRobot, Pingdom, ou cron com curl.
