Moved project directories and files to an empty local repo
This commit is contained in:
306
Show_Submission/check_reservations
Executable file
306
Show_Submission/check_reservations
Executable file
@@ -0,0 +1,306 @@
|
||||
#!/usr/bin/env perl
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: check_reservations
|
||||
#
|
||||
# USAGE: ./check_reservations
|
||||
#
|
||||
# DESCRIPTION: Interrogate the 'reservations' table in the live HPR database
|
||||
# through an SSH tunnel. The result is used to look at and
|
||||
# report the state of processing on the local system.
|
||||
#
|
||||
# The original version of this script ran a remote command on
|
||||
# the VPS, but was very vulnerable to VPS and tunnel failure.
|
||||
#
|
||||
# OPTIONS: ---
|
||||
# REQUIREMENTS: ---
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.0.8
|
||||
# CREATED: 2019-01-07 12:29:06
|
||||
# REVISION: 2023-07-01 23:04:16
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use feature qw{ postderef say signatures state };
|
||||
no warnings qw{ experimental::postderef experimental::signatures };
|
||||
|
||||
use Carp;
|
||||
use Getopt::Long;
|
||||
use Config::General;
|
||||
use DBI;
|
||||
|
||||
#
|
||||
# Version number (manually incremented)
|
||||
#
|
||||
our $VERSION = '0.0.8';
|
||||
|
||||
#
|
||||
# Script and directory names
|
||||
#
|
||||
( my $PROG = $0 ) =~ s|.*/||mx;
|
||||
( my $DIR = $0 ) =~ s|/?[^/]*$||mx;
|
||||
$DIR = '.' unless $DIR;
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Declarations
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# Constants and other declarations
|
||||
#
|
||||
my $basedir = "$ENV{HOME}/HPR/Show_Submission";
|
||||
my $cache = "$basedir/shownotes";
|
||||
my $configfile = "$basedir/.hpr_db.cfg";
|
||||
my $reserved = '9999';
|
||||
|
||||
my ( $dbh, $sth1, $h1 );
|
||||
my ( $show, @res);
|
||||
my $count = 0;
|
||||
|
||||
#
|
||||
# Interpretations of the new status values in the database
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# The sequence seems to be:
|
||||
# 1. User selects a free slot (request.php), status becomes
|
||||
# REQUEST_UNVERIFIED, verified is 0, no email address recorded yet, IP
|
||||
# address recorded
|
||||
# 2. User enters the email address to receive the link to the form and presses
|
||||
# 'Next'. An email is sent with the link and status changes to
|
||||
# REQUEST_EMAIL_SENT, now the email address is filled out but verified
|
||||
# is 0 still.
|
||||
# 3. User clicks the link in the email they received which takes them to the
|
||||
# form, now the state becomes EMAIL_LINK_CLICKED and verified is 1. We see
|
||||
# this as 'pending', the first status we take account of since we exclude
|
||||
# all records in the 'reservations' table where verified is 0.
|
||||
# 4. The user completes the form and hits the 'Send' button. When all files
|
||||
# have been uploaded the status changes to SHOW_SUBMITTED.
|
||||
#
|
||||
# 2022-04-07 New values added:
|
||||
#
|
||||
# 5. METADATA_PROCESSED signals that the processing of notes and related
|
||||
# things is complete
|
||||
# 6. MEDIA_TRANSCODED indicates that Ken has done the transcoding and posted
|
||||
# the show.
|
||||
# 7. UPLOADED_TO_IA indicates that the IA upload has been done (by me usually)
|
||||
# 8. UPLOADED_TO_RSYNC_NET final step shows that the files (audio & assets)
|
||||
# have been archived/backed up
|
||||
#
|
||||
# 2023-07-02 New value added for reserve shows
|
||||
#
|
||||
# 9. RESERVE_SHOW_SUBMITTED indication that a reserve show has been uploaded
|
||||
# and stashed away ready for adding to a slot at a later time.
|
||||
#
|
||||
# I don't think there's a way of knowing what has happened between
|
||||
# EMAIL_LINK_CLICKED and SHOW_SUBMITTED.
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
my %status = (
|
||||
REQUEST_UNVERIFIED => 'unverified', # shouldn't be returned
|
||||
REQUEST_EMAIL_SENT => 'email sent', # been sent the email with a link
|
||||
EMAIL_LINK_CLICKED => 'pending', # filling in the form/sending the show
|
||||
RESERVE_SHOW_SUBMITTED => 'reserved show', # reserve show received
|
||||
SHOW_SUBMITTED => 'uploaded', # all done
|
||||
METADATA_PROCESSED => 'metadata processed', # notes processed, etc
|
||||
SHOW_POSTED => 'in the database', # awaiting audio transcoding
|
||||
MEDIA_TRANSCODED => 'transcoded', # audio transcoded
|
||||
UPLOADED_TO_IA => 'uploaded to IA', # uploaded to IA
|
||||
UPLOADED_TO_RSYNC_NET => 'archived', # archived on rsync.net
|
||||
);
|
||||
|
||||
#
|
||||
# Enable Unicode mode
|
||||
#
|
||||
binmode STDOUT, ":encoding(UTF-8)";
|
||||
binmode STDERR, ":encoding(UTF-8)";
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Options and arguments
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# Process options
|
||||
#
|
||||
my %options;
|
||||
Options( \%options );
|
||||
|
||||
#
|
||||
# Default help
|
||||
#
|
||||
Usage() if ( $options{'help'} );
|
||||
|
||||
#
|
||||
# Collect options
|
||||
#
|
||||
my $cfgfile
|
||||
= ( defined( $options{config} ) ? $options{config} : $configfile );
|
||||
|
||||
#
|
||||
# Sanity checks
|
||||
#
|
||||
die "Unable to find $cfgfile\n" unless ( -e $cfgfile );
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Configuration file - load data
|
||||
#-------------------------------------------------------------------------------
|
||||
my $conf = Config::General->new(
|
||||
-ConfigFile => $cfgfile,
|
||||
-InterPolateVars => 1,
|
||||
-ExtendedAccess => 1,
|
||||
);
|
||||
my %config = $conf->getall();
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Connect to the database
|
||||
#-------------------------------------------------------------------------------
|
||||
my $dbhost = $config{database}->{host} // '127.0.0.1';
|
||||
my $dbport = $config{database}->{port} // 3306;
|
||||
my $dbname = $config{database}->{name};
|
||||
my $dbuser = $config{database}->{user};
|
||||
my $dbpwd = $config{database}->{password};
|
||||
$dbh = DBI->connect( "dbi:mysql:host=$dbhost;port=$dbport;database=$dbname",
|
||||
$dbuser, $dbpwd, { AutoCommit => 1 } )
|
||||
or croak $DBI::errstr;
|
||||
|
||||
#
|
||||
# Enable client-side UTF8
|
||||
#
|
||||
$dbh->{mysql_enable_utf8} = 1;
|
||||
|
||||
#
|
||||
# Set the local timezone to UTC for this connection
|
||||
#
|
||||
$dbh->do("set time_zone = '+00:00'") or carp $dbh->errstr;
|
||||
|
||||
#
|
||||
# Query the reservations table for shows which are more or less kosher.
|
||||
# 2023-07-01 the episode number 9999 is currently a marker that the show is
|
||||
# for the reserve queue, so we omit it
|
||||
#
|
||||
$sth1 = $dbh->prepare(
|
||||
q{SELECT * FROM reservations WHERE ep_num > 0 ORDER BY timestamp});
|
||||
$sth1->execute();
|
||||
if ( $dbh->err ) {
|
||||
carp $dbh->errstr;
|
||||
}
|
||||
|
||||
#
|
||||
# Collect details of all the verified reservations found, with an
|
||||
# interpretation of their state and the email of the sender. For each show
|
||||
# look at its local state and report it.
|
||||
#
|
||||
while ( $h1 = $sth1->fetchrow_hashref() ) {
|
||||
$show = $h1->{ep_num};
|
||||
|
||||
if ($show == $reserved) {
|
||||
push(@res,$h1);
|
||||
next;
|
||||
}
|
||||
|
||||
$count++;
|
||||
|
||||
my @atts;
|
||||
push( @atts, "+dir" ) if ( -e "$cache/hpr${show}" );
|
||||
push( @atts, "+shownotes" ) if ( -s "$cache/hpr${show}/shownotes.txt" );
|
||||
push( @atts, "+processed" ) if ( -e "$cache/hpr${show}/hpr${show}.html" );
|
||||
push( @atts, "+uploaded" ) if ( -e "$cache/hpr${show}/.uploaded" );
|
||||
|
||||
printf "[%02d] %04d: %-18s (%s) %s\n", $count, $show,
|
||||
(
|
||||
exists( $status{ $h1->{status} } )
|
||||
? $status{ $h1->{status} }
|
||||
: 'unknown'
|
||||
),
|
||||
$h1->{email},
|
||||
join( "; ", @atts );
|
||||
}
|
||||
|
||||
#
|
||||
# If for some reason there aren't any reservations tell the caller
|
||||
#
|
||||
say "No show reservations" if ( $count == 0 );
|
||||
|
||||
if (@res) {
|
||||
say " ";
|
||||
say "Reserve queue entries";
|
||||
$count = 0;
|
||||
|
||||
for my $r (@res) {
|
||||
$count++;
|
||||
|
||||
printf "[%02d] %-24s %s (%s)\n", $count,
|
||||
(
|
||||
exists( $status{ $r->{status} } )
|
||||
? $status{ $r->{status} }
|
||||
: 'unknown'
|
||||
),
|
||||
$r->{timestamp},
|
||||
$r->{email};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: Usage
|
||||
# PURPOSE: Display a usage message and exit
|
||||
# PARAMETERS: None
|
||||
# RETURNS: To command line level with exit value 1
|
||||
# DESCRIPTION: Builds the usage message using global values
|
||||
# THROWS: no exceptions
|
||||
# COMMENTS: none
|
||||
# SEE ALSO: n/a
|
||||
#===============================================================================
|
||||
sub Usage {
|
||||
print STDERR <<EOD;
|
||||
$PROG v$VERSION
|
||||
|
||||
Usage: $PROG [options]
|
||||
|
||||
Scans the HPR database table 'reservations' and reports what new shows are
|
||||
indicated there and what state they are in.
|
||||
|
||||
Options:
|
||||
|
||||
-help Display this information
|
||||
-config=FILE This option allows an alternative configuration file
|
||||
to be used. This file defines the location of the
|
||||
database, its port, its name and the username and
|
||||
password to be used to access it. This feature was
|
||||
added to allow the script to access alternative
|
||||
databases or the live database over an SSH tunnel.
|
||||
|
||||
If the option is omitted the default file is used:
|
||||
.hpr_db.cfg
|
||||
|
||||
EOD
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: Options
|
||||
# PURPOSE: Processes command-line options
|
||||
# PARAMETERS: $optref Hash reference to hold the options
|
||||
# RETURNS: Undef
|
||||
# DESCRIPTION:
|
||||
# THROWS: no exceptions
|
||||
# COMMENTS: none
|
||||
# SEE ALSO: n/a
|
||||
#===============================================================================
|
||||
sub Options {
|
||||
my ($optref) = @_;
|
||||
|
||||
my @options = ( "help", "config=s", );
|
||||
|
||||
Usage() if ( !GetOptions( $optref, @options ) );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
# vim: syntax=perl:ts=8:sw=4:et:ai:tw=100:fo=tcrqn21:fdm=marker
|
||||
|
Reference in New Issue
Block a user