From f7b6ca3f79321a8288d0af7736b4ed76e4287f6a Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Sun, 8 May 2022 15:30:05 +0200 Subject: [PATCH] Log runner output to syslog (if so configured). The variable DOUGAL_LOG_FACILITY must be defined in the environment (e.g., in ~/.dougalrc) for syslog to be enabled. --- bin/runner.sh | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/bin/runner.sh b/bin/runner.sh index edc725e..300e591 100755 --- a/bin/runner.sh +++ b/bin/runner.sh @@ -1,5 +1,6 @@ #!/bin/bash + DOUGAL_ROOT=${DOUGAL_ROOT:-$(dirname "$0")/..} BINDIR="$DOUGAL_ROOT/bin" @@ -8,6 +9,20 @@ LOCKFILE=${LOCKFILE:-$VARDIR/runner.lock} [ -f ~/.profile ] && . ~/.profile +DOUGAL_LOG_TAG="dougal.runner[$$]" + +# Only send output to the logger if we have the appropriate +# configuration set. +if [[ -n "$DOUGAL_LOG_TAG" && -n "$DOUGAL_LOG_FACILITY" ]]; then + function _logger () { + logger $* + } +else + function _logger () { + : # This is the Bash null command + } +fi + function tstamp () { date -u +%Y-%m-%dT%H:%M:%SZ } @@ -18,26 +33,44 @@ function prefix () { function print_log () { printf "$(prefix)\033[36m%s\033[0m\n" "$*" + _logger -t "$DOUGAL_LOG_TAG" -p "$DOUGAL_LOG_FACILITY.info" "$*" } function print_info () { printf "$(prefix)\033[0m%s\n" "$*" + _logger -t "$DOUGAL_LOG_TAG" -p "$DOUGAL_LOG_FACILITY.debug" "$*" } function print_warning () { printf "$(prefix)\033[33;1m%s\033[0m\n" "$*" + _logger -t "$DOUGAL_LOG_TAG" -p "$DOUGAL_LOG_FACILITY.warning" "$*" } function print_error () { printf "$(prefix)\033[31m%s\033[0m\n" "$*" + _logger -t "$DOUGAL_LOG_TAG" -p "$DOUGAL_LOG_FACILITY.error" "$*" } function run () { - PROGNAME=$(basename "$1") + PROGNAME=${PROGNAME:-$(basename "$1")} + STDOUTLOG="$VARDIR/$PROGNAME.out" STDERRLOG="$VARDIR/$PROGNAME.err" - "$1" >"$STDOUTLOG" 2>"$STDERRLOG" || { + # What follows runs the command that we have been given (with any arguments passed) + # and logs: + # * stdout to $STDOUTLOG (a temporary file) and possibly to syslog, if enabled. + # * stderr to $STDERRLOG (a temporary file) and possibly to syslog, if enabled. + # + # When logging to syslog, stdout goes as debug level and stderr as warning (not error) + # + # The temporary file is used in case the command fails, at which point we try to log + # a warning in GitLab's alerts facility. + + $* \ + > >(tee $STDOUTLOG |_logger -t "dougal.runner.$PROGNAME[$$]" -p "$DOUGAL_LOG_FACILITY.debug") \ + 2> >(tee $STDERRLOG |_logger -t "dougal.runner.$PROGNAME[$$]" -p "$DOUGAL_LOG_FACILITY.warning") || { + print_error "Failed: $PROGNAME" cat $STDOUTLOG cat $STDERRLOG @@ -52,8 +85,8 @@ function run () { exit 2 } -# cat $STDOUTLOG + unset PROGNAME rm $STDOUTLOG $STDERRLOG } @@ -117,13 +150,13 @@ run $BINDIR/import_smsrc.py print_log "Process ASAQC queue" # Run insecure in test mode: # export NODE_TLS_REJECT_UNAUTHORIZED=0 -run $DOUGAL_ROOT/lib/www/server/queues/asaqc/index.js +PROGNAME=asaqc_queue run $DOUGAL_ROOT/lib/www/server/queues/asaqc/index.js print_log "Run database housekeeping actions" run $BINDIR/housekeep_database.py print_log "Run QCs" -run $DOUGAL_ROOT/lib/www/server/lib/qc/index.js +PROGNAME=run_qc run $DOUGAL_ROOT/lib/www/server/lib/qc/index.js rm "$LOCKFILE"