#!/usr/bin/perl -w use File::Basename; use Getopt::Long; use Amazon::SQS::Simple; my %opts; GetOptions( \%opts, 'reset', 'timeout=i', 'help', 'delete', 'create', 'force', 'info', 'access-key', 'secret-key', 'list-queues', ); my $scr = basename($0); my $queue_name = shift; my $AWSAccessKeyId = $opts{'access-key'} || $ENV{AWS_ACCESS_KEY}; my $SecretKey = $opts{'secret-key'} || $ENV{AWS_SECRET_KEY}; usage(0) if ($opts{help}); usage(1) if @ARGV; sub usage { my $status = shift || 0; print <ListQueues(); if ($queues) { foreach my $queue (@$queues) { (my $name = $queue->Endpoint()) =~ s|.*/||; printf ("%s (Endpoint: %s)\n", $name, $queue->Endpoint()); } } else { print "You don't have any queues (use --create to create one)" } exit(0); } usage(1) unless $queue_name; if ($opts{create}) { $q = q_create($queue_name); } else { $q = q_find($queue_name); } if ($opts{timeout}) { q_timeout($q, $opts{timeout}); } if ($opts{info}) { q_info($q); } if ($opts{reset}) { q_reset($q); } if ($opts{delete}) { q_delete($q, $opts{force}); } sub q_find { my $name = shift; my $queues = $sqs->ListQueues(QueueNamePrefix => $name); if ($queues) { my @matches = grep { $_->Endpoint() =~ m|/$name$|} @$queues; if (@matches > 1) { warn "[WARNING] Multiple queues found with name $name\n"; } if (@matches) { return $matches[0]; } } die "No queue called $name found (try using --list-queues)\n"; } sub q_create { my $name = shift; $sqs->CreateQueue($name); } sub q_delete { my $queue = shift; my $force = shift; my $href = $queue->Delete($force); } sub q_info { my $queue = shift; print "Endpoint: $queue\nAttributes:\n"; my $attrs = $queue->GetAttributes(); for (keys %$attrs) { print "$_ => $attrs->{$_}\n"; } } sub q_reset { my $queue = shift; my $t = q_timeout($queue); q_delete($queue, 1); q_create($queue_name); q_timeout($queue, $t); } sub q_timeout { my $queue = shift; my $t = shift; if (defined $t) { $queue->SetAttribute('VisibilityTimeout', $t); } else { my $href = $queue->GetAttributes(); return $href->{VisibilityTimeout}; } }