Files
NoIdle/PROBLEMA_MONITORACAO.md
Sérgio Corrêa 4fab8593ac refactor: Migração completa de PointControl para NoIdle
- Pasta renomeada: /var/www/pointcontrol → /var/www/noidle
- PM2 renomeado: pointcontrol-api → noidle-api
- Package.json backend atualizado
- Package.json frontend atualizado
- Todas as referências de código atualizadas
- Documentação atualizada
- Script de migração executado com sucesso
- Backup criado em /tmp/
- Sistema testado e funcionando

Resolução: Organização completa da estrutura bagunçada
2025-11-16 23:38:59 +00:00

4.8 KiB

🚨 Problema: Monitoração não está capturando dados reais

Situação Atual

O cliente Windows DESKTOP-BC16GDH está enviando dados, mas apenas:

  • window_title: "[IDLE]"
  • application_name: "System Idle"

Resultado: Todas as atividades aparecem como "System Idle" na interface, mesmo quando o usuário está usando aplicativos.


🔍 O que está acontecendo

Backend (Servidor)

  • Está recebendo os dados corretamente
  • Está salvando no banco de dados
  • Está detectando e avisando quando recebe dados inválidos
  • Logs mostram: ⚠️ ATENÇÃO: Recebendo atividade com window_title inválido: "[IDLE]"

Cliente Windows (DESKTOP-BC16GDH)

  • Não está capturando o título real da janela ativa
  • Não está capturando o executável real do processo
  • Está enviando valores fixos "System Idle" e "[IDLE]"

Solução: Atualizar o Cliente Windows

O código do cliente precisa ser modificado para capturar dados reais usando APIs do Windows.

1. Capturar Janela Ativa e Processo

Código C# necessário:

using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Diagnostics;

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);

// Função para obter dados da janela ativa
public (string windowTitle, string applicationName) GetActiveWindowInfo()
{
    try
    {
        // Obter janela ativa
        IntPtr hwnd = GetForegroundWindow();
        
        if (hwnd == IntPtr.Zero)
        {
            return ("[IDLE]", "System Idle");
        }
        
        // Obter título da janela
        StringBuilder windowTitle = new StringBuilder(256);
        GetWindowText(hwnd, windowTitle, 256);
        
        // Obter processo
        uint processId;
        GetWindowThreadProcessId(hwnd, out processId);
        
        Process process = Process.GetProcessById((int)processId);
        string appName = process.ProcessName + ".exe";
        
        // Se não conseguiu obter título, usar nome do processo
        string title = windowTitle.ToString();
        if (string.IsNullOrWhiteSpace(title))
        {
            title = appName;
        }
        
        // NÃO retornar "System Idle" se há uma janela ativa
        return (title, appName);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Erro ao obter janela ativa: {ex.Message}");
        return ("[ERRO]", "Unknown");
    }
}

2. Enviar Dados Reais

Antes (ERRADO):

{
  "window_title": "[IDLE]",
  "application_name": "System Idle"
}

Depois (CORRETO):

{
  "window_title": "Documento - Word",
  "application_name": "WINWORD.EXE"
}

ou

{
  "window_title": "Visual Studio Code",
  "application_name": "Code.exe"
}

ou

{
  "window_title": "YouTube",
  "application_name": "chrome.exe"
}

📋 Checklist para o Desenvolvedor do Cliente

  • Implementar GetForegroundWindow() para obter janela ativa
  • Implementar GetWindowText() para obter título da janela
  • Implementar GetWindowThreadProcessId() para obter processo
  • Usar Process.GetProcessById() para obter nome do executável
  • NÃO enviar "System Idle" quando há uma janela ativa
  • Enviar dados reais mesmo quando o usuário está trabalhando
  • Testar com diferentes aplicativos (Chrome, Word, VS Code, etc.)

🔧 Como Testar

  1. No Cliente Windows:

    • Abra o Visual Studio Code
    • Verifique se o cliente está enviando: window_title: "Visual Studio Code" e application_name: "Code.exe"
    • Abra o Chrome
    • Verifique se está enviando: window_title: "Título da aba" e application_name: "chrome.exe"
  2. No Servidor (verificar logs):

    pm2 logs noidle-api --lines 20
    

    Procure por:

    • ✅ Atividade registrada: chrome.exe - YouTube (correto)
    • ⚠️ ATENÇÃO: Recebendo atividade com window_title inválido (errado)
  3. Na Interface Web:

    • Acesse https://admin.noidle.tech/activities
    • Deve aparecer os nomes reais dos aplicativos e janelas

📄 Documentação Completa

Veja o arquivo ESPECIFICACAO_CLIENTE_WINDOWS.md para a especificação completa de todos os endpoints e campos necessários.


🎯 Resumo

O problema NÃO está no servidor. O servidor está funcionando perfeitamente e recebendo os dados.

O problema ESTÁ no cliente Windows que precisa ser atualizado para capturar dados reais dos aplicativos e janelas ativas.

Ação necessária: Atualizar o código do cliente Windows para usar as APIs do Windows e capturar dados reais.