The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;

use Pod::Usage;
use Getopt::Long;
use FindBin qw($Bin);

use lib "$Bin/../lib";
use MColPro::Util::TimeHelper;
use MColPro::SqlBase;
use MColPro::Exclude;

$|++;

=head1 SYNOPSIS

 $exe -c cluster -t table -node node -t 10mins -u user

 $exe -c cluster -t table -node node --free

 $exe -c cluster -t table -u user

=cut

my ( $cluster, $table, $nodes, $time, $user, $unlock );

my %pod_param = ( -input => __FILE__, -output => \*STDERR );

GetOptions
(
    "cluster=s" => \$cluster,
    "table=s"   => \$table,
    "node=s"    => \$nodes,
    "user=s"    => \$user,
    "due=i"     => \$time,
    "free"    => \$unlock,
) or Pod::Usage::pod2usage( %pod_param );

die Pod::Usage::pod2usage( %pod_param )
    unless $cluster && $table;

$time = MColPro::Util::TimeHelper::rel2sec( $time ) if $time;
$nodes ||= 'ALL';

my $conf = MColPro::SqlBase::conf_check( "$Bin/../config.yaml" );
my $recorder = MColPro::Exclude->new( $conf );

unless ( $unlock )
{
    die Pod::Usage::pod2usage( %pod_param ) unless $user;
    $recorder->set
    ( 
        cluster => $cluster."[$table]",
        node => $_,
        expire => time + ( $time || 300 ),
        user => $user
    );
}
else
{
    $recorder->delete( [ [ $cluster."[$table]", $_ ] ] );
}