- Cliente Windows com modo silencioso e auto-start robusto - Backend Node.js + API REST - Frontend Next.js + Dashboard - Scripts PowerShell de configuração e diagnóstico - Documentação completa - Build scripts para Windows e Linux - Solução de auto-start após reinicialização Resolução do problema: Cliente não voltava ativo após reboot Solução: Registro do Windows + Task Scheduler + Modo silencioso
89 lines
3.1 KiB
Markdown
89 lines
3.1 KiB
Markdown
# Changelog - Cliente NoIdle Corrigido
|
|
|
|
## 🔧 Correções Implementadas
|
|
|
|
### 1. **Captura de Janela Ativa Corrigida**
|
|
- ✅ Função `get_active_window_info()` agora sempre tenta capturar dados reais
|
|
- ✅ Garante que o nome do processo tenha `.exe`
|
|
- ✅ Se não conseguir o título, usa o nome do processo
|
|
- ✅ **NUNCA** retorna "System Idle" se há uma janela ativa
|
|
|
|
### 2. **Lógica de Monitoramento Melhorada**
|
|
- ✅ Sempre tenta enviar dados reais quando há janela ativa
|
|
- ✅ Só envia "[IDLE]" quando realmente não consegue capturar janela E usuário está ocioso
|
|
- ✅ Verifica se usuário está ocioso antes de marcar como idle
|
|
|
|
### 3. **Intervalo de Monitoramento Ajustado**
|
|
- ✅ Mudado de 1 minuto para **10 segundos** (mais frequente)
|
|
- ✅ Captura mudanças de aplicativo mais rapidamente
|
|
|
|
### 4. **Heartbeat Implementado**
|
|
- ✅ Envia heartbeat a cada 30 segundos para manter dispositivo ativo
|
|
- ✅ Garante que dispositivo apareça como online mesmo sem atividade
|
|
|
|
### 5. **Tratamento de Erros Melhorado**
|
|
- ✅ Melhor tratamento de exceções em todas as funções
|
|
- ✅ Logs mais informativos para debug
|
|
- ✅ Continua funcionando mesmo se uma parte falhar
|
|
|
|
### 6. **Histórico de Navegação**
|
|
- ✅ Melhor tratamento de erros ao ler histórico do Chrome/Edge
|
|
- ✅ Valida URLs antes de enviar
|
|
- ✅ Remove duplicatas e URLs inválidas
|
|
|
|
### 7. **Ativação Corrigida**
|
|
- ✅ Corrigido para salvar `device_id` corretamente após ativação
|
|
- ✅ Validação melhor do resultado da ativação
|
|
|
|
## 📋 O que foi corrigido especificamente:
|
|
|
|
### Antes (ERRADO):
|
|
```python
|
|
if idle_time > (IDLE_THRESHOLD * 60):
|
|
send_activity_log(device_id, '[IDLE]', 'System Idle', int(idle_time))
|
|
elif window_info:
|
|
send_activity_log(...)
|
|
```
|
|
|
|
**Problema:** Enviava "[IDLE]" mesmo quando havia janela ativa se o tempo ocioso fosse alto.
|
|
|
|
### Depois (CORRETO):
|
|
```python
|
|
if window_info and window_info.get('window_title') and window_info.get('process_name'):
|
|
# Sempre enviar dados reais se há janela ativa
|
|
if idle_time_seconds > IDLE_THRESHOLD:
|
|
# Ocioso mas ainda tem janela
|
|
send_activity_log(device_id, window_title, application_name, idle_time_seconds, urls)
|
|
else:
|
|
# Ativo
|
|
send_activity_log(device_id, window_title, application_name, 0, urls)
|
|
else:
|
|
# Só enviar "[IDLE]" se realmente não conseguiu capturar janela
|
|
if idle_time_seconds > IDLE_THRESHOLD:
|
|
send_activity_log(device_id, '[IDLE]', 'System Idle', idle_time_seconds, None)
|
|
```
|
|
|
|
## 🎯 Resultado Esperado
|
|
|
|
Agora o cliente deve enviar:
|
|
- ✅ Títulos reais das janelas (ex: "Visual Studio Code", "Documento - Word")
|
|
- ✅ Nomes reais dos executáveis (ex: "Code.exe", "WINWORD.EXE", "chrome.exe")
|
|
- ✅ URLs do Chrome/Edge quando disponíveis
|
|
- ✅ Eventos de logon/logoff
|
|
- ✅ Heartbeat regular
|
|
|
|
## 📦 Para Rebuild
|
|
|
|
1. Instalar dependências:
|
|
```bash
|
|
pip install pyinstaller psutil pywin32 requests pystray pillow schedule
|
|
```
|
|
|
|
2. Criar executável:
|
|
```bash
|
|
pyinstaller --onefile --windowed --icon=icon.ico --name=NoIdle CLIENTE_CORRIGIDO.py
|
|
```
|
|
|
|
3. O executável estará em `dist/NoIdle.exe`
|
|
|