153 lines
5.6 KiB
Bash
Executable File
153 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
##This script is a helper script defining universal functions to be used in other scripts -
|
|
#+namely logging levels and locations and error reporting.
|
|
#+The idea is to source it in other scripts and thus have them all log the same.
|
|
|
|
#Error array for scripts that report runtime errors
|
|
declare -a errors=()
|
|
|
|
#Function to create inital log; Accepts the prefix of the log and folder.
|
|
#+For example, passing logging testytest will create the folder /home/shmick/Scripts/Logs/testytest
|
|
#+As well as a log file named testytest_Log and a report named testytest_[script_run_time]
|
|
#+Ex: /home/shmick/Scripts/Logs/testytest/testytest.
|
|
#+These files can then be pulled, renamed and compressed on an Ansible node.
|
|
|
|
#Color output#
|
|
BLACK='\033[0;30m'
|
|
DARK_GRAY='\033[1;30m'
|
|
RED='\033[0;31m'
|
|
LIGHT_RED='\033[1;31m'
|
|
GREEN='\033[0;32m'
|
|
LIGHT_GREEN='\033[1;32m'
|
|
ORANGE='\033[0;33m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
LIGHT_BLUE='\033[1;34m'
|
|
PURPLE='\033[0;35m'
|
|
LIGHT_PURPLE='\033[1;35m'
|
|
CYAN='\033[0;36m'
|
|
LIGHT_CYAN='\033[1;36m'
|
|
WHITE='\033[0;37m'
|
|
GRAY='\033[1;37m'
|
|
STOP="\e[0m"
|
|
|
|
|
|
#If a function calls 'logging' for a log, it will create a log file; otherwise, keep the
|
|
#+variable empty thus printing only to terminal
|
|
logging () {
|
|
if [[ -n $2 ]]; then
|
|
if [[ ! -d "/home/shmick/Scripts/Logs/$1/" ]]; then
|
|
mkdir -p "/home/shmick/Scripts/Logs/$1/"
|
|
fi
|
|
export LOG="/home/shmick/Scripts/Logs/$1/$2Log"
|
|
export REPORT="/home/shmick/Scripts/Logs/$1/$2"
|
|
export PREFIX=$2
|
|
else
|
|
if [[ ! -d "/home/shmick/Scripts/Logs/$1/" ]]; then
|
|
mkdir -p "/home/shmick/Scripts/Logs/$1/"
|
|
fi
|
|
export LOG="/home/shmick/Scripts/Logs/$1/$1Log"
|
|
export REPORT="/home/shmick/Scripts/Logs/$1/$1"
|
|
export PREFIX=$1
|
|
fi
|
|
if [[ -f "$LOG" ]]; then
|
|
OLD_LOG_DATE=$(stat $LOG | grep Modify | awk '{print $2}' | sed -e 's/-//g')
|
|
OLD_LOG_TIME=$(stat $LOG | grep Modify | awk '{print $3}' | sed -e 's/://g' | awk -F. '{print $1}')
|
|
mv "$LOG" "$(dirname $LOG)/$(basename $LOG)_"$OLD_LOG_DATE"_"$OLD_LOG_TIME"" 2> /dev/null 2>&1
|
|
zstd -11 --rm -f "$(dirname $LOG)/$(basename $LOG)_"$OLD_LOG_DATE"_"$OLD_LOG_TIME"" > /dev/null 2>&1
|
|
# ^ Append timestamp (YYYYMMDD_HHMMSS - ex 20210301_093543) to log if it exists
|
|
fi
|
|
if [[ -f "$REPORT" ]]; then
|
|
OLD_REPORT_DATE=$(stat $REPORT | grep Modify | awk '{print $2}' | sed -e 's/-//g')
|
|
OLD_REPORT_TIME=$(stat $REPORT | grep Modify | awk '{print $3}' | sed -e 's/://g' | awk -F. '{print $1}')
|
|
mv "$REPORT" "$(dirname $REPORT)/$(basename $REPORT)_"$OLD_REPORT_DATE"_"$OLD_REPORT_TIME"" 2> /dev/null 2>&1
|
|
zstd -11 --rm -f "$(dirname $REPORT)/$(basename $REPORT)_"$OLD_REPORT_DATE"_"$OLD_REPORT_TIME"" > /dev/null 2>&1
|
|
fi
|
|
touch $LOG
|
|
touch $REPORT
|
|
#Greeter
|
|
if [[ -n "$1" ]]; then
|
|
printf "Logging is ${GREEN}enabled${STOP} via Okiru!\n"
|
|
printf "Using prefix: ${PURPLE}$PREFIX\n${STOP}"
|
|
printf "Logging to directory: ${LIGHT_CYAN}/home/shmick/Scripts/Logs/${PURPLE}$1${LIGHT_CYAN}/\n${STOP}"
|
|
printf "Log file: ${LIGHT_CYAN}$LOG\n${STOP}"
|
|
printf "Report file: ${LIGHT_CYAN}$REPORT\n${STOP}"
|
|
elif [[ -z $1 ]]; then
|
|
printf "Logging is ${RED}disabled${STOP}; No log file will be generated.\n"
|
|
fi
|
|
}
|
|
#Debugging level logging; can be toggled via a switch
|
|
debug () {
|
|
printf "${BLUE}[DEBUG]: $1${STOP}\n"
|
|
if [[ -f $LOG ]]; then
|
|
echo -e "$(date | awk '{print $4}') [DEBUG]: $1" >> $LOG
|
|
fi
|
|
}
|
|
#Information level logging;
|
|
info () {
|
|
printf "${CYAN}[INFO]:${STOP} $1\n"
|
|
if [[ -f $LOG ]]; then
|
|
echo -e "$(date | awk '{print $4}') [INFO]: $1" >> $LOG
|
|
fi
|
|
}
|
|
#Warning level logging;
|
|
warn () {
|
|
printf "${YELLOW}[WARNING]:${STOP} $1\n"
|
|
if [[ -f $LOG ]]; then
|
|
echo -e "$(date | awk '{print $4}') [WARN]: $1" >> $LOG
|
|
fi
|
|
}
|
|
#Error logging function; Errors are added to an array and a report file.
|
|
error () {
|
|
echo $1 1>&2
|
|
# ` ^ Output error message to stderr
|
|
printf "${RED}[ERROR]: $1${STOP}\n"
|
|
# ^ Print it to the screen
|
|
errors+=("$1")
|
|
# ^ And add to errors array
|
|
if [[ -f $LOG ]]; then
|
|
echo -e "$(date | awk '{print $4}') [ERROR]: $1" >> $LOG
|
|
# ^ Log it with its' time and date
|
|
fi
|
|
if [[ -f $REPORT ]]; then
|
|
echo -e "$1" >> $REPORT
|
|
# ^ And without time and date to a report file
|
|
fi
|
|
return 1
|
|
}
|
|
ok () {
|
|
printf "${GREEN}[SUCCESS]: $1${STOP}\n"
|
|
if [[ -f $LOG ]]; then
|
|
echo -e "$(date | awk '{print $4}') [SUCCESS]: $1" >> $LOG
|
|
fi
|
|
}
|
|
|
|
#Lock function; accepts the lockfile and the command
|
|
lock () {
|
|
while [[ -e $1 ]]; do
|
|
printf "${RED}[ERROR]:${STOP} Process already running.\n"
|
|
break
|
|
# ^ Skips whatever is running and moves on
|
|
done
|
|
if [[ ! -e $1 ]]; then
|
|
flock -n $1 $2
|
|
rm -rf $1
|
|
fi
|
|
}
|
|
#Same as logging function opener, for scripts that need to wrap things up nicely
|
|
end_logging () {
|
|
if [[ -f "$LOG" ]]; then
|
|
OLD_LOG_DATE=$(stat $LOG | grep Modify | awk '{print $2}' | sed -e 's/-//g')
|
|
OLD_LOG_TIME=$(stat $LOG | grep Modify | awk '{print $3}' | sed -e 's/://g' | awk -F. '{print $1}')
|
|
mv "$LOG" "$(dirname $LOG)/$(basename $LOG)_"$OLD_LOG_DATE"_"$OLD_LOG_TIME"" 2> /dev/null 2>&1
|
|
zstd -11 --rm -f "$(dirname $LOG)/$(basename $LOG)_"$OLD_LOG_DATE"_"$OLD_LOG_TIME"" > /dev/null 2>&1
|
|
# ^ Append timestamp (YYYYMMDD_HHMMSS - ex 20210301_093543) to log if it exists
|
|
fi
|
|
if [[ -f "$REPORT" ]]; then
|
|
OLD_REPORT_DATE=$(stat $REPORT | grep Modify | awk '{print $2}' | sed -e 's/-//g')
|
|
OLD_REPORT_TIME=$(stat $REPORT | grep Modify | awk '{print $3}' | sed -e 's/://g' | awk -F. '{print $1}')
|
|
mv "$REPORT" "$(dirname $REPORT)/$(basename $REPORT)_"$OLD_REPORT_DATE"_"$OLD_REPORT_TIME"" 2> /dev/null 2>&1
|
|
zstd -11 --rm -f "$(dirname $REPORT)/$(basename $REPORT)_"$OLD_REPORT_DATE"_"$OLD_REPORT_TIME"" > /dev/null 2>&1
|
|
fi
|
|
}
|