forked from HPR/hpr-tools
		
	Moved project directories and files to an empty local repo
This commit is contained in:
		
							
								
								
									
										308
									
								
								Show_Submission/do_report
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										308
									
								
								Show_Submission/do_report
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,308 @@ | ||||
| #!/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: 2023-06-01 17:58:09 | ||||
| # | ||||
| #=============================================================================== | ||||
|  | ||||
| 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/bin/function_lib.sh" | ||||
| [ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; } | ||||
| # shellcheck source=/home/cendjm/bin/function_lib.sh | ||||
| source "$LIB" | ||||
|  | ||||
| # | ||||
| # Colour codes | ||||
| # | ||||
| define_colours | ||||
|  | ||||
| #{{{ Functions: --- _usage --- _DEBUG --- _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: _DEBUG | ||||
| #  DESCRIPTION: Writes one or more messages if in DEBUG mode. Each argument is | ||||
| #               seen as a message and is written on a separate line. | ||||
| #               References the global variable 'DEBUG' which is expected to be | ||||
| #               True if debug output is wanted. | ||||
| #   PARAMETERS: List of messages | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| _DEBUG () { | ||||
|     [ "$DEBUG" == 0 ] && return | ||||
|     for msg in "$@"; do | ||||
|         printf 'D> %s\n' "$msg" | ||||
|     done | ||||
| } | ||||
|  | ||||
| #===  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 | ||||
		Reference in New Issue
	
	Block a user