<p align="center">
  <img src="public/capa.png" alt="Capa do Projeto" width="650">
</p>

# DMG Diagnostic & Repair Agent

![Agent Simulation](docs/simulation.svg)

## 🚀 Instalação

Este pacote está publicado no PyPI (Python Package Index) e pode ser instalado facilmente usando `pip`.

```bash
pip install dmg-diagnostic-agent
```

---

## 💻 Como Usar

Após a instalação, você pode executar o agente de diagnóstico diretamente do seu terminal. O agente precisa de duas informações para funcionar: a URL do seu painel para onde ele enviará o diagnóstico e um token de autenticação.

```bash
dmg-diagnostic-agent --upload-url <URL_PARA_UPLOAD> --token <SEU_TOKEN_DE_API>
```

**Argumentos:**

*   `--upload-url`: A URL completa do endpoint no seu painel de controle que foi projetado para receber os dados do diagnóstico (Ex: `https://seusite.com/api/diagnostic/upload`).
*   `--token`: O token de API seguro para autenticar o agente no seu backend.

---

## 📌 Visão Geral

O `DMG Diagnostic & Repair Agent` é uma ferramenta poderosa que, integrada a um painel de controle, permite:

-   **Diagnosticar:** Executar uma análise completa no ambiente do servidor, identificando problemas de sistema, configuração, segurança e projeto.
-   **Reportar:** Enviar um relatório detalhado para uma plataforma centralizada.
-   **Reparar (Novo!):** Executar ações de correção de forma segura e controlada para resolver problemas comuns, com um sistema de rollback automático para garantir a integridade do sistema.

Este módulo não altera a arquitetura existente do seu painel, apenas adiciona novas rotas, lógica de negócio e interfaces para gerenciar diagnósticos e reparos.

## ⚙️ Novo: O Safe Repair Engine

A versão 2.0 introduz o **Safe Repair Engine**, um orquestrador robusto para aplicar correções automaticamente. Ele opera com um fluxo de trabalho que prioriza a segurança e a estabilidade:

1.  **Validação de Ação (Whitelist)**: Antes de qualquer ação, o motor verifica se o reparo solicitado (`restart_nginx`, `renew_ssl`, etc.) está em uma lista de comandos permitidos. Ações não autorizadas são bloqueadas.
2.  **Criação de Snapshot**: Se a ação for permitida, o motor cria um snapshot do estado atual do sistema. A estratégia primária é usar `git`, criando um commit que serve como ponto de restauração atômico.
3.  **Execução do Comando**: O comando de reparo associado à ação é executado. Qualquer falha na execução é capturada imediatamente.
4.  **Validação Pós-Reparo**: Após a execução, um motor de validação verifica se o problema foi realmente resolvido (ex: `nginx -t` para validar a configuração do Nginx).
5.  **Rollback Automático**: Se a execução do comando ou a validação pós-reparo falharem, o motor aciona o **Rollback Manager**, que reverte o sistema para o snapshot criado no passo 2, garantindo que o ambiente retorne ao seu estado original e funcional.

Este ciclo garante que as tentativas de reparo ou sucedem e são validadas, ou falham e não deixam nenhum impacto negativo no sistema.

## 🏗️ Arquitetura

O fluxo é dividido em três camadas:

1.  **Agente Python (externo)**
2.  **Backend (integração + processamento)**
3.  **Painéis (Cliente e Admin)**

## 🔄 Fluxo Completo

1.  Cliente executa o agente no servidor.
2.  O agente envia um JSON estruturado para o backend.
3.  O backend valida, armazena e processa o diagnóstico.
4.  Opcionalmente, o backend pode solicitar uma ação de reparo ao agente.
5.  O cliente visualiza resumo no painel.
6.  Após pagamento, relatório completo é desbloqueado.
7.  Admin pode visualizar, gerenciar e iniciar reparos.

## 🧩 Endpoints Criados

### `POST /api/diagnostic/upload`

Recebe o relatório do agente.

- **Ações:** Processa, calcula health score, classifica e salva.

### `GET /api/diagnostic/my-reports`

Lista relatórios do cliente autenticado.

### `GET /api/diagnostic/:id`

Retorna relatório específico (resumo ou completo, dependendo do pagamento).

### `POST /api/repair/:id/initiate` (Exemplo)

Inicia uma ação de reparo para um diagnóstico específico.

### `GET /api/admin/diagnostic/all`

Lista todos os relatórios para o administrador.

## 🗄️ Estrutura do Banco

**Tabela:** `diagnostics` (sem alterações nesta versão)

| Campo              | Tipo      | Descrição                       |
| ------------------ | --------- | ------------------------------- |
| `id`               | UUID      | Identificador único             |
| `user_id`          | UUID      | Cliente                         |
| `project_name`     | string    | Nome do projeto                 |
| `scan_type`        | string    | `basic`/`deep`                  |
| `health_score`     | int       | 0–100                           |
| `severity_level`   | string    | `low`/`medium`/`high`/`critical` |
| `summary_json`     | JSON      | Resumo                          |
| `full_report_json` | JSON      | Relatório completo              |
| `is_unlocked`      | boolean   | Liberado após pagamento         |
| `payment_status`   | string    | `pending`/`paid`                |
| `admin_notes`      | text      | Observações internas            |
| `created_at`       | timestamp | Data                            |

## 🔐 Segurança

-   Token obrigatório no upload.
-   Rate limit e limite de payload.
-   Logs de auditoria.
-   Relatórios armazenados com segurança.
-   **Modificações no servidor do cliente são realizadas exclusivamente através do Safe Repair Engine, que opera com uma lista de permissões, snapshots e rollback automático para garantir a integridade do sistema.**

## 📡 Estrutura do JSON Recebido

```json
{
  "agent_version": "2.0.0",
  "scan_type": "deep",
  "system": {},
  "ssl": {},
  "nginx": {},
  "project": {},
  "build": {},
  "security": {},
  "errors_summary": [],
  "timestamp": ""
}
```

## 🎯 Resultado Final

O sistema passa a oferecer:

-   Diagnóstico automatizado.
-   **Reparo Automatizado e Seguro.**
-   Classificação inteligente de problemas.
-   Monetização integrada.
-   Gestão técnica centralizada.
-   Base sólida para um produto SaaS DevOps.
