forked from HPR/hpr-tools
		
	
		
			
				
	
	
		
			277 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash -
 | 
						|
#===============================================================================
 | 
						|
#
 | 
						|
#         FILE: check_week
 | 
						|
#
 | 
						|
#        USAGE: ./check_week -h -i -v [week_number]
 | 
						|
#
 | 
						|
#  DESCRIPTION: Checks the upcoming week, or any week, to ensure there are shows
 | 
						|
#               on the IA for that period. It mainly makes sense to look into
 | 
						|
#               the future, but you can look backwards in the same year if
 | 
						|
#               required.
 | 
						|
#
 | 
						|
#      OPTIONS: ---
 | 
						|
# REQUIREMENTS: ---
 | 
						|
#         BUGS: ---
 | 
						|
#        NOTES: ---
 | 
						|
#       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
 | 
						|
#      VERSION: 0.0.2
 | 
						|
#      CREATED: 2022-01-27 10:45:41
 | 
						|
#     REVISION: 2022-02-25 22:22:19
 | 
						|
#
 | 
						|
#===============================================================================
 | 
						|
 | 
						|
set -o nounset                              # Treat unset variables as an error
 | 
						|
 | 
						|
SCRIPT=${0##*/}
 | 
						|
# DIR=${0%/*}
 | 
						|
VERSION="0.0.2"
 | 
						|
 | 
						|
STDOUT="/dev/fd/2"
 | 
						|
 | 
						|
#
 | 
						|
# Select the appropriate working directory
 | 
						|
#
 | 
						|
case $(hostname) in
 | 
						|
    i7-desktop)
 | 
						|
        BASEDIR="$HOME/HPR/InternetArchive"
 | 
						|
        ;;
 | 
						|
    hprvps|marvin|borg)
 | 
						|
        BASEDIR="$HOME/IA"
 | 
						|
        ;;
 | 
						|
    *)
 | 
						|
        echo "Wrong host!"
 | 
						|
        exit 1
 | 
						|
        ;;
 | 
						|
esac
 | 
						|
 | 
						|
cd "$BASEDIR" || exit 1
 | 
						|
 | 
						|
#
 | 
						|
# Load library functions
 | 
						|
#
 | 
						|
LIB="$HOME/bin/function_lib.sh"
 | 
						|
[ -e "$LIB" ] || { echo "Unable to source functions"; exit 1; }
 | 
						|
# shellcheck source=/home/cendjm/bin/function_lib.sh
 | 
						|
source "$LIB"
 | 
						|
 | 
						|
#
 | 
						|
# Colour codes
 | 
						|
#
 | 
						|
define_colours
 | 
						|
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _open_tunnel
 | 
						|
#  DESCRIPTION: Opens the SSH tunnel to the HPR server if necessary
 | 
						|
#   PARAMETERS: 
 | 
						|
#      RETURNS: 
 | 
						|
#===============================================================================
 | 
						|
_open_tunnel () {
 | 
						|
    local open_tunnel="${1}"
 | 
						|
 | 
						|
    if [[ $(pgrep -u "$USER" -f 'ssh.*hpr@hackerpublicradio.org' -c) -eq 0 ]]; then
 | 
						|
        $open_tunnel || { echo "Failed to open SSH tunnel"; exit 1; }
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _DEBUG
 | 
						|
#  DESCRIPTION: Writes a message if in DEBUG mode
 | 
						|
#   PARAMETERS: List of messages
 | 
						|
#      RETURNS: Nothing
 | 
						|
#===============================================================================
 | 
						|
_DEBUG () {
 | 
						|
    [ "$DEBUG" == 0 ] && return
 | 
						|
    for msg in "$@"; do
 | 
						|
        printf 'D> %s\n' "$msg"
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _usage
 | 
						|
#  DESCRIPTION: Reports usage; always exits the script after doing so
 | 
						|
#   PARAMETERS: 1 - the integer to pass to the 'exit' command
 | 
						|
#      RETURNS: Nothing
 | 
						|
#===============================================================================
 | 
						|
_usage () {
 | 
						|
    local -i result=${1:-0}
 | 
						|
 | 
						|
    cat >$STDOUT <<-endusage
 | 
						|
${SCRIPT} - version: ${VERSION}
 | 
						|
 | 
						|
Usage: ./${SCRIPT} [-h] [week_no]
 | 
						|
 | 
						|
Checks a future week to ensure all the shows are on the Internet Archive.
 | 
						|
 | 
						|
Options:
 | 
						|
    -h                  Print this help
 | 
						|
    -v                  Enable verbose mode where a little more information is
 | 
						|
                        output. Mainly the dates relating to the chosen week
 | 
						|
                        number.
 | 
						|
    -i                  Ignore shows missing from the database during the
 | 
						|
                        chosen week. Normally the script does not proceed if
 | 
						|
                        there are fewer than 5 shows in a week.
 | 
						|
 | 
						|
Arguments:
 | 
						|
    week_no             (optional, default current week) the week number to be
 | 
						|
                        examined. This is a number in the range 1..52.
 | 
						|
                        Anything else is illegal.
 | 
						|
 | 
						|
Environment variables
 | 
						|
    check_week_DEBUG    If set to a non-zero value then the debugging
 | 
						|
                        statements in the script are executed. Otherwise if
 | 
						|
                        set to zero, or if the variable is absent no debug
 | 
						|
                        information is produced.  The variable can be set
 | 
						|
                        using the 'export' command or on the same line as the
 | 
						|
                        command calling the script.  See the example below.
 | 
						|
 | 
						|
Examples
 | 
						|
    ./check_week        # Check the current week
 | 
						|
    ./check_week -i     # Check the current week ignoring missing shows
 | 
						|
    ./check_week 6      # Check week 6 of the current year
 | 
						|
 | 
						|
    check_week_DEBUG=1 ./check_week     # Run with debugging enabled
 | 
						|
 | 
						|
endusage
 | 
						|
    exit "$result"
 | 
						|
}
 | 
						|
 | 
						|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
#
 | 
						|
# Debug mode. Invoke it with: 'check_week_DEBUG=1 ./check_week'
 | 
						|
#
 | 
						|
DEBUGVAR="${SCRIPT}_DEBUG"
 | 
						|
DEBUG="${!DEBUGVAR:-0}"
 | 
						|
 | 
						|
#
 | 
						|
# Process options
 | 
						|
#
 | 
						|
while getopts hiv opt
 | 
						|
do
 | 
						|
    case "${opt}" in
 | 
						|
        h) _usage 1;;
 | 
						|
        i) IGNORE=1;;
 | 
						|
        v) VERBOSE=1;;
 | 
						|
        *) _usage 1;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
