64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
#!/usr/bin/env npx tsx
|
|
/**
|
|
* Hetzner Metrics Collector - Standalone Script
|
|
* Run via cron for periodic metrics collection
|
|
*
|
|
* Usage:
|
|
* 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 (every 5 minutes):
|
|
* */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()
|