#!/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): * 0,5,10,15,20,25,30,35,40,45,50,55 * * * * cd /path/to/DashDescomplicar && npx tsx api/scripts/hetzner-collector.ts * * @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()