# Fase 0 — Resultados (Inventário e Baseline)

**Status:** infraestrutura pronta — **ainda bloqueada** no inventário autenticado até credenciais de ≥3 câmeras  
**Data:** 2026-08-19 (atualizado)  
**Escopo entregue:** ferramentas + baseline + discovery + pacotes mínimos + HTTPS `vms.restor.app.br`  
**Não entregue ainda:** coleta autenticada de ≥3 câmeras (fabricante/modelo/perfis/URI/codec/bitrate/estabilidade)

---

## 1. Princípio registrado no projeto

Documentado em `docs/PRINCIPIOS.md` e `README.md`:

> O **Recorder Service** funciona independentemente do Laravel. Reiniciar o painel **não pode** interromper gravações.

Isso é requisito de aceite das fases de gravação — não implementado ainda (correto para Fase 0).

---

## 2. O que foi criado (somente Fase 0)

```text
/var/www/html/ipcam/
  README.md
  docs/PRINCIPIOS.md
  docs/FASE-0-RESULTADOS.md          ← este arquivo
  tools/env-baseline/run_baseline.sh
  tools/camera-inventory/
    README.md
    cameras.example.yaml
    requirements.txt
    setup_venv.sh
    discover_hosts.py
    inventory.py
  results/env/baseline-latest.{md,json}
  results/cameras/discover-latest.json
```

**Não foi implementado:** Laravel, Recorder, Storage Manager, live view, VMS.

**Alterações no ambiente do sistema (autorizadas depois):**

- `apt`: `python3.12-venv`, `ffmpeg` (inclui `ffprobe`)
- Apache vhost `vms.restor.app.br` → `/var/www/html/ipcam/public`
- Let's Encrypt emitido; redirect HTTP→HTTPS ativo
- venv do inventário em `tools/camera-inventory/.venv`

---

## 3. Baseline do ambiente de desenvolvimento

Fonte: `results/env/baseline-latest.md`

| Item | Resultado |
|---|---|
| Host | `evo` |
| Ubuntu | 24.04.4 LTS (kernel 6.8.0-137-generic) |
| CPU | Intel Xeon E5-2620 @ 2.00 GHz · **4 cores** |
| RAM | **7,8 GiB** total · ~5,2 GiB disponível |
| Disco `/` | ~95 GiB · **~76 GiB livres** (16% usado) |
| Rede | `ens160` · **10.10.15.74/24** · gateway 10.10.15.250 |
| PHP | 8.3.6 — presente |
| Python | 3.12.3 — presente |
| FFmpeg | **6.1.1** (instalado após autorização) |
| ffprobe | **6.1.1** (instalado após autorização) |
| PostgreSQL client | **AUSENTE** |
| Nginx | **AUSENTE** |
| Apache | 2.4.58 — presente |
| MySQL | 8.0.46 — presente |
| Docker | 29.7.2 — presente |
| python3-venv | **presente** (venv do inventário criado) |

### HTTPS / domínio

| Item | Valor |
|---|---|
| URL | https://vms.restor.app.br |
| DocumentRoot | `/var/www/html/ipcam/public` |
| Certificado | Let's Encrypt (válido até 2026-11-17) |
| HTTP→HTTPS | 301 permanente |

### Interpretação para o projeto

- Ambiente **adequado** para painel + 1–3 câmeras de teste **depois** de instalar FFmpeg.
- Ambiente **não adequado** para simular 60 câmeras com live 4×4 em main stream (CPU antiga / 4 cores / 8 GB).
- PostgreSQL/Nginx ficam para fases posteriores — corretamente ausentes agora.

---

## 4. Descoberta de rede (LAN `10.10.15.0/24`)

Fonte: `results/cameras/discover-latest.json`

- Varredura TCP (timeout 0,5 s) nas portas `80, 554, 8000, 8080, 8899`
- **34 hosts** com alguma porta aberta
- **Nenhum host** respondeu na porta **554 (RTSP)** neste scan

### Candidatos mais relevantes para câmeras IP

