#!/bin/bash APP_SVNID='$HeadURL$ $LastChangedRevision$' . $(ade-config ade_share_prefix)/include/ade.sh || { echo "${0##*/}: INTERNAL ERROR: failed to load ade.sh" >&2; exit 3; } RDW2_CHECK_DEFINED_ERRORS=( "KEY=RDW2_CHECK_ERR_MISC; FMT=\"%s\"" ) # Other globals CHECK_IM_BEING_BACKED_UP_MAX_AGE_DAYS=10 rdw2_check() { local ERRSTACK_REF="$1"; shift # Set ade options ade_register_error_types RDW2_CHECK_DEFINED_ERRORS # Defaults for options OPT_MODE=unset # Register rdw2-check options ade_register_options "$ERRSTACK_REF" --longoptions=check-im-being-backed-up --callback-template="rdw2_check_opt_handler_%s" || return $? ade_set_callbacks "$ERRSTACK_REF" rdw2_check_usage_help rdw2_check_version rdw2_check_paths || return $? # Process options ade_process_options "$ERRSTACK_REF" NEW_DOLLAR_AT "$@" || return $? set -- "${NEW_DOLLAR_AT[@]}" # Process arguments # (delegated) # Delegate case $OPT_MODE in check_im_being_backed_up) check_im_being_backed_up "$ERRSTACK_REF" "$@" ;; *) ade_show_bad_usage "$ERRSTACK_REF" ;; esac return $? } check_im_being_backed_up() { local ERRSTACK_REF="$1"; shift local MOUNTPOINTS NOW_TS MOUNTPOINT AGE_DAYS # Sanity checks and derivations MOUNTPOINTS=( $(df -P -t xfs -t ext4 -t zfs | sed -e 1d -e "s/.* //" | xargs echo) ) NOW_TS=$(date +%s) # Process arguments [ $# = 0 ] || ade_show_bad_usage "$ERRSTACK_REF" # Guts for MOUNTPOINT in "${MOUNTPOINTS[@]}"; do if [ -f $MOUNTPOINT/.rdw2-dle-label ]; then AGE_DAYS=$(( ($NOW_TS - $(stat -c %Y $MOUNTPOINT/.rdw2-dle-label))/3600/24 )) if [ $AGE_DAYS -gt $CHECK_IM_BEING_BACKED_UP_MAX_AGE_DAYS ]; then ade_warning "$ERRSTACK_REF" RDW2_CHECK_ERR_MISC "$MOUNTPOINT: not backed up for $AGE_DAYS days" else ade_info "$ERRSTACK_REF" "$MOUNTPOINT: backed up $AGE_DAYS ago" fi elif [ -f $MOUNTPOINT/.rdw2-ignore ]; then ade_info "$ERRSTACK_REF" "$MOUNTPOINT: never backed up because $(cat $MOUNTPOINT/.rdw2-ignore)" else ade_warning "$ERRSTACK_REF" RDW2_CHECK_ERR_MISC "$MOUNTPOINT: never backed up" fi done } rdw2_check_opt_handler_check_im_being_backed_up() { local ERRSTACK_REF="$1"; shift OPT_MODE=check_im_being_backed_up return $ADE_OK } rdw2_check_usage_help() { local ERRSTACK_REF="$1"; shift local USAGE_TEXT_SHORT_REF="$1"; shift local USAGE_TEXT_LONG_REF="$1"; shift eval "$USAGE_TEXT_SHORT_REF=" eval "$USAGE_TEXT_LONG_REF=\"\ --check-im-being-backed-up check all filesystems are being backed up\"" return $ADE_OK } rdw2_check_paths() { local ERRSTACK_REF="$1"; shift local PATHLIST_REF=$1; shift eval "$PATHLIST_REF=\"\"" return $ADE_OK } rdw2_check_version() { local ERRSTACK_REF="$1"; shift local VERSION_REF=$1; shift ade_extract_version "$ERRSTACK_REF" "$APP_SVNID" "$VERSION_REF" return $ADE_OK } ade_main rdw2_check "$@"