Files
NoIdle/CHANGELOG_CLIENTE.md
root 6086c13be7 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
2025-11-16 22:56:35 +00:00

3.1 KiB

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):

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):

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:
pip install pyinstaller psutil pywin32 requests pystray pillow schedule
  1. Criar executável:
pyinstaller --onefile --windowed --icon=icon.ico --name=NoIdle CLIENTE_CORRIGIDO.py
  1. O executável estará em dist/NoIdle.exe