# Changelog Todas as alterações notáveis neste projecto serão documentadas neste ficheiro. ## [2.4.0] - 2026-02-04 ### Fixed - ✅ **Monitor.tsx** - Corrigido URL da API de `/api/monitor.php` para `/api/monitor` - ✅ **Monitor.tsx** - Adaptada estrutura de dados para nova resposta da API (items agrupados por categoria) - ✅ **Monitoring Service** - Corrigido cálculo de stats (MySQL retornava strings) - ✅ **server.ts** - Adicionado serving de ficheiros estáticos em produção ### Changed - ✅ Interface `MonitorData` actualizada para reflectir estrutura real da API - ✅ Mock data actualizado com dados realistas da BD - ✅ Sumário usa `data.stats` em vez de `data.summary` para totais ### Added - ✅ **Dockerfile** - Configuração Docker com NODE_ENV=production - ✅ **Static serving** - Frontend servido pelo Express em produção - ✅ **SPA fallback** - Rotas não-API devolvem index.html ### Technical Notes - API endpoint: `/api/monitor` retorna dados de `tbl_eal_monitoring` - Categorias disponíveis: server, service, site, container, backup, wp_update, storage - Stats calculados server-side com conversão explícita para números - Em produção: Express serve `dist/` e faz fallback para SPA --- ## [2.3.0] - 2026-02-04 ### Added - ✅ **Server Metrics Unified** - Métricas de todos os servidores (Hetzner + SSH) - Serviço `/api/services/server-metrics.ts` - Collector unificado - Rota `/api/server-metrics/collect` - Recolhe todas as métricas - Rota `/api/server-metrics/ssh` - Métricas CWP e EasyPanel via SSH - Rota `/api/server-metrics/hetzner` - Sync Hetzner para monitoring - Integração com `tbl_eal_monitoring` existente ### Endpoints Server Metrics - `POST /api/server-metrics/collect` - Recolhe métricas de todos os servidores - `POST /api/server-metrics/ssh` - Apenas CWP Server e EasyPanel (via SSH) - `POST /api/server-metrics/hetzner` - Sync Hetzner para tabela monitoring ### Technical Notes - Servidores SSH: CWP Server (176.9.3.158), EasyPanel (178.63.18.51) - Servidores Hetzner: MCP Hub, Meet, WhatsApp, WhatSMS - Métricas: CPU%, RAM%, Disk%, Load Average, Network I/O - Actualiza `tbl_eal_monitoring` com dados reais - Cron recomendado: `curl -X POST localhost:3001/api/server-metrics/collect` a cada 5 min --- ## [2.2.0] - 2026-02-04 ### Added - ✅ **WordPress Monitor API** - Endpoint para receber dados do plugin WP - Rota `POST /api/wp-monitor` - Recebe dados de sites WordPress - Rota `GET /api/wp-monitor` - Lista sites monitorizados - Rota `GET /api/wp-monitor?test` - Testar conexão - Autenticação via header `X-API-Key` - ✅ **Site Availability Checker** - Verificação de disponibilidade HTTP - Função `checkSiteAvailability()` em `/api/services/monitoring.ts` - Função `checkAllSitesAvailability()` para verificar todos os sites - Script cron `/api/scripts/check-sites.ts` para verificação periódica - Rota `POST /api/monitor/check-sites` para trigger manual ### Changed - ✅ `/api/routes/monitor.ts` - Adicionada rota POST para check manual ### Technical Notes - Script de cron: `npx tsx api/scripts/check-sites.ts` - Recomendado: executar a cada 10 minutos via cron - Sites down são marcados com status `down` na BD - Plugin WP actualizado para usar `dash.descomplicar.pt/api/wp-monitor` --- ## [2.1.0] - 2026-02-04 ### Added - ✅ **Hetzner Cloud Monitoring** - Monitorização de VPS Hetzner - Tabela `tbl_eal_hetzner_servers` - Inventário de servidores - Tabela `tbl_eal_hetzner_metrics` - Métricas time-series - View `v_eal_hetzner_latest` - Últimas métricas por servidor - Serviço `/api/services/hetzner.ts` - Integração API Hetzner Cloud - Rotas `/api/hetzner/*` para dashboard e collectors ### Endpoints Hetzner - `GET /api/hetzner` - Dashboard (servidores + últimas métricas) - `POST /api/hetzner/sync` - Sincronizar lista de servidores - `POST /api/hetzner/collect` - Recolher métricas de todos os servidores - `POST /api/hetzner/collect/:id` - Recolher métricas de um servidor - `GET /api/hetzner/history/:id` - Histórico de métricas (24h default) - `POST /api/hetzner/cleanup` - Limpar métricas antigas (7 dias default) ### Technical Notes - Token Hetzner armazenado em `.env` (HETZNER_TOKEN) - Métricas: CPU%, disk IOPS/bandwidth, network bandwidth/pps - Retenção de dados: 7 dias (configurável) - Collector pode ser executado via cron: `curl -X POST localhost:3001/api/hetzner/collect` ## [2.0.1] - 2026-02-04 ### Added - ✅ Endpoint `/api/diagnostic` para testes individuais de cada função - ✅ Dependência `dotenv` ^16.6.1 para carregamento de variáveis de ambiente ### Fixed - ✅ Carregamento de variáveis de ambiente (`.env`) antes de inicializar connection pool MySQL - ✅ Configuração de `DB_HOST` para servidor remoto (176.9.3.158) - ✅ Tratamento de erros EADDRINUSE (porta já em uso) ### Changed - ✅ Título da aplicação: "Plan EAL" → "Dashboard Descomplicar · Dados Reais" - ✅ Logs do servidor mais detalhados com separadores visuais ## [2.0.0] - 2026-02-04 ### Added #### API Node.js/Express Completa - ✅ Servidor Express em `/api/server.ts` - ✅ Connection pool MySQL em `/api/db.ts` - ✅ Proxy Vite configurado (`/api` → `http://localhost:3001`) #### Serviços - ✅ **Google Calendar API** (`/api/services/calendar.ts`) - Integração com calendários pessoal e profissional - Eventos de hoje e da semana - OAuth2 configurado com refresh token - ✅ **Dashboard Queries** (`/api/services/dashboard.ts`) - Tasks: urgente, alta prioridade, vencidas, em testes, esta semana - Monday Mood (tag especial #67) - Tickets abertos - Leads: contactar, followup, proposta - Projectos activos - Timesheet semanal (staff_id=1) - Billing 360 (clientes com horas facturadas vs entregues) - Pipeline completo (leads, estimates, proposals) - ✅ **Monitoring Queries** (`/api/services/monitoring.ts`) - Query à tabela `tbl_eal_monitoring` - Summary por categoria - Status geral (ok/warning/critical) #### Endpoints - ✅ `GET /api/dashboard` - Dashboard completo - ✅ `GET /api/monitor` - Monitorização de sistemas - ✅ `GET /api/health` - Health check #### Frontend - ✅ `App.tsx` actualizado para usar `/api/dashboard` (linha 425) - ✅ Fallback para dados mock em caso de erro (desenvolvimento) #### Infraestrutura - ✅ Scripts npm: - `npm run dev` - Vite + API em paralelo (concurrently) - `npm run dev:api` - API apenas (tsx watch) - `npm run dev:ui` - Vite apenas - `npm start` - Produção (serve API + static build) #### Dependências Adicionadas - `express` ^4.19.2 - `cors` ^2.8.5 - `mysql2` ^3.11.5 - `googleapis` ^144.0.0 - `concurrently` ^9.1.2 (dev) - `tsx` ^4.19.2 (dev) - `@types/express` ^5.0.0 (dev) - `@types/cors` ^2.8.17 (dev) #### Documentação - ✅ `api/README.md` - Documentação completa da API - ✅ `.env.example` - Template de configuração ### Changed - Título da tarefa #1556: "Dashboard Descomplicar - Dados Reais e API" - `vite.config.ts` - Adicionado proxy para `/api` - `package.json` - Nome alterado para `dash-descomplicar` ### Migrated Toda a lógica do PHP (`plan-eal.descomplicar.pt`) migrada para TypeScript: #### De `index.php`: - ✅ Google Calendar API (pessoal + profissional) - ✅ Todas as queries à BD Desk CRM - ✅ Billing 360 (horas facturadas vs entregues) - ✅ Pipeline de vendas - ✅ Cálculo de timesheet semanal - ✅ Monday Mood (tarefas com tag especial) #### De `monitor.php`: - ✅ Query à `tbl_eal_monitoring` - ✅ Organização por categoria - ✅ Cálculo de status geral ### Technical Notes #### Semana: Segunda a Domingo - Função `getWeekRange()` calcula início da semana (segunda-feira) - Timesheet usa UNIX timestamp para compatibilidade com dados antigos #### Billing 360 - Calcula horas entregues de `tbltaskstimers` - Compara com horas facturadas de `billing_360_invoices` - Status: `credit` (>5h crédito), `debt` (<-5h débito), `ok` (entre -5 e +5) #### Pipeline - Agrega leads por fase (`tblleads_status`) - Inclui estimates (status 2=Enviado, 3=Visto) - Inclui proposals (status 4) - Valor total calculado em SQL #### Performance - Queries em paralelo com `Promise.all()` - Connection pool MySQL (10 conexões) - Vite proxy em dev (zero CORS issues) ### Pending - [ ] Sistema de autenticação (JWT ou sessões) - [ ] Deploy em produção (EasyPanel) - [ ] Configurar variáveis de ambiente em produção - [ ] Testar Google Calendar OAuth refresh ### Breaking Changes - ❌ PHP backend descontinuado (`plan-eal.descomplicar.pt` será apagado) - ✅ Nova API Node.js/Express em `/api` - ✅ React dashboard em `dash.descomplicar.pt` --- ## [1.0.0] - 2026-02-03 ### Added - Dashboard React inicial com Vite + TypeScript - UI com Tailwind CSS 4 + Framer Motion - Design system: Glassmorphism + Bento Grid - Componentes: HeroStat, GlassCard, ProgressRing, Sparkline - Dados mock para demonstração - Autenticação Authentik (OIDC) configurada - Deploy EasyPanel em `dash.descomplicar.pt` ### Note Versão inicial com dados mock. API implementada na v2.0.0.