Files
DashDescomplicar/api/scripts/hetzner-collector.ts
Emanuel Almeida 13608a69bf feat: WordPress Monitor API + Site Availability Checker
- Add POST /api/wp-monitor endpoint for WP plugin data
- Add GET /api/wp-monitor for listing monitored sites
- Add checkSiteAvailability() function for HTTP health checks
- Add checkAllSitesAvailability() for batch checking
- Add /api/scripts/check-sites.ts for cron execution
- Add POST /api/monitor/check-sites for manual trigger

DeskCRM Task: #1556

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:12:32 +00:00

64 lines
2.0 KiB
TypeScript

#!/usr/bin/env npx tsx
/**
* Hetzner Metrics Collector - Standalone Script
* Pode ser executado via cron para recolha periódica de métricas
*
* Uso:
* npx tsx api/scripts/hetzner-collector.ts
* npx tsx api/scripts/hetzner-collector.ts --sync # Sync + Collect
* npx tsx api/scripts/hetzner-collector.ts --cleanup # Collect + Cleanup
* npx tsx api/scripts/hetzner-collector.ts --all # Sync + Collect + Cleanup
*
* Cron example (a cada 5 minutos):
* */5 * * * * cd /path/to/DashDescomplicar && npx tsx api/scripts/hetzner-collector.ts >> /var/log/hetzner-collector.log 2>&1
*
* @author Descomplicar® | @link descomplicar.pt | @copyright 2026
*/
import 'dotenv/config'
import {
syncServers,
collectAllMetrics,
cleanupOldMetrics
} from '../services/hetzner.js'
const args = process.argv.slice(2)
const doSync = args.includes('--sync') || args.includes('--all')
const doCleanup = args.includes('--cleanup') || args.includes('--all')
async function main() {
const timestamp = new Date().toISOString()
console.log(`[${timestamp}] Hetzner Collector Started`)
console.log('='.repeat(50))
try {
// 1. Sync servers (optional)
if (doSync) {
console.log('[SYNC] Sincronizando lista de servidores...')
const synced = await syncServers()
console.log(`[SYNC] ✅ ${synced} servidores sincronizados`)
}
// 2. Collect metrics (always)
console.log('[COLLECT] Recolhendo métricas...')
const result = await collectAllMetrics()
console.log(`[COLLECT] ✅ ${result.success} OK, ${result.failed} falharam`)
// 3. Cleanup old data (optional)
if (doCleanup) {
console.log('[CLEANUP] Limpando métricas antigas (>7 dias)...')
const deleted = await cleanupOldMetrics(7)
console.log(`[CLEANUP] ✅ ${deleted} entradas eliminadas`)
}
console.log('='.repeat(50))
console.log(`[${new Date().toISOString()}] Collector Finished Successfully`)
process.exit(0)
} catch (error) {
console.error('[ERROR] Collector failed:', error)
process.exit(1)
}
}
main()