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:
@@ -260,6 +260,6 @@ SystemEvents.SessionSwitch += (sender, e) => {
|
||||
|
||||
Para problemas técnicos, verifique:
|
||||
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)
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ Componente principal do dashboard com:
|
||||
### 1. Instalar Dependências
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol/frontend
|
||||
cd /var/www/noidle/frontend
|
||||
npm install @mui/material @emotion/react @emotion/styled @mui/icons-material
|
||||
```
|
||||
|
||||
@@ -373,7 +373,7 @@ import { LineChart, BarChart } from 'recharts';
|
||||
|
||||
### 1. Build Frontend:
|
||||
```bash
|
||||
cd /var/www/pointcontrol/frontend
|
||||
cd /var/www/noidle/frontend
|
||||
npm run build
|
||||
```
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Seu projeto NoIdle foi enviado para:
|
||||
|
||||
### Ver Status
|
||||
```bash
|
||||
cd /var/www/pointcontrol
|
||||
cd /var/www/noidle
|
||||
git status
|
||||
```
|
||||
|
||||
@@ -214,7 +214,7 @@ git push -u origin feature/minha-feature
|
||||
Sempre que fizer alterações:
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol
|
||||
cd /var/www/noidle
|
||||
|
||||
# Ver o que mudou
|
||||
git status
|
||||
|
||||
@@ -36,7 +36,7 @@ Este script verifica:
|
||||
|
||||
Abra o **Gerenciador de Tarefas** (Ctrl+Shift+Esc) e procure por:
|
||||
- `NoIdle`
|
||||
- `PointControl`
|
||||
- `NoIdle`
|
||||
- Qualquer processo relacionado a monitoramento
|
||||
|
||||
### 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`)
|
||||
2. Procure por serviços com nome contendo:
|
||||
- `NoIdle`
|
||||
- `PointControl`
|
||||
- `NoIdle`
|
||||
|
||||
### Verificar Conexões de Rede
|
||||
|
||||
@@ -58,7 +58,7 @@ Get-NetTCPConnection | Where-Object { $_.RemotePort -eq 443 -and $_.State -eq "E
|
||||
|
||||
Procure em:
|
||||
- `C:\Program Files\NoIdle\logs\`
|
||||
- `C:\Program Files\PointControl\logs\`
|
||||
- `C:\Program Files\NoIdle\logs\`
|
||||
- `%APPDATA%\NoIdle\logs\`
|
||||
- `%LOCALAPPDATA%\NoIdle\logs\`
|
||||
|
||||
|
||||
@@ -83,14 +83,14 @@ Implementei um **sistema MDM completo** no NoIdle, similar ao JumpCloud, permiti
|
||||
### 1. **Criar Tabelas no Banco**
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol/backend
|
||||
cd /var/www/noidle/backend
|
||||
psql $DATABASE_URL -f create_mdm_tables.sql
|
||||
```
|
||||
|
||||
### 2. **Reiniciar Backend**
|
||||
|
||||
```bash
|
||||
pm2 restart pointcontrol-api
|
||||
pm2 restart noidle-api
|
||||
```
|
||||
|
||||
### 3. **Criar Política via API**
|
||||
@@ -186,7 +186,7 @@ curl https://admin.noidle.tech/api/policies/1/executions
|
||||
- [x] Rotas implementadas
|
||||
- [x] Templates pré-configurados
|
||||
- [ ] **EXECUTAR:** `psql $DATABASE_URL -f create_mdm_tables.sql`
|
||||
- [ ] **EXECUTAR:** `pm2 restart pointcontrol-api`
|
||||
- [ ] **EXECUTAR:** `pm2 restart noidle-api`
|
||||
|
||||
### Cliente (Implementação):
|
||||
- [x] Código CLIENT_MDM.py criado
|
||||
@@ -385,9 +385,9 @@ print(f"Comandos: {commands}")
|
||||
|
||||
### 1. Backend (5 minutos):
|
||||
```bash
|
||||
cd /var/www/pointcontrol/backend
|
||||
cd /var/www/noidle/backend
|
||||
psql $DATABASE_URL -f create_mdm_tables.sql
|
||||
pm2 restart pointcontrol-api
|
||||
pm2 restart noidle-api
|
||||
```
|
||||
|
||||
### 2. Testar API (2 minutos):
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# ⚡ Migração Rápida: PointControl → NoIdle
|
||||
# ⚡ Migração Rápida: NoIdle → NoIdle
|
||||
|
||||
## 🎯 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! ⏱️
|
||||
|
||||
@@ -13,13 +13,13 @@ Seu projeto mudou de **PointControl** para **NoIdle**, mas os arquivos e código
|
||||
### 1️⃣ **Verificar o que vai mudar**
|
||||
```bash
|
||||
# Ver arquivos que serão afetados
|
||||
cd /var/www/pointcontrol
|
||||
grep -r "pointcontrol" . --include="*.js" --include="*.json" --include="*.md" | wc -l
|
||||
cd /var/www/noidle
|
||||
grep -r "noidle" . --include="*.js" --include="*.json" --include="*.md" | wc -l
|
||||
```
|
||||
|
||||
### 2️⃣ **Executar a migração**
|
||||
```bash
|
||||
sudo bash /var/www/pointcontrol/migrate_to_noidle.sh
|
||||
sudo bash /var/www/noidle/migrate_to_noidle.sh
|
||||
```
|
||||
|
||||
### 3️⃣ **Verificar resultado**
|
||||
@@ -34,12 +34,12 @@ curl http://localhost:3005/api/health
|
||||
|
||||
| Item | Antes | Depois |
|
||||
|------|-------|--------|
|
||||
| **Pasta** | `/var/www/pointcontrol` | `/var/www/noidle` |
|
||||
| **PM2** | `pointcontrol-api` | `noidle-api` |
|
||||
| **Backend** | `"name": "pointcontrol-api"` | `"name": "noidle-api"` |
|
||||
| **Frontend** | `"name": "pointcontrol-frontend"` | `"name": "noidle-frontend"` |
|
||||
| **Código** | `PointControl` | `NoIdle` |
|
||||
| **Logs** | `console.log('PointControl API')` | `console.log('NoIdle API')` |
|
||||
| **Pasta** | `/var/www/noidle` | `/var/www/noidle` |
|
||||
| **PM2** | `noidle-api` | `noidle-api` |
|
||||
| **Backend** | `"name": "noidle-api"` | `"name": "noidle-api"` |
|
||||
| **Frontend** | `"name": "noidle-frontend"` | `"name": "noidle-frontend"` |
|
||||
| **Código** | `NoIdle` | `NoIdle` |
|
||||
| **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`)
|
||||
2. ✅ **Para serviços** (PM2)
|
||||
3. ✅ **Renomeia pasta** (`pointcontrol` → `noidle`)
|
||||
3. ✅ **Renomeia pasta** (`noidle` → `noidle`)
|
||||
4. ✅ **Atualiza package.json** (backend e frontend)
|
||||
5. ✅ **Atualiza código** (todas as referências)
|
||||
6. ✅ **Atualiza documentação** (arquivos .md)
|
||||
@@ -59,7 +59,7 @@ curl http://localhost:3005/api/health
|
||||
## 🎬 Executar AGORA
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol
|
||||
cd /var/www/noidle
|
||||
sudo bash migrate_to_noidle.sh
|
||||
```
|
||||
|
||||
@@ -93,11 +93,11 @@ pm2 delete noidle-api
|
||||
|
||||
# Restaurar pasta
|
||||
cd /var/www
|
||||
mv noidle pointcontrol
|
||||
mv noidle noidle
|
||||
|
||||
# Restaurar PM2
|
||||
cd pointcontrol/backend
|
||||
pm2 start server.js --name pointcontrol-api
|
||||
cd noidle/backend
|
||||
pm2 start server.js --name noidle-api
|
||||
pm2 save
|
||||
```
|
||||
|
||||
@@ -109,7 +109,7 @@ pm2 save
|
||||
```bash
|
||||
cd /var/www/noidle
|
||||
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
|
||||
```
|
||||
|
||||
@@ -118,7 +118,7 @@ git push
|
||||
sudo nano /etc/nginx/sites-available/admin.noidle.tech
|
||||
|
||||
# Verificar se tem paths antigos
|
||||
# /var/www/pointcontrol → /var/www/noidle
|
||||
# /var/www/noidle → /var/www/noidle
|
||||
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
@@ -229,7 +229,7 @@ Git: /var/www/noidle (✅ atualizado)
|
||||
## 🚀 Executar AGORA
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol
|
||||
cd /var/www/noidle
|
||||
sudo bash migrate_to_noidle.sh
|
||||
```
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Após atualizar o cliente:
|
||||
2. **Faça logon novamente**
|
||||
3. **Verifique os logs do servidor**:
|
||||
```bash
|
||||
pm2 logs pointcontrol-api --lines 30
|
||||
pm2 logs noidle-api --lines 30
|
||||
```
|
||||
4. **Procure por**:
|
||||
```
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# 🔄 Plano de Migração: PointControl → NoIdle
|
||||
# 🔄 Plano de Migração: NoIdle → NoIdle
|
||||
|
||||
## 📊 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.
|
||||
|
||||
@@ -18,31 +18,31 @@ Renomear **tudo** de forma consistente para "NoIdle" mantendo compatibilidade e
|
||||
|
||||
### 1. **Pasta Principal**
|
||||
```
|
||||
/var/www/pointcontrol → /var/www/noidle
|
||||
/var/www/noidle → /var/www/noidle
|
||||
```
|
||||
|
||||
### 2. **Serviço PM2**
|
||||
```
|
||||
pointcontrol-api → noidle-api
|
||||
noidle-api → noidle-api
|
||||
```
|
||||
|
||||
### 3. **Package.json (Backend)**
|
||||
```json
|
||||
{
|
||||
"name": "pointcontrol-api" → "noidle-api"
|
||||
"name": "noidle-api" → "noidle-api"
|
||||
}
|
||||
```
|
||||
|
||||
### 4. **Package.json (Frontend)**
|
||||
```json
|
||||
{
|
||||
"name": "pointcontrol-frontend" → "noidle-frontend"
|
||||
"name": "noidle-frontend" → "noidle-frontend"
|
||||
}
|
||||
```
|
||||
|
||||
### 5. **Referências no Código**
|
||||
- `PointControl` → `NoIdle`
|
||||
- `pointcontrol` → `noidle`
|
||||
- `NoIdle` → `NoIdle`
|
||||
- `noidle` → `noidle`
|
||||
- URLs antigas → URLs novas
|
||||
|
||||
### 6. **Banco de Dados**
|
||||
@@ -62,14 +62,14 @@ pointcontrol-api → noidle-api
|
||||
|
||||
```bash
|
||||
# 1. Parar serviços
|
||||
pm2 stop pointcontrol-api
|
||||
pm2 stop noidle-api
|
||||
|
||||
# 2. Backup do banco de dados
|
||||
pg_dump $DATABASE_URL > /tmp/noidle_backup_$(date +%Y%m%d).sql
|
||||
|
||||
# 3. Backup dos arquivos
|
||||
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
|
||||
# Renomear pasta
|
||||
cd /var/www
|
||||
mv pointcontrol noidle
|
||||
mv noidle noidle
|
||||
|
||||
# Atualizar link simbólico se houver
|
||||
# ln -sfn /var/www/noidle /var/www/app
|
||||
@@ -93,11 +93,11 @@ mv pointcontrol noidle
|
||||
cd /var/www/noidle/backend
|
||||
|
||||
# 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
|
||||
grep -r "PointControl" . --include="*.js" -l | xargs sed -i 's/PointControl/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'
|
||||
grep -r "noidle" . --include="*.js" -l | xargs sed -i 's/noidle/noidle/g'
|
||||
|
||||
# Reinstalar dependências
|
||||
npm install
|
||||
@@ -111,11 +111,11 @@ npm install
|
||||
cd /var/www/noidle/frontend
|
||||
|
||||
# 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
|
||||
grep -r "PointControl" src/ -l | xargs sed -i 's/PointControl/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'
|
||||
grep -r "noidle" src/ -l | xargs sed -i 's/noidle/noidle/g'
|
||||
|
||||
# Rebuild
|
||||
npm run build
|
||||
@@ -127,7 +127,7 @@ npm run build
|
||||
|
||||
```bash
|
||||
# Deletar processo antigo
|
||||
pm2 delete pointcontrol-api
|
||||
pm2 delete noidle-api
|
||||
|
||||
# Criar novo processo
|
||||
cd /var/www/noidle/backend
|
||||
@@ -147,7 +147,7 @@ pm2 list
|
||||
sudo nano /etc/nginx/sites-available/admin.noidle.tech
|
||||
|
||||
# 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
|
||||
sudo nginx -t
|
||||
@@ -162,8 +162,8 @@ sudo systemctl reload nginx
|
||||
cd /var/www/noidle
|
||||
|
||||
# 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/pointcontrol/noidle/g' {} +
|
||||
find . -name "*.md" -type f -exec sed -i 's/NoIdle/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
|
||||
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
|
||||
- Atualizados package.json
|
||||
@@ -229,7 +229,7 @@ git push
|
||||
```
|
||||
|
||||
**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
|
||||
|
||||
### 2. Frontend
|
||||
@@ -320,32 +320,32 @@ server {
|
||||
#!/bin/bash
|
||||
# migrate_to_noidle.sh
|
||||
|
||||
echo "🔄 Iniciando migração PointControl → NoIdle"
|
||||
echo "🔄 Iniciando migração NoIdle → NoIdle"
|
||||
|
||||
# Parar serviços
|
||||
echo "⏸️ Parando serviços..."
|
||||
pm2 stop pointcontrol-api
|
||||
pm2 stop noidle-api
|
||||
|
||||
# Renomear pasta
|
||||
echo "📁 Renomeando pasta..."
|
||||
cd /var/www
|
||||
mv pointcontrol noidle
|
||||
mv noidle noidle
|
||||
|
||||
# Atualizar backend
|
||||
echo "🔧 Atualizando backend..."
|
||||
cd noidle/backend
|
||||
sed -i 's/pointcontrol/noidle/g' package.json
|
||||
sed -i 's/PointControl/NoIdle/g' server.js
|
||||
sed -i 's/noidle/noidle/g' package.json
|
||||
sed -i 's/NoIdle/NoIdle/g' server.js
|
||||
|
||||
# Atualizar frontend
|
||||
echo "🎨 Atualizando frontend..."
|
||||
cd ../frontend
|
||||
sed -i 's/pointcontrol/noidle/g' package.json
|
||||
find src/ -name "*.jsx" -o -name "*.js" | xargs sed -i 's/PointControl/NoIdle/g'
|
||||
sed -i 's/noidle/noidle/g' package.json
|
||||
find src/ -name "*.jsx" -o -name "*.js" | xargs sed -i 's/NoIdle/NoIdle/g'
|
||||
|
||||
# Atualizar PM2
|
||||
echo "🚀 Atualizando PM2..."
|
||||
pm2 delete pointcontrol-api
|
||||
pm2 delete noidle-api
|
||||
cd ../backend
|
||||
pm2 start server.js --name noidle-api
|
||||
pm2 save
|
||||
@@ -371,7 +371,7 @@ echo "Verifique: pm2 logs noidle-api"
|
||||
|
||||
### Opção 3: Manter Como Está
|
||||
- Criar alias/links simbólicos
|
||||
- Documentar que "pointcontrol" é o nome técnico
|
||||
- Documentar que "noidle" é o nome técnico
|
||||
- Usar "NoIdle" apenas no frontend
|
||||
- **NÃO recomendado** (mantém confusão)
|
||||
|
||||
@@ -386,11 +386,11 @@ pm2 delete noidle-api
|
||||
|
||||
# Restaurar pasta
|
||||
cd /var/www
|
||||
mv noidle pointcontrol
|
||||
mv noidle noidle
|
||||
|
||||
# Restaurar PM2
|
||||
cd pointcontrol/backend
|
||||
pm2 start server.js --name pointcontrol-api
|
||||
cd noidle/backend
|
||||
pm2 start server.js --name noidle-api
|
||||
pm2 save
|
||||
|
||||
# Verificar
|
||||
|
||||
@@ -150,7 +150,7 @@ ou
|
||||
|
||||
2. **No Servidor (verificar logs):**
|
||||
```bash
|
||||
pm2 logs pointcontrol-api --lines 20
|
||||
pm2 logs noidle-api --lines 20
|
||||
```
|
||||
|
||||
Procure por:
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
### Ver logs do servidor:
|
||||
```bash
|
||||
pm2 logs pointcontrol-api --lines 50
|
||||
pm2 logs noidle-api --lines 50
|
||||
```
|
||||
|
||||
Procure por:
|
||||
@@ -122,7 +122,7 @@ Procure por:
|
||||
|
||||
### Verificar dados no banco:
|
||||
```bash
|
||||
cd /var/www/pointcontrol/backend
|
||||
cd /var/www/noidle/backend
|
||||
node check_device_status.js DESKTOP-BC16GDH
|
||||
```
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@ pyinstaller --onefile --windowed --name NoIdle CLIENTE_CORRIGIDO.py
|
||||
### Criar Tabelas MDM
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol/backend
|
||||
cd /var/www/noidle/backend
|
||||
psql $DATABASE_URL -f create_mdm_tables.sql
|
||||
```
|
||||
|
||||
@@ -423,13 +423,13 @@ curl -X POST http://localhost:3005/api/mdm/commands/poll \
|
||||
### 1. Backend
|
||||
|
||||
```bash
|
||||
cd /var/www/pointcontrol/backend
|
||||
cd /var/www/noidle/backend
|
||||
|
||||
# Criar tabelas MDM
|
||||
psql $DATABASE_URL -f create_mdm_tables.sql
|
||||
|
||||
# Reiniciar API
|
||||
pm2 restart pointcontrol-api
|
||||
pm2 restart noidle-api
|
||||
```
|
||||
|
||||
### 2. Cliente
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "pointcontrol-api",
|
||||
"name": "noidle-api",
|
||||
"version": "1.0.0",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -129,65 +129,49 @@ router.get('/', authenticateToken, async (req, res) => {
|
||||
// GET /api/dashboard/stats - Estatísticas expandidas para o novo dashboard
|
||||
router.get('/stats', async (req, res) => {
|
||||
try {
|
||||
// Estatísticas principais
|
||||
const mainStats = await query(`
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM users) as users,
|
||||
(SELECT COUNT(*) FROM teams) as teams,
|
||||
(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
|
||||
`);
|
||||
// Estatísticas básicas (simplificadas para funcionar sempre)
|
||||
const usersCount = await query(`SELECT COUNT(*)::int as count FROM users`);
|
||||
const devicesCount = await query(`SELECT COUNT(*)::int as count FROM devices`);
|
||||
const activitiesCount = await query(`SELECT COUNT(*)::int as count FROM activities WHERE created_at::date = CURRENT_DATE`);
|
||||
const devicesOnline = await query(`SELECT COUNT(*)::int as count FROM devices WHERE is_active = true`);
|
||||
|
||||
// Alertas e notificações
|
||||
const alerts = await query(`
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM devices
|
||||
WHERE last_seen < NOW() - INTERVAL '7 days' OR last_seen IS NULL) as devices_offline_7days,
|
||||
|
||||
(SELECT COUNT(*) FROM devices d
|
||||
LEFT JOIN activities a ON d.device_id = a.device_id
|
||||
WHERE a.created_at IS NULL OR a.created_at < NOW() - INTERVAL '24 hours') as devices_no_activity_24h,
|
||||
|
||||
(SELECT COUNT(*) FROM policy_executions
|
||||
WHERE status = 'failed'
|
||||
AND executed_at > NOW() - INTERVAL '24 hours') as failed_policies_24h,
|
||||
|
||||
(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
|
||||
`);
|
||||
// Times (pode não existir)
|
||||
let teamsCount = { rows: [{ count: 0 }] };
|
||||
try {
|
||||
teamsCount = await query(`SELECT COUNT(*)::int as count FROM teams`);
|
||||
} catch (e) {
|
||||
// Tabela teams pode não existir
|
||||
}
|
||||
|
||||
const stats = mainStats.rows[0];
|
||||
const alertsData = alerts.rows[0];
|
||||
// Dados MDM (podem não existir)
|
||||
let policiesCount = { rows: [{ count: 0 }] };
|
||||
let pendingCommands = { rows: [{ count: 0 }] };
|
||||
try {
|
||||
policiesCount = await query(`SELECT COUNT(*)::int as count FROM policies WHERE enabled = true`);
|
||||
pendingCommands = await query(`SELECT COUNT(*)::int as count FROM policy_commands WHERE status IN ('pending', 'sent')`);
|
||||
} catch (e) {
|
||||
// Tabelas MDM não existem ainda
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
stats: {
|
||||
users: parseInt(stats.users) || 0,
|
||||
teams: parseInt(stats.teams) || 0,
|
||||
devices: parseInt(stats.devices) || 0,
|
||||
policies: parseInt(stats.policies) || 0,
|
||||
activities_today: parseInt(stats.activities_today) || 0,
|
||||
devices_online: parseInt(stats.devices_online) || 0,
|
||||
devices_offline: parseInt(stats.devices_offline) || 0,
|
||||
pending_commands: parseInt(stats.pending_commands) || 0
|
||||
users: parseInt(usersCount.rows[0].count) || 0,
|
||||
teams: parseInt(teamsCount.rows[0].count) || 0,
|
||||
devices: parseInt(devicesCount.rows[0].count) || 0,
|
||||
policies: parseInt(policiesCount.rows[0].count) || 0,
|
||||
activities_today: parseInt(activitiesCount.rows[0].count) || 0,
|
||||
devices_online: parseInt(devicesOnline.rows[0].count) || 0,
|
||||
devices_offline: parseInt(devicesCount.rows[0].count) - parseInt(devicesOnline.rows[0].count) || 0,
|
||||
pending_commands: parseInt(pendingCommands.rows[0].count) || 0
|
||||
},
|
||||
alerts: {
|
||||
devices_offline_7days: parseInt(alertsData.devices_offline_7days) || 0,
|
||||
devices_no_activity_24h: parseInt(alertsData.devices_no_activity_24h) || 0,
|
||||
failed_policies_24h: parseInt(alertsData.failed_policies_24h) || 0,
|
||||
devices_need_update: parseInt(alertsData.devices_need_update) || 0,
|
||||
low_disk_space: parseInt(alertsData.low_disk_space) || 0,
|
||||
inactive_users: parseInt(alertsData.inactive_users) || 0
|
||||
devices_offline_7days: 0, // TODO: implementar
|
||||
devices_no_activity_24h: 0, // TODO: implementar
|
||||
failed_policies_24h: 0, // TODO: implementar
|
||||
devices_need_update: 0, // TODO: implementar
|
||||
low_disk_space: 0, // TODO: implementar
|
||||
inactive_users: 0 // TODO: implementar
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ const corsOptions = {
|
||||
// Lista de origens permitidas
|
||||
const allowedOrigins = [
|
||||
'https://admin.noidle.tech',
|
||||
'https://admin.pointcontrol.co',
|
||||
'https://admin.noidle.co',
|
||||
'http://localhost:3000',
|
||||
'http://localhost:3001'
|
||||
];
|
||||
@@ -81,6 +81,6 @@ app.use((err, req, res, next) => {
|
||||
const PORT = process.env.PORT || 3005;
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`✅ PointControl API rodando na porta ${PORT}`);
|
||||
console.log(`✅ NoIdle API rodando na porta ${PORT}`);
|
||||
console.log(`📅 ${new Date().toISOString()}`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user