| IP | Portas abertas | Observação |
|---|---|---|
| `10.10.15.11` | 8000 | Padrão comum de HTTP Hikvision/HiLook |
| `10.10.15.71` | 80, 8000 | HTTP + 8000 |
| `10.10.15.143` | 80, 8000 | HTTP + 8000 |
| `10.10.15.153` | 80, 8080 | HTTP alternativo |
| `10.10.15.154` | 80, 8080 | HTTP alternativo |
| `10.10.15.79` | 80, 8080 | HTTP alternativo |
| `10.10.15.172` | 8080 | HTTP alternativo |
| `10.10.15.231` | 8080 | HTTP alternativo |
| Demais (~26) | sobretudo 80 | Podem ser câmeras, NVRs, PCs, impressoras, etc. |

### Achado importante

A ausência de **554 aberta** a partir deste host pode significar:

1. RTSP em outra porta / filtrado por firewall entre este servidor e as câmeras  
2. Câmeras em outro VLAN/segmento (gravação hoje só no servidor Windows)  
3. Timeout agressivo demais para alguns dispositivos  
4. Serviços HTTP (80/8000) acessíveis, mas RTSP restrito  

Isso precisa ser validado com IPs reais das 3 câmeras de teste e credenciais — **não inventado**.

---

## 5. Inventário autenticado (≥3 câmeras) — PENDENTE

### Motivo do bloqueio

| Dependência | Situação |
|---|---|
| `cameras.yaml` com ≥3 câmeras (IP, user, senha, portas) | **Não fornecido** |
| `python3.12-venv` + deps ONVIF no venv do projeto | **Ausente no sistema** |
| `ffmpeg` / `ffprobe` | **Ausentes** (necessários para codec/FPS/bitrate/estabilidade) |

Sem isso, qualquer “resultado” de fabricante/modelo/bitrate seria especulação.

### Como concluir (quando você autorizar)

1. Informar **pelo menos 3 câmeras** (preferir mix Hikvision + HiLook se disponíveis):

```text
id | nome | IP | user | senha | onvif_port | rtsp_port | rtsp_main? | rtsp_sub?
```

2. Autorizar instalação **mínima** (só o necessário à Fase 0):

```bash
sudo apt-get install -y python3.12-venv ffmpeg
```

   - **Não** instala Nginx/PostgreSQL nesta fase.

3. Rodar:

```bash
cd /var/www/html/ipcam/tools/camera-inventory
cp cameras.example.yaml cameras.yaml   # editar
./setup_venv.sh
source .venv/bin/activate
python inventory.py
```

4. Revisar `results/cameras/inventory-latest.md`

Campos que o `inventory.py` já coleta quando as dependências existem:

- fabricante, modelo (ONVIF GetDeviceInformation)
- ONVIF disponível, perfis, URI RTSP
- classificação heurística main/sub (maior/menor resolução)
- codec, resolução, FPS, áudio (ffprobe)
- estabilidade + Mbps aproximado (amostra FFmpeg)

---

## 6. O que NÃO foi feito (de propósito)

- Não iniciou Fase 1 (Laravel/VMS)
- Não instalou Nginx, PostgreSQL, FFmpeg (sem autorização)
- Não cadastrou senhas inventadas
- Não assumiu que todo host:80 é câmera

---

## 7. Critério de conclusão da Fase 0

A Fase 0 só deve ser marcada **concluída** quando existir relatório autenticado de **≥3 câmeras** com os campos de coleta pedidos (ou lacunas explicitamente marcadas como falha de ONVIF/RTSP com evidência).

Estado atual: **ferramentas + baseline + discovery OK · inventário de câmeras aguardando input/autorização**.

---

## 8. Próximo passo (aguardando você)

Envie:

1. Dados de ≥3 câmeras de teste (Hikvision/HiLook quando houver)  
2. Se autoriza `apt-get install -y python3.12-venv ffmpeg`  

Com isso, fecho a coleta, atualizo este documento com os resultados reais e **só então** peço aprovação para a Fase 1.
