reworked log and logError for pipes

main
Jonas Lührig 3 years ago
parent 7f40e79b57
commit 1b131f5799

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
FG_RED="\e[31m"
BG_RED="\e[41m\e[97m" BG_RED="\e[41m\e[97m"
FG_BLUE="\e[34m" FG_BLUE="\e[34m"
FG_YELLOW="\e[33m" FG_YELLOW="\e[33m"

@ -10,9 +10,22 @@ source output.sh
# Include all sensor scripts # Include all sensor scripts
if [ -d "sensor-scripts" ]; then if [ -d "sensor-scripts" ]; then
for script in $(ls sensor-scripts/*.sh 2>/dev/null); do for SCRIPT in $(ls sensor-scripts/*.sh 2>/dev/null); do
log "Loading sensor function $(basename ${script} .sh)" log "Loading sensor function $(basename ${SCRIPT} .sh)"
source "${script}"
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 done
fi fi

@ -7,36 +7,78 @@ function _now {
} }
# Write log to stdout # Write log to stdout
# Usage: log <text>
# Usage with tag: log -t <tag> <text>
# Usage with pipe: log -p [<tag>]
function log { function log {
echo "[ $(_now) :: INFO ] $@" if ! [ "${1}" ] || [ "${1}" = "-p" ]; then
} # Read from pipe
PREFIX="PIPE"
# Log with custom tag [ "${2}" = "" ] || PREFIX="${2}"
function logAdv {
TAG="${1}"
shift
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 echo "${@}" | while read -r LINE; do
function logScript { echo "[ $(_now) :: ${PREFIX} ] ${LINE}"
if ! [ "${SCRIPTS_QUIET}" = "yes" ]; then done
echo -e "[ $(_now) :: SENS ] ${@}"
fi fi
} }
# Write error to stderr # Write log to stderr
# Usage: logError <text>
# Usage with tag: logError -t <tag> <text>
# Usage with pipe: logError -p [<tag>]
function logError { 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 # Log tagged for sensor scripts, can be muted with the -qs arg on main.sh
function logPipe { # Usage: logScript <text>
PREFIX="PIPE" # Usage with tag: logScript -t <tag> <text>
[ "${1}" = "" ] || PREFIX="${@}" # Usage with pipe: logScript -p [<tag>]
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 while read -r LINE; do
echo -e "${FG_YELLOW}[ $(_now) :: ${PREFIX} ] ${LINE}${C_RESET}" echo -e "[ $(_now) :: ${PREFIX} ] ${LINE}"
done
else
# Read from arguments
PREFIX="SENS"
[ "${1}" = "-t" ] && ! [ "${2}" = "" ] && PREFIX="${2}"
shift 2
echo "${@}" | while read -r LINE; do
echo "[ $(_now) :: ${PREFIX} ] ${LINE}"
done done
fi
fi
} }

@ -0,0 +1,25 @@
#!/bin/bash
# Usage: doSpeedtest [<interface>] [<speedtest-server-id>]
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
}

@ -2,6 +2,16 @@
cd $(dirname ${0}) >/dev/null cd $(dirname ${0}) >/dev/null
source inc/main-inc.sh 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) START_TIME=$(date +%s)
# Load all sensor scripts and their intervals # Load all sensor scripts and their intervals
@ -15,7 +25,7 @@ for SCRIPT in $(ls sensors.d/*.sh); do
SCRIPTS["${BASENAME}"]=${INTERVAL} SCRIPTS["${BASENAME}"]=${INTERVAL}
done done
log "Starting Scheduler routine" log "Starting scheduler routine"
if [[ "$@" == *"-qs"* ]]; then if [[ "$@" == *"-qs"* ]]; then
log "Will suppress sensor script outputs" log "Will suppress sensor script outputs"
@ -29,8 +39,8 @@ while true; do
for SCRIPT in "${!SCRIPTS[@]}"; do for SCRIPT in "${!SCRIPTS[@]}"; do
SCRIPT_EVERY=${SCRIPTS[${SCRIPT}]} SCRIPT_EVERY=${SCRIPTS[${SCRIPT}]}
if [ $( expr ${DIFF} % ${SCRIPT_EVERY} ) -eq 0 ]; then if [ $( expr ${DIFF} % ${SCRIPT_EVERY} ) -eq 0 ]; then
logAdv "SCHD" "Launching $(basename ${SCRIPT})" log -t "SCHD" "Launching $(basename ${SCRIPT})"
source "sensors.d/${SCRIPT}" ${QUIET_SCRIPT_PARAM} & source "sensors.d/${SCRIPT}" &
fi fi
done done

Loading…
Cancel
Save