From 1b131f57991a669c3669f67058db8601ee8887cd Mon Sep 17 00:00:00 2001 From: jonas Date: Sat, 1 Apr 2023 12:07:04 +0200 Subject: [PATCH] reworked log and logError for pipes --- inc/bash-colors.sh | 1 + inc/main-inc.sh | 19 ++++++-- inc/output.sh | 86 ++++++++++++++++++++++++--------- inc/sensor-scripts/speedtest.sh | 25 ++++++++++ main.sh | 16 ++++-- 5 files changed, 119 insertions(+), 28 deletions(-) create mode 100644 inc/sensor-scripts/speedtest.sh diff --git a/inc/bash-colors.sh b/inc/bash-colors.sh index 6c73acf..82444bb 100644 --- a/inc/bash-colors.sh +++ b/inc/bash-colors.sh @@ -1,5 +1,6 @@ #!/bin/bash +FG_RED="\e[31m" BG_RED="\e[41m\e[97m" FG_BLUE="\e[34m" FG_YELLOW="\e[33m" diff --git a/inc/main-inc.sh b/inc/main-inc.sh index 7a8fbb6..a05baf9 100644 --- a/inc/main-inc.sh +++ b/inc/main-inc.sh @@ -10,9 +10,22 @@ source output.sh # Include all sensor scripts if [ -d "sensor-scripts" ]; then - for script in $(ls sensor-scripts/*.sh 2>/dev/null); do - log "Loading sensor function $(basename ${script} .sh)" - source "${script}" + for SCRIPT in $(ls sensor-scripts/*.sh 2>/dev/null); do + log "Loading sensor function $(basename ${SCRIPT} .sh)" + + TMP_LOG=$(mktemp /tmp/tmp.sf-XXXXXXXX.log) + source "${SCRIPT}" >${TMP_LOG} 2>&1 + + if [ $? -ne 0 ] ; then + cat ${TMP_LOG} | logError + logError "An error occured loading sensor function $(basename ${SCRIPT} .sh)" + + rm ${TMP_LOG} + exit 1 + else + cat ${TMP_LOG} | log + rm ${TMP_LOG} + fi done fi diff --git a/inc/output.sh b/inc/output.sh index 034d824..4a14877 100644 --- a/inc/output.sh +++ b/inc/output.sh @@ -7,36 +7,78 @@ function _now { } # Write log to stdout +# Usage: log +# Usage with tag: log -t +# Usage with pipe: log -p [] function log { - echo "[ $(_now) :: INFO ] $@" -} - -# Log with custom tag -function logAdv { - TAG="${1}" - shift + if ! [ "${1}" ] || [ "${1}" = "-p" ]; then + # Read from pipe + PREFIX="PIPE" + [ "${2}" = "" ] || PREFIX="${2}" - echo -e "${FG_BLUE}[ $(_now) :: ${TAG} ] ${@}${C_RESET}" -} + while read -r LINE; do + echo -e "${FG_YELLOW}[ $(_now) :: ${PREFIX} ] ${LINE}${C_RESET}" + done + else + # Read from arguments + PREFIX="INFO" + [ "${1}" = "-t" ] && ! [ "${2}" = "" ] && PREFIX="${2}" + shift 2 -# Log tagged for sensor scripts, can be muted with main.sh -qs -function logScript { - if ! [ "${SCRIPTS_QUIET}" = "yes" ]; then - echo -e "[ $(_now) :: SENS ] ${@}" + echo "${@}" | while read -r LINE; do + echo "[ $(_now) :: ${PREFIX} ] ${LINE}" + done fi } -# Write error to stderr +# Write log to stderr +# Usage: logError +# Usage with tag: logError -t +# Usage with pipe: logError -p [] function logError { - echo -e "${BG_RED}[ $(_now) :: FAIL ] ${@}${C_RESET}" >&2 + if ! [ "${1}" ] || [ "${1}" = "-p" ]; then + # Read from pipe + PREFIX="FAIL" + [ "${2}" = "" ] || PREFIX="${2}" + + while read -r LINE; do + echo -e "${BG_RED}[ $(_now) :: ${PREFIX} ] ${LINE}${C_RESET}" >&2 + done + else + # Read from arguments + PREFIX="FAIL" + [ "${1}" = "-t" ] && ! [ "${2}" = "" ] && PREFIX="${2}" + shift 2 + + echo "${@}" | while read -r LINE; do + echo -e "${BG_RED}[ $(_now) :: ${PREFIX} ] ${LINE}${C_RESET}" >&2 + done + fi } -# Write pipe input to stdout -function logPipe { - PREFIX="PIPE" - [ "${1}" = "" ] || PREFIX="${@}" +# Log tagged for sensor scripts, can be muted with the -qs arg on main.sh +# Usage: logScript +# Usage with tag: logScript -t +# Usage with pipe: logScript -p [] +function logScript { + if ! [ "${SCRIPTS_QUIET}" = "yes" ]; then + if ! [ "${1}" ] || [ "${1}" = "-p" ]; then + # Read from pipe + PREFIX="SENS" + [ "${2}" = "" ] || PREFIX="${2}" + + while read -r LINE; do + echo -e "[ $(_now) :: ${PREFIX} ] ${LINE}" + done + else + # Read from arguments + PREFIX="SENS" + [ "${1}" = "-t" ] && ! [ "${2}" = "" ] && PREFIX="${2}" + shift 2 - while read -r LINE; do - echo -e "${FG_YELLOW}[ $(_now) :: ${PREFIX} ] ${LINE}${C_RESET}" - done + echo "${@}" | while read -r LINE; do + echo "[ $(_now) :: ${PREFIX} ] ${LINE}" + done + fi + fi } \ No newline at end of file diff --git a/inc/sensor-scripts/speedtest.sh b/inc/sensor-scripts/speedtest.sh new file mode 100644 index 0000000..5865935 --- /dev/null +++ b/inc/sensor-scripts/speedtest.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Usage: doSpeedtest [] [] +function doSpeedtest { + if ! [ "${1}" = "" ]; then + INTERFACE=${1} + INTERFACE_ARG="-I ${INTERFACE}" + INTERFACE_TEXT=" from NIC '${INTERFACE}'" + fi + + if ! [ "${2}" = "" ]; then + SERVER_ID=${2} + SERVER_ARG="-s ${SERVER_ID}" + SERVER_ID_TEXT=" to server ${SERVER_ID}" + fi + + logScript "Doing internet speedtest${INTERFACE_TEXT}${SERVER_ID_TEXT}" + + if ! OUT=$(speedtest -f json); then + logError "Speedtest failed" + logError "${OUT}" + else + echo + fi +} \ No newline at end of file diff --git a/main.sh b/main.sh index 18ea666..7843569 100644 --- a/main.sh +++ b/main.sh @@ -2,6 +2,16 @@ cd $(dirname ${0}) >/dev/null source inc/main-inc.sh +# Test mode, only run specified sensor script once +if [[ "${1}" == *".sh" ]]; then + log -t "TEST" "Test mode, only running sensor script '${1}'" + + source "sensors.d/${1}" + log -t "TEST" "Sensor script quit with exit code $?" + + exit 0 +fi + START_TIME=$(date +%s) # Load all sensor scripts and their intervals @@ -15,7 +25,7 @@ for SCRIPT in $(ls sensors.d/*.sh); do SCRIPTS["${BASENAME}"]=${INTERVAL} done -log "Starting Scheduler routine" +log "Starting scheduler routine" if [[ "$@" == *"-qs"* ]]; then log "Will suppress sensor script outputs" @@ -29,8 +39,8 @@ while true; do for SCRIPT in "${!SCRIPTS[@]}"; do SCRIPT_EVERY=${SCRIPTS[${SCRIPT}]} if [ $( expr ${DIFF} % ${SCRIPT_EVERY} ) -eq 0 ]; then - logAdv "SCHD" "Launching $(basename ${SCRIPT})" - source "sensors.d/${SCRIPT}" ${QUIET_SCRIPT_PARAM} & + log -t "SCHD" "Launching $(basename ${SCRIPT})" + source "sensors.d/${SCRIPT}" & fi done