fix: TypeScript errors in server-metrics service

This commit is contained in:
2026-02-04 23:21:03 +00:00
parent f4160b60f9
commit bd21a8d511
5 changed files with 38 additions and 5 deletions

View File

@@ -11,5 +11,14 @@ FRONTEND_URL=http://localhost:5173
# Hetzner Cloud API # Hetzner Cloud API
HETZNER_TOKEN=your_hetzner_api_token_here HETZNER_TOKEN=your_hetzner_api_token_here
# SSH Servers (for metrics collection)
SERVER_HOST=176.9.3.158
SERVER_USER=root
SERVER_PASS=your_cwp_server_password
EASY_HOST=178.63.18.51
EASY_USER=root
EASY_PASS=your_easypanel_password
# Production URLs # Production URLs
# FRONTEND_URL=https://dash.descomplicar.pt # FRONTEND_URL=https://dash.descomplicar.pt

View File

@@ -2,6 +2,30 @@
Todas as alterações notáveis neste projecto serão documentadas neste ficheiro. Todas as alterações notáveis neste projecto serão documentadas neste ficheiro.
## [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 ## [2.2.0] - 2026-02-04
### Added ### Added

View File

@@ -34,7 +34,7 @@ router.post('/ssh', async (_req: Request, res: Response) => {
try { try {
const result = await collectSSHMetrics() const result = await collectSSHMetrics()
res.json({ res.json({
success: true, ok: true,
message: `SSH: ${result.success} OK, ${result.failed} failed`, message: `SSH: ${result.success} OK, ${result.failed} failed`,
...result ...result
}) })

View File

@@ -10,6 +10,7 @@ import monitorRouter from './routes/monitor.js'
import diagnosticRouter from './routes/diagnostic.js' import diagnosticRouter from './routes/diagnostic.js'
import hetznerRouter from './routes/hetzner.js' import hetznerRouter from './routes/hetzner.js'
import wpMonitorRouter from './routes/wp-monitor.js' import wpMonitorRouter from './routes/wp-monitor.js'
import serverMetricsRouter from './routes/server-metrics.js'
const app = express() const app = express()
const PORT = process.env.API_PORT || 3001 const PORT = process.env.API_PORT || 3001
@@ -32,6 +33,7 @@ app.use('/api/monitor', monitorRouter)
app.use('/api/diagnostic', diagnosticRouter) app.use('/api/diagnostic', diagnosticRouter)
app.use('/api/hetzner', hetznerRouter) app.use('/api/hetzner', hetznerRouter)
app.use('/api/wp-monitor', wpMonitorRouter) app.use('/api/wp-monitor', wpMonitorRouter)
app.use('/api/server-metrics', serverMetricsRouter)
// Error handling // Error handling
app.use((err: any, _req: express.Request, res: express.Response, _next: express.NextFunction) => { app.use((err: any, _req: express.Request, res: express.Response, _next: express.NextFunction) => {

View File

@@ -6,9 +6,7 @@
import db from '../db.js' import db from '../db.js'
import { collectAllMetrics as collectHetznerMetrics } from './hetzner.js' import { collectAllMetrics as collectHetznerMetrics } from './hetzner.js'
// Hetzner API Configuration // Hetzner API Configuration (used by hetzner.ts service)
const HETZNER_API_URL = 'https://api.hetzner.cloud/v1'
const HETZNER_TOKEN = process.env.HETZNER_TOKEN || ''
// SSH Configuration (from MCP ssh-unified) // SSH Configuration (from MCP ssh-unified)
interface SSHServer { interface SSHServer {
@@ -185,7 +183,7 @@ export async function syncHetznerToMonitoring(): Promise<number> {
m.status = 'up', m.status = 'up',
m.last_check = NOW() m.last_check = NOW()
WHERE m.category = 'server' AND m.name = ? WHERE m.category = 'server' AND m.name = ?
`, [hetznerName.includes('.') ? hetznerName : hetznerName, monitorName]) `, [namePattern, monitorName])
if ((result as any).affectedRows > 0) synced++ if ((result as any).affectedRows > 0) synced++
} }