forked from HPR/hpr-tools
		
	Show_Submission/copy_shownotes: Changed the location of the function library
Show_Submission/do_brave: Updates to the way local stand-alone HTML is generated for
    review purposes.
Show_Submission/do_index: Changed the location of the function library
Show_Submission/do_pandoc: Changed the location of the function library; now uses
    'author_title.pl' to generate YAML for Pandoc
Show_Submission/do_parse: Trivial change
Show_Submission/do_pictures: Changed the location of the function library; better
    handling of the show specification
Show_Submission/do_report: Changed the location of the function library
Show_Submission/do_update_reservations: Changed the location of the function library
Show_Submission/fix_relative_links: Added features 'say' and 'state'
Show_Submission/parse_JSON: New checks: notes too short, trailing spaces on title,
    summary and tags (needing JSON changes). Check for Markdown in the
    assets (see 'do_pandoc_assets'). New 'trim' function.
		
	
		
			
				
	
	
		
			293 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash -
 | 
						|
# shellcheck disable=SC2317
 | 
						|
#===============================================================================
 | 
						|
#
 | 
						|
#         FILE: do_report
 | 
						|
#
 | 
						|
#        USAGE: ./do_report [-h] [-D] [-m] [-s] [-Y] epno path_to_shownotes.json
 | 
						|
#
 | 
						|
#  DESCRIPTION: Script to be invoked after a show has been processed to make
 | 
						|
#               a Matrix report.
 | 
						|
#      OPTIONS: ---
 | 
						|
# REQUIREMENTS: ---
 | 
						|
#         BUGS: ---
 | 
						|
#        NOTES: ---
 | 
						|
#       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
 | 
						|
#      VERSION: 0.0.8
 | 
						|
#      CREATED: 2022-09-07 15:27:29
 | 
						|
#     REVISION: 2024-06-18 20:13:46
 | 
						|
#
 | 
						|
#===============================================================================
 | 
						|
 | 
						|
set -o nounset                              # Treat unset variables as an error
 | 
						|
 | 
						|
SCRIPT=${0##*/}
 | 
						|
#DIR=${0%/*}
 | 
						|
 | 
						|
# shellcheck disable=SC2034
 | 
						|
VERSION="0.0.8"
 | 
						|
 | 
						|
STDOUT="/dev/fd/2"
 | 
						|
 | 
						|
#
 | 
						|
# Load library functions
 | 
						|
#
 | 
						|
LIB="$HOME/HPR/function_lib.sh"
 | 
						|
[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
 | 
						|
# shellcheck source=/home/cendjm/HPR/function_lib.sh
 | 
						|
source "$LIB"
 | 
						|
 | 
						|
#
 | 
						|
# Colour codes
 | 
						|
#
 | 
						|
define_colours
 | 
						|
 | 
						|
#{{{ Functions: --- _usage --- _verbose --- _silent ---
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _usage
 | 
						|
#  DESCRIPTION: Report usage
 | 
						|
#   PARAMETERS: None
 | 
						|
#      RETURNS: Nothing
 | 
						|
#===============================================================================
 | 
						|
_usage () {
 | 
						|
    cat >$STDOUT <<-endusage
 | 
						|
Usage: ./${SCRIPT} [-h] [-D] [-m] [-s] [-Y] shownumber
 | 
						|
 | 
						|
Version: $VERSION
 | 
						|
 | 
						|
Script to create and send a Matrix message about the processing of the show
 | 
						|
 | 
						|
Options:
 | 
						|
  -h                    Print this help
 | 
						|
  -D                    Run in debug mode where a lot more information is
 | 
						|
                        reported
 | 
						|
  -m                    Monochrome mode - no colours
 | 
						|
  -s                    Silent mode, output less text about actions
 | 
						|
 | 
						|
Arguments:
 | 
						|
    shownumber
 | 
						|
 | 
						|
Examples
 | 
						|
  ./${SCRIPT} -h
 | 
						|
  ./${SCRIPT} -m 3112
 | 
						|
  ./${SCRIPT} -D 3112
 | 
						|
  ./${SCRIPT} 3112
 | 
						|
 | 
						|
endusage
 | 
						|
    exit
 | 
						|
}
 | 
						|
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _verbose
 | 
						|
#  DESCRIPTION: Writes a message in verbose mode
 | 
						|
#   PARAMETERS: $1      message
 | 
						|
#      RETURNS: Nothing
 | 
						|
#===============================================================================
 | 
						|
_verbose () {
 | 
						|
    [ "$VERBOSE" -eq 0 ] && return
 | 
						|
    for msg in "$@"; do
 | 
						|
        printf '%s\n' "$msg"
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
#===  FUNCTION  ================================================================
 | 
						|
#         NAME: _silent
 | 
						|
#  DESCRIPTION: Writes a message unless in silent mode
 | 
						|
#   PARAMETERS: $1      message
 | 
						|
#      RETURNS: Nothing
 | 
						|
#===============================================================================
 | 
						|
_silent () {
 | 
						|
    [ "$SILENT" -eq 1 ] && return
 | 
						|
    for msg in "$@"; do
 | 
						|
        printf '%s\n' "$msg"
 | 
						|
    done
 | 
						|
}
 | 
						|
#}}}
 | 
						|
 | 
						|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
#
 | 
						|
# Paths to files
 | 
						|
#
 | 
						|
BASENAME="$HOME/HPR/Show_Submission"
 | 
						|
TPL="$BASENAME/shownotes/hpr%d/%s"
 | 
						|
Q2CSV="$BASENAME/query2csv"
 | 
						|
 | 
						|
[ -e "$Q2CSV" ] || { echo "Unable to find '$Q2CSV'; aborting"; exit 1; }
 | 
						|
 | 
						|
#
 | 
						|
# Option defaults
 | 
						|
#
 | 
						|
COLOUR=1 # use colours by default
 | 
						|
SILENT=0 # not silent by default
 | 
						|
 | 
						|
#
 | 
						|
# Process options
 | 
						|
#
 | 
						|
while getopts :hDmsY opt
 | 
						|
do
 | 
						|
    case "${opt}" in
 | 
						|
        h) _usage;;
 | 
						|
        D) DEBUG=1;;
 | 
						|
        m) COLOUR=0;;
 | 
						|
        s) SILENT=1;;
 | 
						|
        ?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
