2024-07-25 09:48:06 -03:00
import { Logger } from "../../../src/lib/logger" ;
2024-07-12 19:07:59 -04:00
import { getWebScraperQueue } from "../queue-service" ;
import { sendSlackWebhook } from "./slack" ;
2024-07-12 19:49:38 -04:00
export async function checkAlerts() {
2024-07-12 19:12:56 -04:00
try {
if (
process . env . SLACK_WEBHOOK_URL &&
process . env . ENV === "production" &&
process . env . ALERT_NUM_ACTIVE_JOBS &&
process . env . ALERT_NUM_WAITING_JOBS
) {
2024-07-25 09:48:06 -03:00
Logger . info ( "Initializing alerts" ) ;
2024-07-12 19:12:56 -04:00
const checkActiveJobs = async ( ) = > {
try {
const webScraperQueue = getWebScraperQueue ( ) ;
const activeJobs = await webScraperQueue . getActiveCount ( ) ;
if ( activeJobs > Number ( process . env . ALERT_NUM_ACTIVE_JOBS ) ) {
2024-07-25 09:48:06 -03:00
Logger . warn (
2024-07-12 19:12:56 -04:00
` Alert: Number of active jobs is over ${ process . env . ALERT_NUM_ACTIVE_JOBS } . Current active jobs: ${ activeJobs } . `
) ;
sendSlackWebhook (
` Alert: Number of active jobs is over ${ process . env . ALERT_NUM_ACTIVE_JOBS } . Current active jobs: ${ activeJobs } ` ,
true
) ;
} else {
2024-07-25 09:48:06 -03:00
Logger . info (
2024-07-12 19:12:56 -04:00
` Number of active jobs is under ${ process . env . ALERT_NUM_ACTIVE_JOBS } . Current active jobs: ${ activeJobs } `
) ;
}
} catch ( error ) {
2024-07-25 09:48:06 -03:00
Logger . error ( ` Failed to check active jobs: ${ error } ` ) ;
2024-07-12 19:12:56 -04:00
}
} ;
const checkWaitingQueue = async ( ) = > {
2024-07-12 19:07:59 -04:00
const webScraperQueue = getWebScraperQueue ( ) ;
2024-07-12 19:12:56 -04:00
const waitingJobs = await webScraperQueue . getWaitingCount ( ) ;
2024-07-12 19:57:12 -04:00
const paused = await webScraperQueue . getPausedCount ( ) ;
if ( waitingJobs !== paused && waitingJobs > Number ( process . env . ALERT_NUM_WAITING_JOBS ) ) {
2024-07-25 09:48:06 -03:00
Logger . warn (
2024-07-12 19:12:56 -04:00
` Alert: Number of waiting jobs is over ${ process . env . ALERT_NUM_WAITING_JOBS } . Current waiting jobs: ${ waitingJobs } . `
2024-07-12 19:07:59 -04:00
) ;
sendSlackWebhook (
2024-07-12 19:12:56 -04:00
` Alert: Number of waiting jobs is over ${ process . env . ALERT_NUM_WAITING_JOBS } . Current waiting jobs: ${ waitingJobs } . Scale up the number of workers with fly scale count worker=20 ` ,
2024-07-12 19:07:59 -04:00
true
) ;
}
2024-07-12 19:12:56 -04:00
} ;
2024-07-12 19:07:59 -04:00
2024-07-12 19:12:56 -04:00
const checkAll = async ( ) = > {
await checkActiveJobs ( ) ;
await checkWaitingQueue ( ) ;
} ;
2024-07-12 19:07:59 -04:00
2024-07-12 19:49:38 -04:00
await checkAll ( ) ;
// setInterval(checkAll, 10000); // Run every
2024-07-12 19:12:56 -04:00
}
} catch ( error ) {
2024-07-25 09:48:06 -03:00
Logger . error ( ` Failed to initialize alerts: ${ error } ` ) ;
2024-07-12 19:07:59 -04:00
}
}