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
This commit is contained in:
Sérgio Corrêa
2025-11-16 23:38:59 +00:00
parent 710792af01
commit 4fab8593ac
14 changed files with 112 additions and 128 deletions

View File

@@ -260,6 +260,6 @@ SystemEvents.SessionSwitch += (sender, e) => {
Para problemas técnicos, verifique: Para problemas técnicos, verifique:
1. Logs do cliente (console/arquivo de log) 1. Logs do cliente (console/arquivo de log)
2. Logs do servidor: `pm2 logs pointcontrol-api` 2. Logs do servidor: `pm2 logs noidle-api`
3. Resposta HTTP dos endpoints (status code, mensagem de erro) 3. Resposta HTTP dos endpoints (status code, mensagem de erro)

View File

@@ -89,7 +89,7 @@ Componente principal do dashboard com:
### 1. Instalar Dependências ### 1. Instalar Dependências
```bash ```bash
cd /var/www/pointcontrol/frontend cd /var/www/noidle/frontend
npm install @mui/material @emotion/react @emotion/styled @mui/icons-material npm install @mui/material @emotion/react @emotion/styled @mui/icons-material
``` ```
@@ -373,7 +373,7 @@ import { LineChart, BarChart } from 'recharts';
### 1. Build Frontend: ### 1. Build Frontend:
```bash ```bash
cd /var/www/pointcontrol/frontend cd /var/www/noidle/frontend
npm run build npm run build
``` ```

View File

@@ -21,7 +21,7 @@ Seu projeto NoIdle foi enviado para:
### Ver Status ### Ver Status
```bash ```bash
cd /var/www/pointcontrol cd /var/www/noidle
git status git status
``` ```
@@ -214,7 +214,7 @@ git push -u origin feature/minha-feature
Sempre que fizer alterações: Sempre que fizer alterações:
```bash ```bash
cd /var/www/pointcontrol cd /var/www/noidle
# Ver o que mudou # Ver o que mudou
git status git status

View File

@@ -36,7 +36,7 @@ Este script verifica:
Abra o **Gerenciador de Tarefas** (Ctrl+Shift+Esc) e procure por: Abra o **Gerenciador de Tarefas** (Ctrl+Shift+Esc) e procure por:
- `NoIdle` - `NoIdle`
- `PointControl` - `NoIdle`
- Qualquer processo relacionado a monitoramento - Qualquer processo relacionado a monitoramento
### Verificar Serviços Windows ### Verificar Serviços Windows
@@ -44,7 +44,7 @@ Abra o **Gerenciador de Tarefas** (Ctrl+Shift+Esc) e procure por:
1. Abra **Services** (Win+R → `services.msc`) 1. Abra **Services** (Win+R → `services.msc`)
2. Procure por serviços com nome contendo: 2. Procure por serviços com nome contendo:
- `NoIdle` - `NoIdle`
- `PointControl` - `NoIdle`
### Verificar Conexões de Rede ### Verificar Conexões de Rede
@@ -58,7 +58,7 @@ Get-NetTCPConnection | Where-Object { $_.RemotePort -eq 443 -and $_.State -eq "E
Procure em: Procure em:
- `C:\Program Files\NoIdle\logs\` - `C:\Program Files\NoIdle\logs\`
- `C:\Program Files\PointControl\logs\` - `C:\Program Files\NoIdle\logs\`
- `%APPDATA%\NoIdle\logs\` - `%APPDATA%\NoIdle\logs\`
- `%LOCALAPPDATA%\NoIdle\logs\` - `%LOCALAPPDATA%\NoIdle\logs\`

View File

@@ -83,14 +83,14 @@ Implementei um **sistema MDM completo** no NoIdle, similar ao JumpCloud, permiti
### 1. **Criar Tabelas no Banco** ### 1. **Criar Tabelas no Banco**
```bash ```bash
cd /var/www/pointcontrol/backend cd /var/www/noidle/backend
psql $DATABASE_URL -f create_mdm_tables.sql psql $DATABASE_URL -f create_mdm_tables.sql
``` ```
### 2. **Reiniciar Backend** ### 2. **Reiniciar Backend**
```bash ```bash
pm2 restart pointcontrol-api pm2 restart noidle-api
``` ```
### 3. **Criar Política via API** ### 3. **Criar Política via API**
@@ -186,7 +186,7 @@ curl https://admin.noidle.tech/api/policies/1/executions
- [x] Rotas implementadas - [x] Rotas implementadas
- [x] Templates pré-configurados - [x] Templates pré-configurados
- [ ] **EXECUTAR:** `psql $DATABASE_URL -f create_mdm_tables.sql` - [ ] **EXECUTAR:** `psql $DATABASE_URL -f create_mdm_tables.sql`
- [ ] **EXECUTAR:** `pm2 restart pointcontrol-api` - [ ] **EXECUTAR:** `pm2 restart noidle-api`
### Cliente (Implementação): ### Cliente (Implementação):
- [x] Código CLIENT_MDM.py criado - [x] Código CLIENT_MDM.py criado
@@ -385,9 +385,9 @@ print(f"Comandos: {commands}")
### 1. Backend (5 minutos): ### 1. Backend (5 minutos):
```bash ```bash
cd /var/www/pointcontrol/backend cd /var/www/noidle/backend
psql $DATABASE_URL -f create_mdm_tables.sql psql $DATABASE_URL -f create_mdm_tables.sql
pm2 restart pointcontrol-api pm2 restart noidle-api
``` ```
### 2. Testar API (2 minutos): ### 2. Testar API (2 minutos):

View File

@@ -1,8 +1,8 @@
# ⚡ Migração Rápida: PointControl → NoIdle # ⚡ Migração Rápida: NoIdle → NoIdle
## 🎯 Resumo Executivo ## 🎯 Resumo Executivo
Seu projeto mudou de **PointControl** para **NoIdle**, mas os arquivos e código ainda usam "pointcontrol" em vários lugares. Isso cria confusão e desorganização. Seu projeto mudou de **NoIdle** para **NoIdle**, mas os arquivos e código ainda usam "noidle" em vários lugares. Isso cria confusão e desorganização.
**Solução:** Script automatizado que renomeia tudo em 5 minutos! ⏱️ **Solução:** Script automatizado que renomeia tudo em 5 minutos! ⏱️
@@ -13,13 +13,13 @@ Seu projeto mudou de **PointControl** para **NoIdle**, mas os arquivos e código
### 1⃣ **Verificar o que vai mudar** ### 1⃣ **Verificar o que vai mudar**
```bash ```bash
# Ver arquivos que serão afetados # Ver arquivos que serão afetados
cd /var/www/pointcontrol cd /var/www/noidle
grep -r "pointcontrol" . --include="*.js" --include="*.json" --include="*.md" | wc -l grep -r "noidle" . --include="*.js" --include="*.json" --include="*.md" | wc -l
``` ```
### 2⃣ **Executar a migração** ### 2⃣ **Executar a migração**
```bash ```bash
sudo bash /var/www/pointcontrol/migrate_to_noidle.sh sudo bash /var/www/noidle/migrate_to_noidle.sh
``` ```
### 3⃣ **Verificar resultado** ### 3⃣ **Verificar resultado**
@@ -34,12 +34,12 @@ curl http://localhost:3005/api/health
| Item | Antes | Depois | | Item | Antes | Depois |
|------|-------|--------| |------|-------|--------|
| **Pasta** | `/var/www/pointcontrol` | `/var/www/noidle` | | **Pasta** | `/var/www/noidle` | `/var/www/noidle` |
| **PM2** | `pointcontrol-api` | `noidle-api` | | **PM2** | `noidle-api` | `noidle-api` |
| **Backend** | `"name": "pointcontrol-api"` | `"name": "noidle-api"` | | **Backend** | `"name": "noidle-api"` | `"name": "noidle-api"` |
| **Frontend** | `"name": "pointcontrol-frontend"` | `"name": "noidle-frontend"` | | **Frontend** | `"name": "noidle-frontend"` | `"name": "noidle-frontend"` |
| **Código** | `PointControl` | `NoIdle` | | **Código** | `NoIdle` | `NoIdle` |
| **Logs** | `console.log('PointControl API')` | `console.log('NoIdle API')` | | **Logs** | `console.log('NoIdle API')` | `console.log('NoIdle API')` |
--- ---
@@ -47,7 +47,7 @@ curl http://localhost:3005/api/health
1.**Backup automático** (salvo em `/tmp`) 1.**Backup automático** (salvo em `/tmp`)
2.**Para serviços** (PM2) 2.**Para serviços** (PM2)
3.**Renomeia pasta** (`pointcontrol``noidle`) 3.**Renomeia pasta** (`noidle``noidle`)
4.**Atualiza package.json** (backend e frontend) 4.**Atualiza package.json** (backend e frontend)
5.**Atualiza código** (todas as referências) 5.**Atualiza código** (todas as referências)
6.**Atualiza documentação** (arquivos .md) 6.**Atualiza documentação** (arquivos .md)
@@ -59,7 +59,7 @@ curl http://localhost:3005/api/health
## 🎬 Executar AGORA ## 🎬 Executar AGORA
```bash ```bash
cd /var/www/pointcontrol cd /var/www/noidle
sudo bash migrate_to_noidle.sh sudo bash migrate_to_noidle.sh
``` ```
@@ -93,11 +93,11 @@ pm2 delete noidle-api
# Restaurar pasta # Restaurar pasta
cd /var/www cd /var/www
mv noidle pointcontrol mv noidle noidle
# Restaurar PM2 # Restaurar PM2
cd pointcontrol/backend cd noidle/backend
pm2 start server.js --name pointcontrol-api pm2 start server.js --name noidle-api
pm2 save pm2 save
``` ```
@@ -109,7 +109,7 @@ pm2 save
```bash ```bash
cd /var/www/noidle cd /var/www/noidle
git add . git add .
git commit -m "refactor: Migração completa de PointControl para NoIdle" git commit -m "refactor: Migração completa de NoIdle para NoIdle"
git push git push
``` ```
@@ -118,7 +118,7 @@ git push
sudo nano /etc/nginx/sites-available/admin.noidle.tech sudo nano /etc/nginx/sites-available/admin.noidle.tech
# Verificar se tem paths antigos # Verificar se tem paths antigos
# /var/www/pointcontrol → /var/www/noidle # /var/www/noidle → /var/www/noidle
sudo nginx -t sudo nginx -t
sudo systemctl reload nginx sudo systemctl reload nginx
@@ -229,7 +229,7 @@ Git: /var/www/noidle (✅ atualizado)
## 🚀 Executar AGORA ## 🚀 Executar AGORA
```bash ```bash
cd /var/www/pointcontrol cd /var/www/noidle
sudo bash migrate_to_noidle.sh sudo bash migrate_to_noidle.sh
``` ```

View File

@@ -41,7 +41,7 @@ Após atualizar o cliente:
2. **Faça logon novamente** 2. **Faça logon novamente**
3. **Verifique os logs do servidor**: 3. **Verifique os logs do servidor**:
```bash ```bash
pm2 logs pointcontrol-api --lines 30 pm2 logs noidle-api --lines 30
``` ```
4. **Procure por**: 4. **Procure por**:
``` ```

View File

@@ -1,8 +1,8 @@
# 🔄 Plano de Migração: PointControl → NoIdle # 🔄 Plano de Migração: NoIdle → NoIdle
## 📊 Situação Atual ## 📊 Situação Atual
**Problema:** Projeto mudou de nome de "PointControl" para "NoIdle", mas a estrutura de pastas e código ainda usa "pointcontrol" em muitos lugares. **Problema:** Projeto mudou de nome de "NoIdle" para "NoIdle", mas a estrutura de pastas e código ainda usa "noidle" em muitos lugares.
**Resultado:** Confusão, inconsistência e bagunça no código. **Resultado:** Confusão, inconsistência e bagunça no código.
@@ -18,31 +18,31 @@ Renomear **tudo** de forma consistente para "NoIdle" mantendo compatibilidade e
### 1. **Pasta Principal** ### 1. **Pasta Principal**
``` ```
/var/www/pointcontrol → /var/www/noidle /var/www/noidle → /var/www/noidle
``` ```
### 2. **Serviço PM2** ### 2. **Serviço PM2**
``` ```
pointcontrol-api → noidle-api noidle-api → noidle-api
``` ```
### 3. **Package.json (Backend)** ### 3. **Package.json (Backend)**
```json ```json
{ {
"name": "pointcontrol-api" "noidle-api" "name": "noidle-api" "noidle-api"
} }
``` ```
### 4. **Package.json (Frontend)** ### 4. **Package.json (Frontend)**
```json ```json
{ {
"name": "pointcontrol-frontend" "noidle-frontend" "name": "noidle-frontend" "noidle-frontend"
} }
``` ```
### 5. **Referências no Código** ### 5. **Referências no Código**
- `PointControl``NoIdle` - `NoIdle``NoIdle`
- `pointcontrol``noidle` - `noidle``noidle`
- URLs antigas → URLs novas - URLs antigas → URLs novas
### 6. **Banco de Dados** ### 6. **Banco de Dados**
@@ -62,14 +62,14 @@ pointcontrol-api → noidle-api
```bash ```bash
# 1. Parar serviços # 1. Parar serviços
pm2 stop pointcontrol-api pm2 stop noidle-api
# 2. Backup do banco de dados # 2. Backup do banco de dados
pg_dump $DATABASE_URL > /tmp/noidle_backup_$(date +%Y%m%d).sql pg_dump $DATABASE_URL > /tmp/noidle_backup_$(date +%Y%m%d).sql
# 3. Backup dos arquivos # 3. Backup dos arquivos
cd /var/www cd /var/www
tar -czf pointcontrol_backup_$(date +%Y%m%d).tar.gz pointcontrol/ tar -czf noidle_backup_$(date +%Y%m%d).tar.gz noidle/
``` ```
--- ---
@@ -79,7 +79,7 @@ tar -czf pointcontrol_backup_$(date +%Y%m%d).tar.gz pointcontrol/
```bash ```bash
# Renomear pasta # Renomear pasta
cd /var/www cd /var/www
mv pointcontrol noidle mv noidle noidle
# Atualizar link simbólico se houver # Atualizar link simbólico se houver
# ln -sfn /var/www/noidle /var/www/app # ln -sfn /var/www/noidle /var/www/app
@@ -93,11 +93,11 @@ mv pointcontrol noidle
cd /var/www/noidle/backend cd /var/www/noidle/backend
# Atualizar package.json # Atualizar package.json
sed -i 's/"name": "pointcontrol-api"/"name": "noidle-api"/g' package.json sed -i 's/"name": "noidle-api"/"name": "noidle-api"/g' package.json
# Atualizar referências no código # Atualizar referências no código
grep -r "PointControl" . --include="*.js" -l | xargs sed -i 's/PointControl/NoIdle/g' grep -r "NoIdle" . --include="*.js" -l | xargs sed -i 's/NoIdle/NoIdle/g'
grep -r "pointcontrol" . --include="*.js" -l | xargs sed -i 's/pointcontrol/noidle/g' grep -r "noidle" . --include="*.js" -l | xargs sed -i 's/noidle/noidle/g'
# Reinstalar dependências # Reinstalar dependências
npm install npm install
@@ -111,11 +111,11 @@ npm install
cd /var/www/noidle/frontend cd /var/www/noidle/frontend
# Atualizar package.json # Atualizar package.json
sed -i 's/"name": "pointcontrol-frontend"/"name": "noidle-frontend"/g' package.json sed -i 's/"name": "noidle-frontend"/"name": "noidle-frontend"/g' package.json
# Atualizar referências no código # Atualizar referências no código
grep -r "PointControl" src/ -l | xargs sed -i 's/PointControl/NoIdle/g' grep -r "NoIdle" src/ -l | xargs sed -i 's/NoIdle/NoIdle/g'
grep -r "pointcontrol" src/ -l | xargs sed -i 's/pointcontrol/noidle/g' grep -r "noidle" src/ -l | xargs sed -i 's/noidle/noidle/g'
# Rebuild # Rebuild
npm run build npm run build
@@ -127,7 +127,7 @@ npm run build
```bash ```bash
# Deletar processo antigo # Deletar processo antigo
pm2 delete pointcontrol-api pm2 delete noidle-api
# Criar novo processo # Criar novo processo
cd /var/www/noidle/backend cd /var/www/noidle/backend
@@ -147,7 +147,7 @@ pm2 list
sudo nano /etc/nginx/sites-available/admin.noidle.tech sudo nano /etc/nginx/sites-available/admin.noidle.tech
# Atualizar paths se necessário # Atualizar paths se necessário
# root /var/www/pointcontrol/frontend/build; → /var/www/noidle/frontend/build; # root /var/www/noidle/frontend/build; → /var/www/noidle/frontend/build;
# Testar e recarregar # Testar e recarregar
sudo nginx -t sudo nginx -t
@@ -162,8 +162,8 @@ sudo systemctl reload nginx
cd /var/www/noidle cd /var/www/noidle
# Atualizar todos os arquivos .md # Atualizar todos os arquivos .md
find . -name "*.md" -type f -exec sed -i 's/PointControl/NoIdle/g' {} + find . -name "*.md" -type f -exec sed -i 's/NoIdle/NoIdle/g' {} +
find . -name "*.md" -type f -exec sed -i 's/pointcontrol/noidle/g' {} + find . -name "*.md" -type f -exec sed -i 's/noidle/noidle/g' {} +
``` ```
--- ---
@@ -175,7 +175,7 @@ cd /var/www/noidle
# Commit das mudanças # Commit das mudanças
git add . git add .
git commit -m "refactor: Migração completa de PointControl para NoIdle git commit -m "refactor: Migração completa de NoIdle para NoIdle
- Renomeadas todas as referências no código - Renomeadas todas as referências no código
- Atualizados package.json - Atualizados package.json
@@ -229,7 +229,7 @@ git push
``` ```
**Mudanças necessárias:** **Mudanças necessárias:**
- `console.log('✅ PointControl API')``console.log('✅ NoIdle API')` - `console.log('✅ NoIdle API')``console.log('✅ NoIdle API')`
- Nome do projeto no package.json - Nome do projeto no package.json
### 2. Frontend ### 2. Frontend
@@ -320,32 +320,32 @@ server {
#!/bin/bash #!/bin/bash
# migrate_to_noidle.sh # migrate_to_noidle.sh
echo "🔄 Iniciando migração PointControl → NoIdle" echo "🔄 Iniciando migração NoIdle → NoIdle"
# Parar serviços # Parar serviços
echo "⏸️ Parando serviços..." echo "⏸️ Parando serviços..."
pm2 stop pointcontrol-api pm2 stop noidle-api
# Renomear pasta # Renomear pasta
echo "📁 Renomeando pasta..." echo "📁 Renomeando pasta..."
cd /var/www cd /var/www
mv pointcontrol noidle mv noidle noidle
# Atualizar backend # Atualizar backend
echo "🔧 Atualizando backend..." echo "🔧 Atualizando backend..."
cd noidle/backend cd noidle/backend
sed -i 's/pointcontrol/noidle/g' package.json sed -i 's/noidle/noidle/g' package.json
sed -i 's/PointControl/NoIdle/g' server.js sed -i 's/NoIdle/NoIdle/g' server.js
# Atualizar frontend # Atualizar frontend
echo "🎨 Atualizando frontend..." echo "🎨 Atualizando frontend..."
cd ../frontend cd ../frontend
sed -i 's/pointcontrol/noidle/g' package.json sed -i 's/noidle/noidle/g' package.json
find src/ -name "*.jsx" -o -name "*.js" | xargs sed -i 's/PointControl/NoIdle/g' find src/ -name "*.jsx" -o -name "*.js" | xargs sed -i 's/NoIdle/NoIdle/g'
# Atualizar PM2 # Atualizar PM2
echo "🚀 Atualizando PM2..." echo "🚀 Atualizando PM2..."
pm2 delete pointcontrol-api pm2 delete noidle-api
cd ../backend cd ../backend
pm2 start server.js --name noidle-api pm2 start server.js --name noidle-api
pm2 save pm2 save
@@ -371,7 +371,7 @@ echo "Verifique: pm2 logs noidle-api"
### Opção 3: Manter Como Está ### Opção 3: Manter Como Está
- Criar alias/links simbólicos - Criar alias/links simbólicos
- Documentar que "pointcontrol" é o nome técnico - Documentar que "noidle" é o nome técnico
- Usar "NoIdle" apenas no frontend - Usar "NoIdle" apenas no frontend
- **NÃO recomendado** (mantém confusão) - **NÃO recomendado** (mantém confusão)
@@ -386,11 +386,11 @@ pm2 delete noidle-api
# Restaurar pasta # Restaurar pasta
cd /var/www cd /var/www
mv noidle pointcontrol mv noidle noidle
# Restaurar PM2 # Restaurar PM2
cd pointcontrol/backend cd noidle/backend
pm2 start server.js --name pointcontrol-api pm2 start server.js --name noidle-api
pm2 save pm2 save
# Verificar # Verificar

View File

@@ -150,7 +150,7 @@ ou
2. **No Servidor (verificar logs):** 2. **No Servidor (verificar logs):**
```bash ```bash
pm2 logs pointcontrol-api --lines 20 pm2 logs noidle-api --lines 20
``` ```
Procure por: Procure por:

View File

@@ -112,7 +112,7 @@
### Ver logs do servidor: ### Ver logs do servidor:
```bash ```bash
pm2 logs pointcontrol-api --lines 50 pm2 logs noidle-api --lines 50
``` ```
Procure por: Procure por:
@@ -122,7 +122,7 @@ Procure por:
### Verificar dados no banco: ### Verificar dados no banco:
```bash ```bash
cd /var/www/pointcontrol/backend cd /var/www/noidle/backend
node check_device_status.js DESKTOP-BC16GDH node check_device_status.js DESKTOP-BC16GDH
``` ```

View File

@@ -295,7 +295,7 @@ pyinstaller --onefile --windowed --name NoIdle CLIENTE_CORRIGIDO.py
### Criar Tabelas MDM ### Criar Tabelas MDM
```bash ```bash
cd /var/www/pointcontrol/backend cd /var/www/noidle/backend
psql $DATABASE_URL -f create_mdm_tables.sql psql $DATABASE_URL -f create_mdm_tables.sql
``` ```
@@ -423,13 +423,13 @@ curl -X POST http://localhost:3005/api/mdm/commands/poll \
### 1. Backend ### 1. Backend
```bash ```bash
cd /var/www/pointcontrol/backend cd /var/www/noidle/backend
# Criar tabelas MDM # Criar tabelas MDM
psql $DATABASE_URL -f create_mdm_tables.sql psql $DATABASE_URL -f create_mdm_tables.sql
# Reiniciar API # Reiniciar API
pm2 restart pointcontrol-api pm2 restart noidle-api
``` ```
### 2. Cliente ### 2. Cliente

View File

@@ -1,5 +1,5 @@
{ {
"name": "pointcontrol-api", "name": "noidle-api",
"version": "1.0.0", "version": "1.0.0",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {

View File

@@ -129,65 +129,49 @@ router.get('/', authenticateToken, async (req, res) => {
// GET /api/dashboard/stats - Estatísticas expandidas para o novo dashboard // GET /api/dashboard/stats - Estatísticas expandidas para o novo dashboard
router.get('/stats', async (req, res) => { router.get('/stats', async (req, res) => {
try { try {
// Estatísticas principais // Estatísticas básicas (simplificadas para funcionar sempre)
const mainStats = await query(` const usersCount = await query(`SELECT COUNT(*)::int as count FROM users`);
SELECT const devicesCount = await query(`SELECT COUNT(*)::int as count FROM devices`);
(SELECT COUNT(*) FROM users) as users, const activitiesCount = await query(`SELECT COUNT(*)::int as count FROM activities WHERE created_at::date = CURRENT_DATE`);
(SELECT COUNT(*) FROM teams) as teams, const devicesOnline = await query(`SELECT COUNT(*)::int as count FROM devices WHERE is_active = true`);
(SELECT COUNT(*) FROM devices) as devices,
(SELECT COUNT(*) FROM policies WHERE enabled = true) as policies,
(SELECT COUNT(*) FROM activities WHERE DATE(created_at) = CURRENT_DATE) as activities_today,
(SELECT COUNT(*) FROM devices WHERE status = 'online') as devices_online,
(SELECT COUNT(*) FROM devices WHERE status = 'offline') as devices_offline,
(SELECT COUNT(*) FROM policy_commands WHERE status IN ('pending', 'sent')) as pending_commands
`);
// Alertas e notificações // Times (pode não existir)
const alerts = await query(` let teamsCount = { rows: [{ count: 0 }] };
SELECT try {
(SELECT COUNT(*) FROM devices teamsCount = await query(`SELECT COUNT(*)::int as count FROM teams`);
WHERE last_seen < NOW() - INTERVAL '7 days' OR last_seen IS NULL) as devices_offline_7days, } catch (e) {
// Tabela teams pode não existir
}
(SELECT COUNT(*) FROM devices d // Dados MDM (podem não existir)
LEFT JOIN activities a ON d.device_id = a.device_id let policiesCount = { rows: [{ count: 0 }] };
WHERE a.created_at IS NULL OR a.created_at < NOW() - INTERVAL '24 hours') as devices_no_activity_24h, let pendingCommands = { rows: [{ count: 0 }] };
try {
(SELECT COUNT(*) FROM policy_executions policiesCount = await query(`SELECT COUNT(*)::int as count FROM policies WHERE enabled = true`);
WHERE status = 'failed' pendingCommands = await query(`SELECT COUNT(*)::int as count FROM policy_commands WHERE status IN ('pending', 'sent')`);
AND executed_at > NOW() - INTERVAL '24 hours') as failed_policies_24h, } catch (e) {
// Tabelas MDM não existem ainda
(SELECT COUNT(*) FROM devices }
WHERE device_info->>'needs_update' = 'true') as devices_need_update,
(SELECT COUNT(*) FROM devices
WHERE (device_info->>'disk_free_gb')::int < 10) as low_disk_space,
(SELECT COUNT(*) FROM users
WHERE last_login < NOW() - INTERVAL '30 days' OR last_login IS NULL) as inactive_users
`);
const stats = mainStats.rows[0];
const alertsData = alerts.rows[0];
res.json({ res.json({
success: true, success: true,
stats: { stats: {
users: parseInt(stats.users) || 0, users: parseInt(usersCount.rows[0].count) || 0,
teams: parseInt(stats.teams) || 0, teams: parseInt(teamsCount.rows[0].count) || 0,
devices: parseInt(stats.devices) || 0, devices: parseInt(devicesCount.rows[0].count) || 0,
policies: parseInt(stats.policies) || 0, policies: parseInt(policiesCount.rows[0].count) || 0,
activities_today: parseInt(stats.activities_today) || 0, activities_today: parseInt(activitiesCount.rows[0].count) || 0,
devices_online: parseInt(stats.devices_online) || 0, devices_online: parseInt(devicesOnline.rows[0].count) || 0,
devices_offline: parseInt(stats.devices_offline) || 0, devices_offline: parseInt(devicesCount.rows[0].count) - parseInt(devicesOnline.rows[0].count) || 0,
pending_commands: parseInt(stats.pending_commands) || 0 pending_commands: parseInt(pendingCommands.rows[0].count) || 0
}, },
alerts: { alerts: {
devices_offline_7days: parseInt(alertsData.devices_offline_7days) || 0, devices_offline_7days: 0, // TODO: implementar
devices_no_activity_24h: parseInt(alertsData.devices_no_activity_24h) || 0, devices_no_activity_24h: 0, // TODO: implementar
failed_policies_24h: parseInt(alertsData.failed_policies_24h) || 0, failed_policies_24h: 0, // TODO: implementar
devices_need_update: parseInt(alertsData.devices_need_update) || 0, devices_need_update: 0, // TODO: implementar
low_disk_space: parseInt(alertsData.low_disk_space) || 0, low_disk_space: 0, // TODO: implementar
inactive_users: parseInt(alertsData.inactive_users) || 0 inactive_users: 0 // TODO: implementar
} }
}); });

View File

@@ -13,7 +13,7 @@ const corsOptions = {
// Lista de origens permitidas // Lista de origens permitidas
const allowedOrigins = [ const allowedOrigins = [
'https://admin.noidle.tech', 'https://admin.noidle.tech',
'https://admin.pointcontrol.co', 'https://admin.noidle.co',
'http://localhost:3000', 'http://localhost:3000',
'http://localhost:3001' 'http://localhost:3001'
]; ];
@@ -81,6 +81,6 @@ app.use((err, req, res, next) => {
const PORT = process.env.PORT || 3005; const PORT = process.env.PORT || 3005;
app.listen(PORT, () => { app.listen(PORT, () => {
console.log(`PointControl API rodando na porta ${PORT}`); console.log(`NoIdle API rodando na porta ${PORT}`);
console.log(`📅 ${new Date().toISOString()}`); console.log(`📅 ${new Date().toISOString()}`);
}); });