feat: dispositivos e ajustes de csat e relatórios
This commit is contained in:
parent
25d2a9b062
commit
e0ef66555d
86 changed files with 5811 additions and 992 deletions
|
|
@ -1,11 +1,11 @@
|
|||
# Plano Integrado – App Desktop & Inventário por Máquina (Arquivo)
|
||||
# Plano Integrado – App Desktop & Inventário por Dispositivo (Arquivo)
|
||||
|
||||
> Documento vivo. Atualize após cada marco relevante.
|
||||
|
||||
## Contexto
|
||||
- **Objetivo:** Expandir o Sistema de Chamados (Next.js + Convex + Better Auth) para suportar:
|
||||
- Cliente desktop nativo (Tauri) mantendo UI web e realtime.
|
||||
- Autenticação máquina-a-máquina usando tokens derivados do inventário.
|
||||
- Autenticação dispositivo-a-dispositivo usando tokens derivados do inventário.
|
||||
- Integração com agente de inventário (osquery/FleetDM) para registrar hardware, software e heartbeats.
|
||||
- Pipeline de distribuição para Windows/macOS/Linux.
|
||||
- **Escopo inicial:** Focar no fluxo mínimo viável com inventário básico (hostname, OS, identificadores, carga resumida). Métricas avançadas e distribuição automatizada ficam para iteração seguinte.
|
||||
|
|
@ -21,12 +21,12 @@
|
|||
| --- | --- | --- |
|
||||
| Documento de arquitetura e roadmap | 🔄 Em andamento | Estrutura criada, aguardando detalhamento incremental a cada etapa. |
|
||||
| Projeto Tauri inicial apontando para UI Next | 🔄 Em andamento | Estrutura `apps/desktop` criada; pendente testar build após instalar toolchain Rust. |
|
||||
| Schema Convex + tokens de máquina | ✅ Concluído | Tabelas `machines` / `machineTokens` criadas com TTL e fingerprint. |
|
||||
| Schema Convex + tokens de dispositivo | ✅ Concluído | Tabelas `machines` / `machineTokens` criadas com TTL e fingerprint. |
|
||||
| API de registro/heartbeat e exchange Better Auth | 🔄 Em andamento | Endpoints `/api/machines/*` disponíveis; falta testar fluxo end-to-end com app desktop. |
|
||||
| Endpoint upsert de inventário dedicado | ✅ Concluído | `POST /api/machines/inventory` (modo por token ou provisioningSecret). |
|
||||
| Integração FleetDM → Convex (inventário básico) | 🔄 Em andamento | Endpoint `/api/integrations/fleet/hosts` criado; falta validar payload real e ajustes de métricas/empresa. |
|
||||
| Admin > Máquinas (listagem, detalhes, métricas) | ✅ Concluído | Página `/admin/machines` exibe parque completo com status ao vivo, inventário e métricas. |
|
||||
| Ajustes na UI/Next para sessão por máquina | ⏳ A fazer | Detectar token e exibir info da máquina em tickets. |
|
||||
| Admin > Dispositivos (listagem, detalhes, métricas) | ✅ Concluído | Página `/admin/devices` exibe parque completo com status ao vivo, inventário e métricas. |
|
||||
| Ajustes na UI/Next para sessão por dispositivo | ⏳ A fazer | Detectar token e exibir info da dispositivo em tickets. |
|
||||
| Pipeline de build/distribuição Tauri | ⏳ A fazer | Definir estratégia CI/CD + auto-update. |
|
||||
| Guia operacional (instalação, uso, suporte) | ⏳ A fazer | Gerar instruções finais com casos de uso. |
|
||||
|
||||
|
|
@ -48,23 +48,23 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
|
||||
## Notas de Implementação (Atual)
|
||||
- Criada pasta `apps/desktop` via `create-tauri-app` com template `vanilla-ts`.
|
||||
- O agente desktop agora possui fluxo próprio: coleta inventário local via comandos Rust, solicita o código de provisionamento, registra a máquina e inicia heartbeats periódicos (`src-tauri/src/agent.rs` + `src/main.ts`).
|
||||
- O agente desktop agora possui fluxo próprio: coleta inventário local via comandos Rust, solicita o código de provisionamento, registra a dispositivo e inicia heartbeats periódicos (`src-tauri/src/agent.rs` + `src/main.ts`).
|
||||
- Formulário inicial exibe resumo de hardware/OS e salva o token em `~/.config/Sistema de Chamados Desktop/machine-agent.json` (ou equivalente por SO) para reaproveitamento em relançamentos.
|
||||
- URLs configuráveis via `.env` do app desktop:
|
||||
- `VITE_APP_URL` → aponta para a interface Next (padrao produção: `https://tickets.esdrasrenan.com.br`).
|
||||
- `VITE_API_BASE_URL` → base usada nas chamadas REST (`/api/machines/*`), normalmente igual ao `APP_URL`.
|
||||
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a máquina no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação top‑level pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando `POST /api/machines/sessions` é tentado antes).
|
||||
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a dispositivo no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação top‑level pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando `POST /api/machines/sessions` é tentado antes).
|
||||
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `pnpm run dev/build`, servir `dist/` e abrir janela 1100x720.
|
||||
- Novas tabelas Convex: `machines` (fingerprint, heartbeat, vínculo com AuthUser) e `machineTokens` (hash + TTL).
|
||||
- Novos endpoints Next:
|
||||
- `POST /api/machines/register` — provisiona máquina, gera token e usuário Better Auth (role `machine`).
|
||||
- `POST /api/machines/register` — provisiona dispositivo, gera token e usuário Better Auth (role `machine`).
|
||||
- `POST /api/machines/heartbeat` — atualiza estado, métricas e renova TTL.
|
||||
- `POST /api/machines/sessions` — troca `machineToken` por sessão Better Auth e devolve cookies.
|
||||
- As rotas `/api/machines/*` respondem a preflight `OPTIONS` com CORS liberado para o agente (`https://tickets.esdrasrenan.com.br`, `tauri://localhost`, `http://localhost:1420`).
|
||||
- Rota `GET /machines/handshake` realiza o login automático da máquina (seta cookies e redireciona).
|
||||
- Rota `GET /machines/handshake` realiza o login automático da dispositivo (seta cookies e redireciona).
|
||||
- As rotas `sessions/handshake` foram ajustadas para usar `NextResponse.cookies.set(...)`, aplicando cada cookie da Better Auth (sessão e assinatura) individualmente.
|
||||
- CORS: as respostas incluem `Access-Control-Allow-Credentials: true` para origens permitidas (Tauri WebView e app).
|
||||
- Página de diagnóstico: `/portal/debug` exibe `get-session` e `machines/session` com os mesmos cookies da aba — útil para validar se o desktop está autenticado como máquina.
|
||||
- Página de diagnóstico: `/portal/debug` exibe `get-session` e `machines/session` com os mesmos cookies da aba — útil para validar se o desktop está autenticado como dispositivo.
|
||||
- O desktop pode redirecionar automaticamente para essa página durante os testes.
|
||||
- Webhook FleetDM: `POST /api/integrations/fleet/hosts` (header `x-fleet-secret`) sincroniza inventário/métricas utilizando `machines.upsertInventory`.
|
||||
- Script `ensureMachineAccount` garante usuário `AuthUser` e senha sincronizada com o token atual.
|
||||
|
|
@ -73,7 +73,7 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
- O agente coleta `extended.windows.osInfo` via PowerShell/WMI. Caso o script falhe (política ou permissão), aplicamos um fallback com `sysinfo` para preencher ao menos `ProductName`, `Version` e `BuildNumber` — evitando bloco vazio no inventário exibido.
|
||||
|
||||
### Portal do Cliente (UX)
|
||||
- Quando autenticado como máquina (colaborador/gestor):
|
||||
- Quando autenticado como dispositivo (colaborador/gestor):
|
||||
- O portal deriva o papel a partir do `machineContext` (mesmo se `/api/auth/get-session` vier `null`).
|
||||
- A listagem exibe apenas os tickets onde o colaborador é o solicitante.
|
||||
- Informações internas (Fila, Prioridade) são ocultadas; o responsável aparece quando definido.
|
||||
|
|
@ -81,7 +81,7 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
- O botão “Sair” é ocultado no desktop (faz sentido apenas fechar o app).
|
||||
- Variáveis `.env` novas: `MACHINE_PROVISIONING_SECRET` (obrigatória) e `MACHINE_TOKEN_TTL_MS` (opcional, padrão 30 dias).
|
||||
- Variável adicional `FLEET_SYNC_SECRET` (opcional) para autenticar webhook do Fleet; se ausente, reutiliza `MACHINE_PROVISIONING_SECRET`.
|
||||
- Dashboard administrativo: `/admin/machines` usa `AdminMachinesOverview` com dados em tempo real (status, heartbeat, token, inventário enviado pelo agente/Fleet).
|
||||
- Dashboard administrativo: `/admin/devices` usa `AdminMachinesOverview` com dados em tempo real (status, heartbeat, token, inventário enviado pelo agente/Fleet).
|
||||
|
||||
### Checklist de dependências Tauri (Linux)
|
||||
```bash
|
||||
|
|
@ -13,8 +13,8 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
|
|||
|
||||
| Item | Descrição | Impacto |
|
||||
| --- | --- | --- |
|
||||
| **Centralização Convex** | Helpers `createConvexClient` e normalização do cookie da máquina (`src/server/convex-client.ts`, `src/server/machines/context.ts`). | Código das rotas `/api/machines/*` ficou mais enxuto e resiliente a erros de configuração. |
|
||||
| **Auth/Login redirect** | Redirecionamento baseado em role/persona sem uso de `any`, com dependências explícitas (`src/app/login/login-page-client.tsx`). | Evita warnings de hooks e garante rota correta para máquinas/colaboradores. |
|
||||
| **Centralização Convex** | Helpers `createConvexClient` e normalização do cookie da dispositivo (`src/server/convex-client.ts`, `src/server/machines/context.ts`). | Código das rotas `/api/machines/*` ficou mais enxuto e resiliente a erros de configuração. |
|
||||
| **Auth/Login redirect** | Redirecionamento baseado em role/persona sem uso de `any`, com dependências explícitas (`src/app/login/login-page-client.tsx`). | Evita warnings de hooks e garante rota correta para dispositivos/colaboradores. |
|
||||
| **Ticket header** | Sincronização do responsável com dependências completas (`ticket-summary-header.tsx`). | Removeu warning do lint e previne estados inconsistentes. |
|
||||
| **Upgrade para Next.js 16 beta** | Dependências atualizadas (`next@16.0.0-beta.0`, `eslint-config-next@16.0.0-beta.0`), cache de filesystem do Turbopack habilitado, scripts de lint/test/build ajustados ao novo fluxo. | Projeto pronto para validar as novidades do Next 16 (React Compiler opcional, prefetch incremental, etc.); builds e testes já rodando com sucesso. |
|
||||
| **Posture / inventário** | Type guards e normalização de métricas SMART/serviços (`convex/machines.ts`). | Reduziu `any`, melhorou detecção de alertas e consistência do metadata. |
|
||||
|
|
@ -39,7 +39,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
|
|||
|
||||
| Cenário | Sintoma | Como resolver |
|
||||
| --- | --- | --- |
|
||||
| Token de máquina revogado | POST `/api/machines/sessions` retorna 401 e desktop volta ao onboarding | Reprovisionar pela UI do agente; garantir que `machineToken` foi atualizado. |
|
||||
| Token de dispositivo revogado | POST `/api/machines/sessions` retorna 401 e desktop volta ao onboarding | Reprovisionar pela UI do agente; garantir que `machineToken` foi atualizado. |
|
||||
| Falha de heartbeat | Logs com `Falha ao registrar heartbeat` + status 500 | Verificar `NEXT_PUBLIC_CONVEX_URL` e conectividade. Roda `pnpm convext:dev` em DEV para confirmar schema. |
|
||||
| Updater sem atualização | Desktop fica em “Procurando atualização” indefinidamente | Confirmar release publicado com `latest.json` apontando para URLs públicas do bundle e assinaturas válidas. |
|
||||
|
||||
|
|
@ -47,6 +47,6 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
|
|||
|
||||
- Monitorar execução do novo workflow de qualidade em PRs.
|
||||
- Garantir que a equipe esteja ciente do procedimento atualizado de deploy (symlink + service update).
|
||||
- Revisar backlog acima e priorizar smoke tests para o fluxo da máquina.
|
||||
- Revisar backlog acima e priorizar smoke tests para o fluxo da dispositivo.
|
||||
|
||||
_Última atualização: 16/10/2025 (UTC-3)._
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue