Redesenho da UI de dispositivos e correcao de VRAM
- Reorganiza layout da tela de dispositivos admin - Renomeia secao "Controles do dispositivo" para "Atalhos" - Adiciona botao de Tickets com badge de quantidade - Simplifica textos de botoes (Acesso, Resetar) - Remove email da maquina do cabecalho - Move empresa e status para mesma linha - Remove chip de Build do resumo - Corrige deteccao de VRAM para GPUs >4GB usando nvidia-smi - Adiciona prefixo "VRAM" na exibicao de memoria da GPU - Documenta sincronizacao RustDesk 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
c5150fee8f
commit
23e7cf58ae
11 changed files with 863 additions and 441 deletions
|
|
@ -9,6 +9,7 @@ Este índice consolida a documentação viva e move conteúdos históricos para
|
|||
- Build: `docs/desktop/build.md`
|
||||
- Updater: `docs/desktop/updater.md`
|
||||
- Handshake/troubleshooting: `docs/desktop/handshake-troubleshooting.md`
|
||||
- RustDesk sync: `docs/desktop/rustdesk-sync.md`
|
||||
- Tickets: `docs/ticket-snapshots.md`
|
||||
- Administração (UI): `docs/admin/admin-inventory-ui.md`
|
||||
|
||||
|
|
|
|||
151
docs/desktop/rustdesk-sync.md
Normal file
151
docs/desktop/rustdesk-sync.md
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
# Desktop (Tauri) - Sincronizacao RustDesk com Backend
|
||||
|
||||
Este documento descreve o mecanismo de sincronizacao automatica do RustDesk com o backend apos o provisionamento no aplicativo desktop.
|
||||
|
||||
## Visao Geral
|
||||
|
||||
O fluxo de sincronizacao do RustDesk garante que as credenciais de acesso remoto (ID e senha) sejam automaticamente registradas no backend assim que o RustDesk for provisionado na maquina. Isso elimina a necessidade de cadastro manual e permite acesso remoto imediato.
|
||||
|
||||
## Arquitetura
|
||||
|
||||
### Fluxo de Provisionamento
|
||||
|
||||
```
|
||||
1. Usuario clica "Registrar" no app desktop
|
||||
2. TypeScript faz POST /api/machines/register
|
||||
3. TypeScript salva token/config no store local
|
||||
4. TypeScript inicia RustDesk em background (fire-and-forget)
|
||||
5. TypeScript redireciona IMEDIATAMENTE para o sistema
|
||||
6. [Background] Rust provisiona RustDesk (~30s)
|
||||
7. [Background] Rust faz POST /api/machines/remote-access (SYNC)
|
||||
8. [Background] Rust atualiza lastSyncedAt no store
|
||||
```
|
||||
|
||||
### Por que o Sync e feito no Rust?
|
||||
|
||||
| Problema anterior | Solucao Rust |
|
||||
|-------------------|--------------|
|
||||
| CSP do Tauri bloqueava `fetch()` | Rust usa reqwest diretamente, sem CSP |
|
||||
| Race conditions com React state | Fluxo sincrono no Rust |
|
||||
| Fire-and-forget nao completava | Sync acontece antes do return |
|
||||
| Timeout do navegador | Rust tem controle total do HTTP |
|
||||
|
||||
## Implementacao
|
||||
|
||||
### Arquivo: `apps/desktop/src-tauri/src/rustdesk.rs`
|
||||
|
||||
O sync e executado automaticamente apos o provisionamento bem-sucedido:
|
||||
|
||||
```rust
|
||||
// Apos salvar dados do RustDesk no store local
|
||||
sync_remote_access_with_backend(&result)?;
|
||||
```
|
||||
|
||||
### Payload da API
|
||||
|
||||
```json
|
||||
{
|
||||
"machineToken": "<token-da-maquina>",
|
||||
"provider": "RustDesk",
|
||||
"identifier": "<id-do-rustdesk>",
|
||||
"password": "<senha-permanente>",
|
||||
"notes": "Versao: 1.4.4. Provisionado em: 1765045637482"
|
||||
}
|
||||
```
|
||||
|
||||
### Headers
|
||||
|
||||
- `Content-Type: application/json`
|
||||
- `Idempotency-Key: <machineId>:RustDesk:<rustdeskId>` (previne duplicatas)
|
||||
|
||||
### Endpoint
|
||||
|
||||
```
|
||||
POST /api/machines/remote-access
|
||||
```
|
||||
|
||||
## Arquivos de Configuracao
|
||||
|
||||
### Store Local
|
||||
|
||||
Caminho: `%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\machine-agent.json`
|
||||
|
||||
Estrutura relevante:
|
||||
```json
|
||||
{
|
||||
"config": {
|
||||
"machineId": "...",
|
||||
"apiBaseUrl": "https://tickets.esdrasrenan.com.br"
|
||||
},
|
||||
"token": "...",
|
||||
"rustdesk": {
|
||||
"id": "497869711",
|
||||
"password": "...",
|
||||
"installedVersion": "1.4.4",
|
||||
"lastProvisionedAt": 1765045637482,
|
||||
"lastSyncedAt": 1765045638173,
|
||||
"lastError": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
Caminho: `%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\logs\rustdesk.log`
|
||||
|
||||
Mensagens de sucesso:
|
||||
```
|
||||
[...] Iniciando sincronizacao com backend...
|
||||
[...] Sync com backend OK: status 200 OK
|
||||
[...] Acesso remoto sincronizado com backend
|
||||
```
|
||||
|
||||
## Diagnostico
|
||||
|
||||
### Verificar se o Sync Funcionou
|
||||
|
||||
1. Abrir `machine-agent.json`:
|
||||
```
|
||||
%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\machine-agent.json
|
||||
```
|
||||
|
||||
2. Verificar campo `rustdesk.lastSyncedAt`:
|
||||
- Se tem valor numerico: sync OK
|
||||
- Se `null`: sync falhou
|
||||
|
||||
3. Verificar logs:
|
||||
```
|
||||
%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\logs\rustdesk.log
|
||||
```
|
||||
|
||||
### Possiveis Erros
|
||||
|
||||
| Erro | Causa | Solucao |
|
||||
|------|-------|---------|
|
||||
| `400 Bad Request` | Payload incorreto | Verificar schema da API |
|
||||
| `401 Unauthorized` | Token invalido/expirado | Re-registrar maquina |
|
||||
| `Connection refused` | Backend indisponivel | Verificar URL da API |
|
||||
| `lastSyncedAt: null` | Sync nao executou | Verificar logs do Rust |
|
||||
|
||||
### Fallback Manual
|
||||
|
||||
Se o sync automatico falhar, o sistema tenta novamente a cada 30 segundos em background. Tambem e possivel forcar o re-provisionamento via:
|
||||
|
||||
1. Aba "Configuracoes" no app desktop
|
||||
2. Clicar "Reprovisionar RustDesk"
|
||||
|
||||
## Historico de Mudancas
|
||||
|
||||
### Dezembro 2025 - Migracao do Sync para Rust
|
||||
|
||||
**Problema:** O sync feito em TypeScript (`fetch()`) falhava com "Failed to fetch" devido ao CSP do Tauri v2 bloquear requisicoes externas do webview.
|
||||
|
||||
**Solucao:** Mover o sync para o Rust, que faz HTTP diretamente via reqwest sem restricoes de CSP.
|
||||
|
||||
**Arquivos modificados:**
|
||||
- `apps/desktop/src-tauri/src/rustdesk.rs` - Adicionado `sync_remote_access_with_backend()`
|
||||
- `apps/desktop/src/main.tsx` - Simplificado para fire-and-forget
|
||||
|
||||
---
|
||||
|
||||
Ultima atualizacao: Dezembro 2025 - Sync automatico via Rust apos provisionamento.
|
||||
Loading…
Add table
Add a link
Reference in a new issue