import { Cronhost } from 'cronhost';
const cronhost = new Cronhost({
apiKey: 'your-api-key'
});
async function monitorJobs() {
try {
// Trigger a schedule to create a new job
const job = await cronhost.triggerSchedule('schedule-id');
console.log('Created job:', job.id);
// Poll job status until completion
let currentJob = job;
while (currentJob.status === 'PENDING' || currentJob.status === 'RUNNING') {
console.log(`Job ${currentJob.id} status: ${currentJob.status}`);
// Wait 2 seconds before checking again
await new Promise(resolve => setTimeout(resolve, 2000));
// Fetch updated job status
currentJob = await cronhost.getJob(job.id);
}
// Job completed
console.log('Final job status:', currentJob.status);
if (currentJob.status === 'SUCCESS') {
console.log('Response status code:', currentJob.statusCode);
console.log('Response body:', currentJob.response);
} else if (currentJob.status === 'FAILED') {
console.log('Error message:', currentJob.errorMessage);
}
} catch (error) {
console.error('Monitoring error:', error.message);
}
}
// Get recent failed jobs for a specific schedule
async function getFailedJobs(scheduleId: string) {
const failedJobs = await cronhost.getJobs({
scheduleId,
status: 'FAILED',
limit: 20
});
console.log(`Found ${failedJobs.length} failed jobs for schedule ${scheduleId}`);
failedJobs.forEach(job => {
console.log(`Job ${job.id}: ${job.errorMessage}`);
});
}
// Get jobs across all schedules with pagination
async function getAllJobsPaginated() {
let page = 1;
let allJobs: Job[] = [];
while (true) {
const jobs = await cronhost.getJobs({
page,
limit: 100
});
if (jobs.length === 0) break;
allJobs.push(...jobs);
page++;
}
console.log(`Retrieved ${allJobs.length} total jobs`);
return allJobs;
}
monitorJobs();