2021-09-05 08:05:04 +00:00
using CommandLine ;
2021-09-04 09:33:59 +00:00
using RabbitMQ.Client ;
2021-09-04 12:01:03 +00:00
using Tapeti.Cmd.ConsoleHelper ;
2021-09-04 09:33:59 +00:00
namespace Tapeti.Cmd.Verbs
{
[Verb("purge", HelpText = "Removes all messages from a queue destructively.")]
[ExecutableVerb(typeof(PurgeVerb))]
public class PurgeOptions : BaseConnectionOptions
{
[Option('q', "queue", Required = true, HelpText = "The queue to purge.")]
public string QueueName { get ; set ; }
[Option("confirm", HelpText = "Confirms the purging of the specified queue. If not provided, an interactive prompt will ask for confirmation.", Default = false)]
public bool Confirm { get ; set ; }
}
public class PurgeVerb : IVerbExecuter
{
private readonly PurgeOptions options ;
public PurgeVerb ( PurgeOptions options )
{
this . options = options ;
}
2021-09-04 12:01:03 +00:00
public void Execute ( IConsole console )
2021-09-04 09:33:59 +00:00
{
2021-09-04 12:01:03 +00:00
var consoleWriter = console . GetPermanentWriter ( ) ;
2021-09-04 09:33:59 +00:00
if ( ! options . Confirm )
{
2021-09-04 12:01:03 +00:00
if ( ! consoleWriter . ConfirmYesNo ( $"Do you want to purge the queue '{options.QueueName}'?" ) )
2021-09-04 09:33:59 +00:00
return ;
}
var factory = new ConnectionFactory
{
HostName = options . Host ,
Port = options . Port ,
VirtualHost = options . VirtualHost ,
UserName = options . Username ,
Password = options . Password
} ;
using var connection = factory . CreateConnection ( ) ;
using var channel = connection . CreateModel ( ) ;
var messageCount = channel . QueuePurge ( options . QueueName ) ;
2021-09-04 12:01:03 +00:00
consoleWriter . WriteLine ( $"{messageCount} message{(messageCount != 1 ? " s " : " ")} purged from '{options.QueueName}'." ) ;
2021-09-04 09:33:59 +00:00
}
}
}