forked from HPR/hpr-tools
Moved project directories and files to an empty local repo
This commit is contained in:
252
Community_News/build_AOB
Executable file
252
Community_News/build_AOB
Executable file
@@ -0,0 +1,252 @@
|
||||
#!/bin/bash -
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: build_AOB
|
||||
#
|
||||
# USAGE: ./build_AOB [date]
|
||||
#
|
||||
# DESCRIPTION: Build the AOB files for a particular month
|
||||
#
|
||||
# OPTIONS: ---
|
||||
# REQUIREMENTS: ---
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.0.12
|
||||
# CREATED: 2021-04-15 17:36:22
|
||||
# REVISION: 2024-03-15 09:50:02
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -o nounset # Treat unset variables as an error
|
||||
|
||||
SCRIPT=${0##*/}
|
||||
BASEDIR=${0%/*}
|
||||
|
||||
VERSION="0.0.12"
|
||||
|
||||
STDOUT="/dev/fd/2"
|
||||
|
||||
#
|
||||
# Make sure we're in the working directory
|
||||
#
|
||||
cd "$BASEDIR" || exit 1
|
||||
|
||||
#
|
||||
# Load library functions
|
||||
#
|
||||
LIB="$HOME/bin/function_lib.sh"
|
||||
[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
|
||||
# shellcheck disable=SC1090
|
||||
source "$LIB"
|
||||
|
||||
# {{{ -- Functions usage and _DEBUG
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: _usage
|
||||
# DESCRIPTION: Report usage
|
||||
# PARAMETERS: None
|
||||
# RETURNS: Nothing
|
||||
#===============================================================================
|
||||
_usage () {
|
||||
cat >$STDOUT <<-endusage
|
||||
Usage: ./${SCRIPT} [-h] [-D] [date]
|
||||
|
||||
Version: $VERSION
|
||||
|
||||
Converts the AOB in Markdown format for a particular month to HTML and to text
|
||||
|
||||
Options:
|
||||
-h Print this help
|
||||
-D Select debug mode (works the same; more output)
|
||||
|
||||
Arguments (optional):
|
||||
date Specifies the month to build the AOB for. The default
|
||||
is the current month. The format can be YYYY-MM (e.g.
|
||||
2022-05) or any date format that the 'date' command
|
||||
can parse, so 2022-04-01 or 01-Apr-2022 and so on. If
|
||||
the date cannot be parsed an error will be reported.
|
||||
|
||||
Examples
|
||||
./${SCRIPT} -h
|
||||
./${SCRIPT} -D 01-February-2021
|
||||
./${SCRIPT} 2021-02
|
||||
|
||||
endusage
|
||||
exit
|
||||
}
|
||||
|
||||
#=== 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
|
||||
}
|
||||
|
||||
# }}}
|
||||
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#
|
||||
# Base and database directories
|
||||
#
|
||||
PARENT="$HOME/HPR"
|
||||
BASEDIR="$PARENT/Community_News"
|
||||
cd "$BASEDIR" || {
|
||||
echo "Failed to cd to $BASEDIR";
|
||||
exit 1;
|
||||
}
|
||||
# IADIR="$PARENT/InternetArchive"
|
||||
|
||||
#
|
||||
# Option defaults
|
||||
#
|
||||
DEBUG=0
|
||||
|
||||
#
|
||||
# Process options
|
||||
#
|
||||
while getopts :hdD opt
|
||||
do
|
||||
case "${opt}" in
|
||||
h) _usage;;
|
||||
D) DEBUG=1;;
|
||||
?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
#
|
||||
# Handle the optional argument
|
||||
#
|
||||
if [[ $# -eq 1 ]]; then
|
||||
startdate="$1"
|
||||
# Normalise a YYYY-MM date so 'date' will not complain
|
||||
if [[ $startdate =~ ^[0-9]{4}-[0-9]{2}$ ]]; then
|
||||
startdate+='-01'
|
||||
fi
|
||||
# Validate the date and standardise it if it's OK
|
||||
tmp="$(date -d "$startdate" +%Y-%m)" || {
|
||||
echo "Use a date such as $(date +%Y-%m)"
|
||||
exit 1
|
||||
}
|
||||
startdate="$tmp"
|
||||
else
|
||||
startdate="$(date +%Y-%m)"
|
||||
fi
|
||||
|
||||
_DEBUG "Date used: $startdate"
|
||||
|
||||
#
|
||||
# We added a new field in 2022, 'item_last_updated' which is taken from the IA
|
||||
# (which we discovered was being maintained). It is a Unix date field, but the
|
||||
# view 'episodes_view' converts it.
|
||||
#
|
||||
# TODO: Since query3 was added it has made query1 and query2 obsolete. We
|
||||
# generate a per-month table with query3 which is turned into HTML using awk
|
||||
# and used in the AOB report. The code below that uses these queries and their
|
||||
# results could now be removed (or commented out).
|
||||
#
|
||||
#query1="select count(*) from episodes where id between 871 and 2429 and with_derived = 1"
|
||||
|
||||
##query1="select count(*) from episodes_view where id between 871 and 2429 and \
|
||||
##item_last_updated between '${startdate}-01' and \
|
||||
##date('${startdate}-01','+1 month') and with_derived = 1"
|
||||
##
|
||||
##query2='select count(*) from episodes where id between 871 and 2429 and with_derived = 0'
|
||||
##
|
||||
##query3=$(cat <<ENDOFQ3
|
||||
##SELECT
|
||||
## strftime('%Y-%m',item_last_updated) AS month,
|
||||
## count(*) AS count
|
||||
##FROM episodes_view
|
||||
##WHERE id BETWEEN 871 AND 2429
|
||||
##AND item_last_updated IS NOT NULL
|
||||
##AND item_last_updated < date('${startdate}-01','+1 month')
|
||||
##GROUP BY strftime('%Y-%m',item_last_updated);
|
||||
##ENDOFQ3
|
||||
##)
|
||||
##
|
||||
##_DEBUG "Query used (1): $query1"
|
||||
##_DEBUG "Query used (2): $query2"
|
||||
##_DEBUG "Query used (3): $query3"
|
||||
##
|
||||
#
|
||||
# The database
|
||||
#
|
||||
##IADB="$IADIR/ia.db"
|
||||
##
|
||||
#
|
||||
# Collect the values
|
||||
#
|
||||
##UPLOADS=$(echo "$query1" | sqlite3 -list "$IADB")
|
||||
##REMAINING=$(echo "$query2" | sqlite3 -list "$IADB")
|
||||
##TABLE=$(echo "$query3" | sqlite3 -list "$IADB")
|
||||
##
|
||||
##_DEBUG "Uploads=$UPLOADS (query 1)"
|
||||
##_DEBUG "Remaining=$REMAINING (query 2)"
|
||||
##_DEBUG "Table=$TABLE"
|
||||
|
||||
#
|
||||
# Files we need to build the AOB
|
||||
#
|
||||
AOBMKD="$BASEDIR/aob_$startdate.mkd"
|
||||
|
||||
#
|
||||
# Sanity check
|
||||
#
|
||||
[ -e "$AOBMKD" ] || { echo "Unable to find $AOBMKD"; exit 1; }
|
||||
|
||||
#
|
||||
# Make temporary files and set traps to delete them
|
||||
#
|
||||
##TMP1=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; }
|
||||
##trap 'cleanup_temp $TMP1' SIGHUP SIGINT SIGPIPE SIGTERM EXIT
|
||||
##
|
||||
#
|
||||
# Use Awk to process the table we failed to generate in SQL :-(
|
||||
#
|
||||
##awk -F '|' -f /dev/fd/7 <<<"$TABLE" >"$TMP1" 7<<'ENDAWK'
|
||||
##BEGIN{
|
||||
## total = 0
|
||||
## remainder = (2429 - 871 + 1)
|
||||
## print "<table>"
|
||||
## print "<tr><th>Month</th><th>Month count</th>"\
|
||||
## "<th>Running total</th><th>Remainder</th></tr>"
|
||||
##}
|
||||
##{
|
||||
## total = total + $2
|
||||
## remainder = remainder - $2
|
||||
## printf "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
|
||||
## $1,$2,total,remainder
|
||||
##}
|
||||
##END{
|
||||
## print "</table>"
|
||||
##}
|
||||
##ENDAWK
|
||||
##cat >>"$TMP1" <<ENDDATE
|
||||
##<p><small><small>Table updated: $(date --utc +'%F %T')</small></small></p>
|
||||
##ENDDATE
|
||||
##_DEBUG "Table" "$(cat "$TMP1")"
|
||||
|
||||
#
|
||||
# Build the output files
|
||||
#
|
||||
# if tpage --define "uploads=$UPLOADS" --define "remaining=$REMAINING" \
|
||||
# --define "table=$TMP1" "$AOBMKD" |\
|
||||
# pandoc -f markdown-smart -t html5 -o "${AOBMKD%mkd}html"; then
|
||||
#
|
||||
if pandoc -f markdown-smart -t html5 "$AOBMKD" -o "${AOBMKD%mkd}html"; then
|
||||
echo "Converted $AOBMKD to HTML"
|
||||
else
|
||||
echo "Conversion of $AOBMKD to HTML failed"
|
||||
fi
|
||||
|
||||
exit
|
||||
|
||||
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker
|
Reference in New Issue
Block a user