55 lines
1.6 KiB
JavaScript
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();
|