queue/cli/src/bin/queue-control.ts
2026-01-02 20:48:09 -08:00

55 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import { Command } from 'commander';
import { QueueClient } from '../queue-client';
const program = new Command();
program
.name('queue-control')
.description('Control queue operations')
.requiredOption('-q, --queue <name>', 'Queue name')
.option('-r, --redis <url>', 'Redis URL', process.env.REDIS_URL || 'redis://localhost:6379')
.argument('<command>', 'Command: pause, resume, drain')
.action(async (command, opts) => {
if (!['pause', 'resume', 'drain'].includes(command)) {
console.error('Error: Command must be one of: pause, resume, drain');
process.exit(1);
}
const client = new QueueClient({
queueName: opts.queue,
redisUrl: opts.redis,
});
try {
console.log('\n=== Queue Control ===\n');
console.log(`Queue: ${opts.queue}`);
console.log(`Command: ${command}\n`);
switch (command) {
case 'pause':
await client.pause();
console.log('✓ Queue paused');
break;
case 'resume':
await client.resume();
console.log('✓ Queue resumed');
break;
case 'drain':
await client.drain();
console.log('✓ Queue drained (all waiting jobs removed)');
break;
}
const isPaused = await client.isPaused();
const counts = await client.getJobCounts();
console.log(`\nCurrent state:`);
console.log(` Paused: ${isPaused}`);
console.log(` Waiting: ${counts.waiting}`);
console.log(` Active: ${counts.active}`);
} finally {
await client.close();
}
});
program.parse();