diff --git a/files/error-summary.sh b/files/error-summary.sh index 14a1a598b535444834d08f66cb0c33f60e3e9494..3da4b029276bbb70a62b8829e1ce8cb196eb535c 100755 --- a/files/error-summary.sh +++ b/files/error-summary.sh @@ -4,15 +4,52 @@ # 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] + +#hh error_summary.sh - aggregate Rosetta Errors by error type +#hh +#hh Usage: error_summary.sh [-h] [-V] [-m] [-n NUM] [-d DAYS] [-w] [-c] +#hh +#hh Options: +#hh You can use the following CLI arguments to configure the behaviour of +#hh error-summary.sh. Please note that the CLI arguments need to be space +#hh separated. Combining arguments like "-cw" is currently NOT supported. +#hh +#hh -h, --help +#hh Show this help and exit. +#hh -V, --version +#hh Show version number and exit. +#hh -m, --man, --manpage, --manual +#hh Create a manpage from this help section and exit. +#hh Requires "help2man". +#hh -M, --showman +#hh Print the Manpage. +#hh Requires "help2man". +#hh -n, --chars NUMBER_OF_CHARS +#hh Set max length of error message lines. +#hh Default: 200 +#hh -d, --days NUMBER_OF_DAYS +#hh Set how many days back the error summary should go through the +#hh logs. +#hh Default: 10 +#hh -w, --warn +#hh Count Warnings as well as Errors. +#hh Default: unset (only count Errors) +#hh -c, --class +#hh Instead of a fixed message length, summarize and print errors +#hh by their respective Java class names. If this option is set, +#hh "-n|--chars" is ignored. +#hh Defaut: unset (use message length) +#hh +#hh Examples: +#hh error-summary.sh -n 50 -w -d 15 Cut messages after 50 characters, count warnings as well, filter logs from the last 15 days. +#hh error-summary.sh -w -c Count Erros AND Warnings, count messages by their respective Java class names. + ### 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 @@ -28,43 +65,66 @@ for REQUIREMENT in ${REQUIREMENTS}; do done -### CLI ARGUMENTS -# for ARG in "$@"; do -while [[ $# -gt 0 ]]; do - case ${1} in - -h|--help) - echo "call help function here" - exit 0 - ;; - -n|--chars) - HOW_MANY_CHARS="${2}" - shift; shift; - ;; - -d|--days) - HOW_MANY_DAYS="${2}" - shift; shift; - ;; - -w|--warn) - COUNT_WARNINGS="true" - shift; - ;; - -c|--class) - PRINT_ONLY_CLASSNAMES="true" - shift; - ;; - *) - echo "'${1}' is not a valid parameter. Please use '$( basename "${0}" ) --help'. Exiting." - exit 1 - ;; - esac -done +### FUNCTIONS +# Don't just call this function "help()", as that's a reserved command in Bash. +comment_help() { + sed -rn 's/^#hh ?//;T;p' "$0" +} +create_manpage(){ + # https://www.gnu.org/software/help2man/ + help2man --section 1 --source="SLUB Dresden" --no-info "${0}" | gzip > ./"$( basename "${0}" ".sh" ).gz" +} -### FUNCTIONS +show_manpage(){ + help2man --section 1 --source="SLUB Dresden" --no-info "${0}" | man -l - +} -# thx @Steidl! -# grep -o "STARTZEICHENKETTE..\{ANZAHL_ZEICHEN_NACH_STARTZEICHENKETTE\}" | sort | uniq -c | sort -nr +get_cli_args(){ + while [[ $# -gt 0 ]]; do + case ${1} in + -h|--help) + comment_help + exit 0 + ;; + -V|--version) + echo "$( basename "${0}" ) v1.0.0" + echo -e "\n\nCopyright (C)\n" + echo "This software is licensed under the GNU General Public License version 3 (GNU GPLv3)." + exit 0 + ;; + -m|--man|--manpage|--manual) + create_manpage + exit 0 + ;; + -M|--showman) + show_manpage + exit 0 + ;; + -n|--chars) + HOW_MANY_CHARS="${2}" + shift; shift; + ;; + -d|--days) + HOW_MANY_DAYS="${2}" + shift; shift; + ;; + -w|--warn) + COUNT_WARNINGS="true" + shift; + ;; + -c|--class) + PRINT_ONLY_CLASSNAMES="true" + shift; + ;; + *) + echo "'${1}' is not a valid parameter. Please use '$( basename "${0}" ) --help'. Exiting." + exit 1 + ;; + esac + done +} set_filter_string(){ if [[ "${COUNT_WARNINGS}" == "true" ]]; then @@ -78,6 +138,8 @@ set_filter_string(){ fi } +# 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 @@ -97,12 +159,14 @@ get_last_n_days(){ ### MAIN +get_cli_args "${@}" + 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" +echo -en "\tCOUNT WARNINGS: "; [[ "${COUNT_WARNINGS}" == "true" ]] && echo "yes" || echo "no" set_filter_string