shift $((OPTIND - 1))
 | 
						|
 | 
						|
DEBUG=${DEBUG:-0}
 | 
						|
SILENT=${SILENT:-0}
 | 
						|
 | 
						|
#
 | 
						|
# Cancel colours if requested
 | 
						|
#
 | 
						|
if [[ $COLOUR -eq 0 ]]; then
 | 
						|
    undefine_colours
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Check the argument after any options
 | 
						|
#
 | 
						|
if [[ $# -ne 1 ]]; then
 | 
						|
    echo "$SCRIPT: ${red}Usage: $SCRIPT shownumber${reset}"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
show="$1"
 | 
						|
# json="$2"
 | 
						|
 | 
						|
#
 | 
						|
# Compute paths to show-specific files
 | 
						|
#
 | 
						|
# shellcheck disable=SC2059
 | 
						|
{
 | 
						|
printf -v json "$TPL" "$show" "shownotes.json"
 | 
						|
printf -v assetfile "$TPL" "$show" ".assets"
 | 
						|
printf -v statusfile "$TPL" "$show" ".status"
 | 
						|
_DEBUG "Path to json = $json"
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# Simplify checks
 | 
						|
#
 | 
						|
if [[ ! -e $json ]]; then
 | 
						|
    echo "$SCRIPT: ${red}Unable to find $json${reset}"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#-------------------------------------------------------------------------------
 | 
						|
# Get the show details
 | 
						|
#-------------------------------------------------------------------------------
 | 
						|
#
 | 
						|
# Extract JSON data and make Bash assignments which are then processed
 | 
						|
# with 'eval'.
 | 
						|
# Have to declare variables to avoid upsetting Shellcheck
 | 
						|
#
 | 
						|
declare host hostid email format
 | 
						|
jqscript='host=\(.host.Host_Name) hostid=\(.host.Host_ID) '
 | 
						|
jqscript+='email=\(.host.Host_Email) format=\(.metadata.POST.shownotes_format)'
 | 
						|
commands=$(jq -r "@sh \"$jqscript\"" "$json")
 | 
						|
eval "${commands}"
 | 
						|
 | 
						|
#
 | 
						|
# The zero hostid needs checking
 | 
						|
#
 | 
						|
if [ "$hostid" -eq 0 ]; then
 | 
						|
    _silent "${yellow}Checking host id 0 is valid${reset}"
 | 
						|
    # Look up in database
 | 
						|
    hid=$($Q2CSV "select hostid from hosts where host like '%${host}%'")
 | 
						|
    # Use the host id we found if the zero id is wrong
 | 
						|
    if [[ -n $hid ]]; then
 | 
						|
        _silent "${yellow}Found the host name $host with id $hid${reset}"
 | 
						|
        hostid=$hid
 | 
						|
        newhost=""
 | 
						|
        email=" (using $email)"
 | 
						|
    else
 | 
						|
        newhost="new host "
 | 
						|
        email=" ($email)"
 | 
						|
    fi
 | 
						|
else
 | 
						|
    newhost=""
 | 
						|
    email=""
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# If the hostid is zero the email wasn't known (so maybe a new host) and we
 | 
						|
# didn't find the name in the database (so treat them as new). We only report
 | 
						|
# the email if it's a known host (by name) using a new address or if it's
 | 
						|
# a new host.
 | 
						|
#
 | 
						|
# if [ "$hostid" -eq 0 ]; then
 | 
						|
#     newhost="new host "
 | 
						|
#     email=" ($email)"
 | 
						|
# else
 | 
						|
#     newhost=""
 | 
						|
#     email=""
 | 
						|
# fi
 | 
						|
 | 
						|
#
 | 
						|
# If there are assets collect their names
 | 
						|
# NOTE: now not used except as a non-blank string
 | 
						|
#
 | 
						|
if [[ -e $assetfile ]]; then
 | 
						|
    # The sed expression confuses ShellCheck
 | 
						|
    # shellcheck disable=SC2016
 | 
						|
    assets="$(sort "$assetfile" | sed -ne 'H;${x;s/\n//;s/\n/, /g;p}')"
 | 
						|
else
 | 
						|
    assets=
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Report the settings in debug mode
 | 
						|
#
 | 
						|
_DEBUG "Show number = $show" \
 | 
						|
       "Host name   = $host" \
 | 
						|
       "Host ID     = $hostid" \
 | 
						|
       "Host email  = $email" \
 | 
						|
       "Assets      = $assets"
 | 
						|
 | 
						|
#
 | 
						|
# Handle backticks in the host string (Rho`n/Roan made me do it!)
 | 
						|
#
 | 
						|
if grep -q -E '`' <<<"$host"; then
 | 
						|
    # shellcheck disable=SC2001 disable=SC2016
 | 
						|
    host=$(sed -e 's/^\([0-9A-Za-z_`-]\+\)$/`\1`/' <<<"$host")
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Generate the message we want to send
 | 
						|
#
 | 
						|
# shellcheck disable=SC2016
 | 
						|
printf -v message 'Processed %s from %s`%s`%s. Format is *%s*.' \
 | 
						|
    "$show" "$newhost" "$host" "$email" "$format"
 | 
						|
if [[ -n $assets ]]; then
 | 
						|
    # We have assets but were they sent?
 | 
						|
    if grep -q -E '^assets' "$statusfile"; then
 | 
						|
        message+=" Assets uploaded"
 | 
						|
    else
 | 
						|
        _silent "${yellow}Note: assets were found but not uploaded${reset}"
 | 
						|
    fi
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# Send it, after checking
 | 
						|
#
 | 
						|
echo "Will run the following command:"
 | 
						|
echo "${green}matrix-commander -z -m '$message'${reset}"
 | 
						|
if yes_no 'OK to proceed? %s ' 'No'; then
 | 
						|
    command="matrix-commander -z -m '$message'"
 | 
						|
    eval "$command" || \
 | 
						|
        { echo "Failed to invoke the command!"; exit 1; }
 | 
						|
 | 
						|
    #
 | 
						|
    # Change state/log what we did, but only if we actually did it
 | 
						|
    #
 | 
						|
    echo "reported" >> "$statusfile" || \
 | 
						|
        { echo "Failed to update $statusfile"; exit 1; }
 | 
						|
 | 
						|
fi
 | 
						|
 | 
						|
exit
 | 
						|
 | 
						|
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker
 |