The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
# PODNAME: resque-tool
# ABSTRACT: CLI to examine and delete queues

use strict;
use Resque;
use Getopt::Long::Descriptive;

my $opt = getopt();
my $r = Resque->new( redis => $opt->redis );
if ($opt->show) {
    my @queues = $r->queues;
    for my $q (@queues) {
        print "$q";
        if ($opt->verbose) {
            printf( ": %d items", $r->size($q) );
        }
        print "\n";
    }
}
if ($opt->delete) {
    for my $name ( @{ $opt->delete || [] } ) {
        $r->remove_queue( $name );
        print "resque-tool: deleted queue: $name\n" if $opt->verbose;
    }
}
if ($opt->create) {
    for my $name ( @{ $opt->create || [] } ) {
        $r->create_queue( $name );
        print "resque-tool: create queue: $name\n" if $opt->verbose;
    }
}

sub getopt {
    my ($opt, $usage) = describe_options(
        "resque-tool \%o",
        [ 'redis|r=s',   "Redis server (default: 127.0.0.1:6379)", { default => '127.0.0.1:6379' } ],
        [ 'verbose|v',    "set resque-tool to be verbose" ],
        [ 'show|s',       "show queues" ],
        [ 'create|c=s@',  "create named queue(s)" ],
        [ 'delete|d=s@',  "delete named queue(s)" ],
        [ 'help',         "print usage message and exit" ],
    );
    print($usage->text), exit if $opt->help;

    return $opt;
}

__END__

=pod

=encoding UTF-8

=head1 NAME

resque-tool - CLI to examine and delete queues

=head1 VERSION

version 0.31

=head1 SYNOPSIS

Show all queues:

    resque-tool --show

Show all queues in verbose mode (with sizes):

    resque-tool --show --verbose

Create named queue(s):

    resque-tool --create queuename

Delete named queue(s):

    resque-tool --delete queuename

See --help option to see all options:

    resque-tool --help

=head1 AUTHOR

Diego Kuperman <diego@freekeylabs.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Diego Kuperman.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut