fix: TypeScript errors in server-metrics service
This commit is contained in:
@@ -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
|
||||||
|
|||||||
24
CHANGELOG.md
24
CHANGELOG.md
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -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++
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user