feat(monitoring): add Beszel fleet integration to Monitor page
- New api/services/beszel.ts: Zod-validated Beszel API client with PocketBase auth, system fetching, and MySQL upsert - New api/routes/beszel.ts: GET /api/beszel (read) + POST /api/beszel/collect (trigger) - Updated api/server.ts: register route, add to 5min scheduler - Updated src/pages/Monitor.tsx: Fleet section showing all 17 systems with CPU/RAM/disk bars, status dots, container count, and link to Beszel dashboard Architecture: Beszel hub → API → tbl_eal_monitoring (category='fleet') → Monitor.tsx grid. Collected every 5min alongside existing metrics.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Beszel Fleet API Route
|
||||
* GET /api/beszel — fleet data from MySQL
|
||||
* POST /api/beszel/collect — trigger fresh collection
|
||||
* @author Descomplicar® | @link descomplicar.pt | @copyright 2026
|
||||
*/
|
||||
import { Router } from 'express'
|
||||
import { getFleetData, collectBeszelFleet } from '../services/beszel.js'
|
||||
|
||||
const router = Router()
|
||||
|
||||
// GET /api/beszel — fleet data
|
||||
router.get('/', async (_req, res) => {
|
||||
try {
|
||||
const data = await getFleetData()
|
||||
res.json(data)
|
||||
} catch (err: unknown) {
|
||||
const message = err instanceof Error ? err.message : 'Unknown error'
|
||||
console.error('[BESZEL API] GET failed:', message)
|
||||
res.status(500).json({ error: message })
|
||||
}
|
||||
})
|
||||
|
||||
// POST /api/beszel/collect — trigger collection
|
||||
router.post('/collect', async (_req, res) => {
|
||||
try {
|
||||
const data = await collectBeszelFleet()
|
||||
res.json({ ok: true, collected: data.total, up: data.up, down: data.down })
|
||||
} catch (err: unknown) {
|
||||
const message = err instanceof Error ? err.message : 'Unknown error'
|
||||
console.error('[BESZEL API] Collect failed:', message)
|
||||
res.status(500).json({ error: message })
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
Reference in New Issue
Block a user