feat: Implementação completa do NoIdle - Cliente, Backend e Scripts
- 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
This commit is contained in:
88
CHANGELOG_CLIENTE.md
Normal file
88
CHANGELOG_CLIENTE.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# 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`
|
||||
|
||||
Reference in New Issue
Block a user