51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
#!/usr/bin/env npx tsx
|
|
/**
|
|
* Site Availability Checker Script
|
|
* Run via cron every 5-15 minutes to check if sites are online
|
|
*
|
|
* Usage:
|
|
* npx tsx api/scripts/check-sites.ts
|
|
*
|
|
* Cron example (every 10 minutes):
|
|
* 0,10,20,30,40,50 * * * * cd /path/to/DashDescomplicar && npx tsx api/scripts/check-sites.ts
|
|
*
|
|
* @author Descomplicar | @link descomplicar.pt | @copyright 2026
|
|
*/
|
|
import 'dotenv/config'
|
|
import { checkAllSitesAvailability } from '../services/monitoring.js'
|
|
|
|
async function main() {
|
|
const startTime = Date.now()
|
|
console.log(`[${new Date().toISOString()}] Starting site availability check...`)
|
|
|
|
try {
|
|
const result = await checkAllSitesAvailability()
|
|
|
|
console.log(`[${new Date().toISOString()}] Check completed:`)
|
|
console.log(` - Sites checked: ${result.checked}`)
|
|
console.log(` - Up: ${result.up}`)
|
|
console.log(` - Down: ${result.down}`)
|
|
|
|
// Log any down sites
|
|
const downSites = result.results.filter(r => !r.available)
|
|
if (downSites.length > 0) {
|
|
console.log(` - Down sites:`)
|
|
for (const site of downSites) {
|
|
console.log(` - ${site.name}: ${site.error || 'No response'}`)
|
|
}
|
|
}
|
|
|
|
const elapsed = Date.now() - startTime
|
|
console.log(`[${new Date().toISOString()}] Done in ${elapsed}ms`)
|
|
|
|
// Exit with code 1 if any sites are down (useful for alerting)
|
|
process.exit(downSites.length > 0 ? 1 : 0)
|
|
|
|
} catch (error) {
|
|
console.error(`[${new Date().toISOString()}] Error:`, error)
|
|
process.exit(2)
|
|
}
|
|
}
|
|
|
|
main()
|