Select Git revision
error-summary.sh
error-summary.sh 2.29 KiB
#!/usr/bin/env bash
### META
# AUTHORS:
# - Jörg Sachse (<Joerg.Sachse@slub-dresden.de>)
# - Jens Steidl (<Jens.Steidl@slub-dresden.de>)
# INVOCATION:
# ./error_summary.sh [-h] [-n NUM] [-d DAYS] [-w] [-c]
# KNOWN PROBLEMS:
# - Showing Warnings with "-w" is buggy, use with caution.
### DEFAULTS
HOW_MANY_CHARS=200
HOW_MANY_DAYS=10
WARN="" # Default: do not filter for Warnings, only show Errors
FILTER_STRING=" (ERROR${WARN})\s+\[.{0,${HOW_MANY_CHARS}}"
# get correct log path, this differs between servers
if [[ -d "/operational_shared/logs/${HOSTNAME}.slub-dresden.de/" ]]; then
SERVER_LOG_DIR="/operational_shared/logs/${HOSTNAME}.slub-dresden.de/"
else
SERVER_LOG_DIR="/operational_shared/logs/${HOSTNAME}/"
fi
### CLI ARGUMENTS
for ARG in "$@"; do
case ${ARG} in
-h|--help)
echo "call help function here"
exit 0
;;
-n|--chars)
HOW_MANY_CHARS="${2}"
shift;
;;
-d|--days)
HOW_MANY_DAYS="${2}"
shift;
;;
-w|--warn)
WARN="|WARN"
;;
-c|--class)
FILTER_STRING=" (ERROR${WARN})\s+\[[^[]*\]"
;;
*)
echo "'${ARG}' is not a valid parameter. Please use '$( basename "${0}" ) --help'. Exiting."
exit 1
;;
esac
done
echo ""
echo "USING THE FOLLOWING SETTINGS:"
echo -e "\tSERVERNAME: '${HOSTNAME}'"
echo -e "\tFILTERING LOGS FROM $( date -d "${HOW_MANY_DAYS} days ago" +%Y-%m-%d ) UNTIL $( date -d today +%Y-%m-%d )"
echo -e "\tHOW MANY CHARACTERS: ${HOW_MANY_CHARS}"
echo -en "\tCOUNT WARNINGS: "; [[ "${WARN}" == "|WARN" ]] && echo "yes" || echo "no"
### FUNCTIONS
# thx @Steidl!
# grep -o "STARTZEICHENKETTE..\{ANZAHL_ZEICHEN_NACH_STARTZEICHENKETTE\}" | sort | uniq -c | sort -nr
get_last_n_days(){
LOGFILES="$( find "${SERVER_LOG_DIR}/" -maxdepth 1 -mtime -"${HOW_MANY_DAYS}" -name "server.log*" )"
for LOGFILE in ${LOGFILES}; do
if file -b "${LOGFILE}" | grep "gzip compressed data" > /dev/null; then
GREP_CMD="zgrep"
elif file -b "${LOGFILE}" | grep "ASCII text" > /dev/null; then
GREP_CMD="grep"
else
>&2 echo "ERROR: unknown filetype, cannot find error strings from file '${LOGFILE}.'"
fi
${GREP_CMD} -oP "${FILTER_STRING}" "${LOGFILE}"
done | \
sort | uniq -c | sort -nr
}
### MAIN
echo ""
echo "REPORT LAST ${HOW_MANY_DAYS} DAYS:"
get_last_n_days
echo ""
echo "REPORT SINCE YESTERDAY 00:00 O'CLOCK:"
HOW_MANY_DAYS=1
get_last_n_days