forked from HPR/hpr-tools
		
	Moved project directories and files to an empty local repo
This commit is contained in:
		
							
								
								
									
										276
									
								
								InternetArchive/check_week
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										276
									
								
								InternetArchive/check_week
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,276 @@ | ||||
| #!/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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user