Skip to content
Snippets Groups Projects
Select Git revision
  • 378b769d270abda72bc7cddb1de7dae0575ea66a
  • master default protected
  • diag
  • version1.3-archivematica
  • version1.2-archivematica
  • version1.1-archivematica
  • version1.0-archivematica
  • version1.0-rosetta
8 results

sample_testing.pm

Blame
  • 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