diff --git a/check_file_age b/check_file_age new file mode 100644 index 0000000000000000000000000000000000000000..6fadc6ca4a820bfeb302a214b01f0eaa4a44ebb1 --- /dev/null +++ b/check_file_age @@ -0,0 +1,176 @@ +#!/bin/bash +# ====================================================================== +# +# Check file age +# +# ---------------------------------------------------------------------- +# 2024-06-21 v1.0 <martin.gasser@unibe.ch> +# ====================================================================== + +. $( dirname $0 )/inc_pluginfunctions + +export self_APPVERSION=1.0 + +dir_files=/var/iml-backup +filter_files='*.*' + +typeset -i iAgeSec +typeset -i iAgeD + +typeset -i iTotal +typeset -i iOK +typeset -i iWarning +typeset -i iCritical + +typeset -i iLimitWarning=7 +typeset -i iLimitCritical=14 + + +# ---------------------------------------------------------------------- +# FUNCTIONS +# ---------------------------------------------------------------------- + +# show help text +function showHelp(){ + local _self; _self=$(basename $0) +cat <<EOF +$( ph.showImlHelpHeader ) + +Check if files are not out of date. +You can customize the values for +* directory +* limits for warning and critical +* filename filter pattern + +This plugin sends performancedata. + +SYNTAX: + + $_self [-h] [--dir PATH] [--filter FILTER] [--critical VALUE] [--warning VALUE] + +OPTIONS: + + -h, --help + this help + +PARAMETERS: + + -d, --dir PATH + set installation dir of iml deployment to find its check skript + default dir: ${dir_files} + + -c, --critical VALUE + critical level in days (default: $iLimitCritical) + + -w. --warning VALUE + warning level in days (default: $iLimitWarning) + + -f --filter FILTER + filter for filenames (default: ${filter_files} + +EXAMPLE: + + $_self + Check backup data with initial values + + $_self -d /data/mybackups + Check iso files a given directory + + $_self -d /data/mybackups -w 14 -c 28 + Check iso files a given directory and customized limits + +EOF +} + + +# get age of a file in sec +# param string filename to test +function _getFileAge(){ + echo $(($(date +%s) - $(date +%s -r "$1"))) +} + +# get a list of files in dir in alphabetic order +function _getfiles(){ + find "${dir_files}" -type f -name "${filter_files}" | sort +} + + +# ---------------------------------------------------------------------- +# MAIN +# ---------------------------------------------------------------------- + + +# --- check param -h + +while [[ "$#" -gt 0 ]]; do case $1 in + -h|--help) showHelp; exit 0;; + -d|--dir) dir_files=$2; shift ;shift;; + -c|--critcal) iLimitCritical=$2; shift ;shift;; + -w|--warning) iLimitWarning=$2; shift ;shift;; + -f|--filter) filter_files=$2; shift ;shift;; + *) echo "ERROR: Unknown parameter: $1"; showHelp; exit 1; +esac; done + + +# --- test + +if [ $iLimitWarning -ge $iLimitCritical ]; then + ph.abort "ERROR: limit for warning ($iLimitWarning) must be lower than critical ($iLimitCritical). Get help with -h." +fi + +if [ ! -d "$dir_files" ]; then + ph.abort "ERROR: directory [$dir_files] does not exist. Set it with -d. Get help with -h." +fi + +if [ ! -r "$dir_files" ]; then + ph.abort "ERROR: unable to read the existing dir [$dir_files]. Check the permissions for $USER." +fi + + +# --- output data + +data="$( for myfile in $( _getfiles ) + do + iAgeSec=$( _getFileAge "$myfile" ) + iAgeD=$iAgeSec/60/60/24 + sBar=$( yes '#' | head -n $iAgeD | tr -d "\n" ) + sStatus="OK" + + if [ $iAgeD -ge $iLimitWarning ]; then + if [ $iAgeD -ge $iLimitCritical ]; then + sStatus="CRITICAL" + else + sStatus="WARNING" + fi + fi + + printf "%-9s %3s d %-10s %s\n" $sStatus $iAgeD "$sBar" "$( ls -lh $myfile )" + done +)" + +# --- Counters + +iTotal=$( grep -c "." <<< "$data" ) +iOK=$( grep -c "^OK" <<< "$data" ) +iWarning=$( grep -c "^WARNING" <<< "$data" ) +iCritical=$( grep -c "^CRITICAL" <<< "$data" ) + +test $iWarning -gt 0 && ph.setStatus "warning" +test $iCritical -gt 0 && ph.setStatus "critical" + +# --- ouput + +ph.status "File age $dir_files - $iTotal total - $iCritical critical ($iLimitCritical d) .. $iWarning warnings ($iLimitWarning d) .. $iOK OK" + +echo "All files in alphabetic order:" +echo "$data" + +# --- performance data + +ph.perfadd "ok" "$iOK" "" "" 0 $iTotal +ph.perfadd "warning" "$iWarning" "" "" 0 $iTotal +ph.perfadd "critical" "$iCritical" "" "" 0 $iTotal + +ph.exit + +# ----------------------------------------------------------------------