shift $((OPTIND - 1))
 | 
						|
 | 
						|
IGNORE=${IGNORE:-0}
 | 
						|
VERBOSE=${VERBOSE:-0}
 | 
						|
 | 
						|
#
 | 
						|
# Check arguments
 | 
						|
#
 | 
						|
if [[ $# -gt 1 ]]; then
 | 
						|
    _usage 1
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Default missing any week number and validate what's found. Take care that
 | 
						|
# numbers with leading zeroes are by default taken to be octal! We coerce to
 | 
						|
# base 10 just in case.
 | 
						|
#
 | 
						|
weekno="${1:-"$(date +%V)"}"
 | 
						|
weekno=$((10#$weekno))
 | 
						|
if [[ ! $weekno =~ ^[0-9]{1,2}$ ]]; then
 | 
						|
    echo "Invalid week number: $weekno"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
if [[ $weekno -lt 1 || $weekno -gt 52 ]]; then
 | 
						|
    echo "Invalid week number: $weekno"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Check dependencies
 | 
						|
#
 | 
						|
OTUNNEL=$(command -v open_tunnel)
 | 
						|
if [[ -z $OTUNNEL ]]; then
 | 
						|
    echo "Can't find the script 'open_tunnel'"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
QUERYTOOL=$(command -v query2csv)
 | 
						|
if [[ -z $QUERYTOOL ]]; then
 | 
						|
    echo "Can't find the tool query2csv"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Open the SSH tunnel if it's not already open
 | 
						|
#
 | 
						|
_open_tunnel "$OTUNNEL"
 | 
						|
 | 
						|
#
 | 
						|
# Gather and compute date information. Week numbers may start with a zero so
 | 
						|
# we have to coerce them into base 10 from what will be presumed to be octal.
 | 
						|
#
 | 
						|
curweek="$((10#$(date +%V)))"
 | 
						|
curdow="$(date +%u)"
 | 
						|
woffset=$((weekno - curweek))
 | 
						|
offset="$((woffset * 7 - curdow + 1)) days"
 | 
						|
weekstart="$(date -d "$offset" +%F)"
 | 
						|
weekfinish="$(date -d "$weekstart + 4 days" +%F)"
 | 
						|
 | 
						|
_DEBUG "Current week number: $curweek"
 | 
						|
_DEBUG "Current day number: $curdow"
 | 
						|
_DEBUG "Argument: $weekno"
 | 
						|
_DEBUG "Week offset: $woffset"
 | 
						|
_DEBUG "Day offset: $offset"
 | 
						|
_DEBUG "Start of chosen week: $weekstart"
 | 
						|
_DEBUG "End of chosen week: $weekfinish"
 | 
						|
 | 
						|
#
 | 
						|
# Report what's happening in verbose mode
 | 
						|
#
 | 
						|
[ $VERBOSE -eq 1 ] && printf 'Processing week %s (%s to %s)\n' \
 | 
						|
    "$weekno" "$weekstart" "$weekfinish"
 | 
						|
 | 
						|
#
 | 
						|
# Make SQL
 | 
						|
#
 | 
						|
sql="select id from eps where date between '$weekstart' and '$weekfinish' order by id"
 | 
						|
 | 
						|
_DEBUG "SQL: $sql"
 | 
						|
 | 
						|
#
 | 
						|
# Collect the shows
 | 
						|
#
 | 
						|
declare -a shows
 | 
						|
mapfile -t shows < <(query2csv "$sql")
 | 
						|
 | 
						|
_DEBUG "shows: ${shows[*]}"
 | 
						|
 | 
						|
#
 | 
						|
# Check we have enough shows, either exiting if not or continuing to check
 | 
						|
# those we have.
 | 
						|
#
 | 
						|
if [[ ${#shows[*]} -ne 5 ]]; then
 | 
						|
    echo "${red}Didn't find the expected number of shows for this week${reset}"
 | 
						|
    if [[ $IGNORE -eq 0 ]]; then
 | 
						|
        exit 1
 | 
						|
    fi
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Check the shows are on the IA
 | 
						|
#
 | 
						|
for show in "${shows[@]/#/hpr}"; do
 | 
						|
    if ia list "$show" > /dev/null 2>&1; then
 | 
						|
        echo "${green}$show has been uploaded${reset}"
 | 
						|
    else
 | 
						|
        echo "${red}$show has not been uploaded${reset}"
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
#
 | 
						|
# All done
 | 
						|
#
 | 
						|
exit
 | 
						|
 | 
						|
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21
 | 
						|
 |