Files
NoIdle/PROBLEMA_MONITORACAO.md

180 lines
4.8 KiB
Markdown
Raw Normal View History

# 🚨 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 pointcontrol-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.