# 🚨 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:** ```csharp 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):** ```json { "window_title": "[IDLE]", "application_name": "System Idle" } ``` **Depois (CORRETO):** ```json { "window_title": "Documento - Word", "application_name": "WINWORD.EXE" } ``` ou ```json { "window_title": "Visual Studio Code", "application_name": "Code.exe" } ``` ou ```json { "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):** ```bash 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.