Files
DashDescomplicar/CHANGELOG.md
T
2026-04-23 03:07:37 +01:00

14 KiB
Executable File

Changelog

Todas as alterações notáveis neste projecto serão documentadas neste ficheiro.

[2.7.0] - 2026-04-23

Added — Observabilidade Fase 6A

  • Detector automático semanal de 6 tipos de padrões (SQL heurístico)
  • Tabela patterns com histórico week-over-week
  • CLI api/scripts/sessions-patterns.ts (dry-run + publish Desk #32)
  • systemd user timer observabilidade-patterns.timer (domingos 23:00)
  • Auto-abre ticket Desk quando padrão persiste ≥3 semanas consecutivas (severity warning+)

Added — Observabilidade Fase 6C (Worklog Import)

  • Tabela worklog_comments + parser HTML tolerante (h2/h3/h4) das discussões Desk #31, #32, #33
  • CLI api/scripts/sessions-worklog-import.ts com paginação via gateway MCP
  • systemd timer diário observabilidade-worklog-import.timer (03:00)
  • 3 detectores cruzados: actions_never_executed, skill_narrative_vs_data, worklog_pattern_frequency
  • Dep runtime: node-html-parser
  • Backfill inicial: 2312 comentários (465 + 33 + 1814) importados, span 2026-01-27 → 2026-04-23

Added — Observabilidade (Espelho)

  • Painel /sessions para replay de sessões Claude Code (lista + timeline detalhe)
  • Indexer api/scripts/sessions-indexer.ts (modos --full e --watch)
  • SQLite local em ~/.claude-work/sessions.db (1608 sessões, 61 projectos)
  • Rotas GET /api/sessions e GET /api/sessions/:id com validação Zod
  • Watcher chokidar incremental + systemd user service observabilidade-indexer.service
  • UI React com filtros (período/projecto/tool/skill/search) e timeline colapsável

Technical Notes

  • better-sqlite3 (WAL + synchronous=NORMAL) + chokidar
  • Batching transaccional 50 rows/commit no indexer (full scan: 1603 ficheiros em 8s)
  • Proxy Vite /apilocalhost:3001
  • Hub: /media/ealmeida/Dados/Hub/05-Projectos/Observabilidade/
  • Desk task #2059, project #65

[2.6.0] - 2026-02-14

Security - Vulnerabilidades Críticas (3)

  • CRÍTICO - Removidas credenciais hardcoded em api/db.ts
    • Eliminados fallbacks de password, user e database
    • Adicionada validação obrigatória de variáveis de ambiente
    • Adicionados timeouts de conexão (connectTimeout: 10s, acquireTimeout: 15s, timeout: 30s)
  • CRÍTICO - Removida API key hardcoded em api/routes/wp-monitor.ts
    • Eliminado fallback descomplicar-monitor-2026
    • Adicionada validação obrigatória de WP_MONITOR_API_KEY
  • VERIFICADO - Confirmado que .env nunca foi commitado ao Git
    • Credenciais locais nunca foram expostas no repositório
    • .gitignore a funcionar correctamente

Security - Vulnerabilidades Altas (6)

  • ALTO - Implementado Rate Limiting com express-rate-limit
    • 100 requests/15min em produção, 1000/15min em dev
    • Aplicado a todas as rotas /api/*
    • Headers standard para retry-after
  • ALTO - CORS restrito para produção
    • Whitelist: dashboard.descomplicar.pt, desk.descomplicar.pt
    • Localhost permitido apenas em desenvolvimento
    • Logs de bloqueios CORS
  • ALTO - Validação de input com Zod (Vulnerabilidade 2.4)
    • Middleware genérico validateRequest()
    • Schemas para WordPress Monitor, server metrics, dashboard, financial
    • Mensagens de erro detalhadas por campo
    • Aplicado em api/routes/wp-monitor.ts
  • ALTO - Autenticação backend OIDC (OPCIONAL)
    • Ativável via OIDC_ENABLED=true
    • Validação de Bearer tokens em todas as APIs
    • Compatibilidade mantida (desativado por defeito)
  • ALTO - Script de migração SSH key-based auth
    • /media/ealmeida/Dados/Dev/ClaudeDev/migrate-ssh-keys.sh
    • Gera chave ed25519, copia para 6 servidores
    • Instruções para remover passwords do .env
    • .env.example atualizado com SSH_PRIVATE_KEY_PATH
  • ALTO - Error handling melhorado (Vulnerabilidade 2.5)
    • Error IDs únicos (UUID) para tracking
    • Logs estruturados JSON em produção
    • Stack traces bloqueados em produção
    • Mensagens genéricas ao cliente

Added

  • api/middleware/validation.ts - Middleware e schemas Zod
  • migrate-ssh-keys.sh - Script de migração SSH
  • Dependências: express-rate-limit@7.x, zod@3.x, express-openid-connect@2.x

Changed

  • api/server.ts - Completamente refatorado com todas as melhorias de segurança
  • api/routes/wp-monitor.ts - Adicionada validação Zod no POST
  • .env.example - Documentação completa de segurança

Technical Notes

  • Auditoria completa: 3 críticas + 6 altas = 9 vulnerabilidades corrigidas
  • npm audit: 1 low → 0 vulnerabilidades
  • Hook Regra #47 ativado e a funcionar (security audit pre-commit)
  • Próximos passos: corrigir 6 médias + 5 baixas (Fase 3 e 4)

[2.5.0] - 2026-02-10

Added

  • CWP Backup Tool - Monitorização do backup_manager2 (sistema CWP nativo)
    • Verifica directório mais recente em /usr/local/cwp/.conf/backups/new/15/
    • Status: ok (<24h), warning (24-48h), critical (>48h)
    • Adicionado ao collector collect-backups.sh no servidor CWP

Changed

  • Secção Backups no dashboard agora mostra 5 items (era 4)

Technical Notes

  • Collector: /root/scripts/monitor/collect-backups.sh (item #5)
  • Detecta o subdirectório mais recente via ls -dt e calcula idade pelo mtime
  • Frontend não requer alterações - renderiza dinamicamente todos os backups da BD

[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 (/apihttp://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.