monitoring-plugins-vn/plugins/check_backup/check.sh

51 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
set -e
MY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$MY_DIR/config.sh"
DAY=$(date +%Y-%m-%d)
MISSING_BACKUPS=()
N_CHECKED=0
N_PRESENT=0
N_FILES=0
mapfile -t ZONES < <(yq -c -r '.devices | keys[]' "$DEV_FILE")
for ZONE in "${ZONES[@]}"; do
ZONE_JQ=$(yq -c ".devices.$ZONE" "$DEV_FILE")
mapfile -t NAMES < <(yq -c -r 'keys[]' <<< "$ZONE_JQ")
for NAME in "${NAMES[@]}"; do
DEVICE_PATH="$BACKUP_PATH/$ZONE/$NAME"
MISSING="true"
if [ -d "$DEVICE_PATH" ]; then
DEVICE_N_FILES=$(find "$DEVICE_PATH" -name "${NAME}_${DAY}_*" ! -name "*.log" | wc -l)
N_FILES=$((N_FILES+DEVICE_N_FILES))
if [ "$DEVICE_N_FILES" -ge "1" ]; then
MISSING="false"
fi
fi
if [ "$MISSING" = "true" ]; then
MISSING_BACKUPS+=("$ZONE.$NAME")
else
N_PRESENT=$((N_PRESENT+1))
fi
N_CHECKED=$((N_CHECKED+1))
done
done
N_MISSING=${#MISSING_BACKUPS[@]}
PERF_DATA="day=$DAY backup_path='$BACKUP_PATH' checked=$N_CHECKED present=$N_PRESENT present_files=$N_FILES"
if [ "$N_MISSING" -gt "0" ]; then
CRITICAL_DATA="missing=$N_MISSING missing_backups='${MISSING_BACKUPS[@]}'"
echo "CRITICAL - $N_MISSING missing of $N_CHECKED backups | $PERF_DATA $CRITICAL_DATA"
exit 2
else
echo "OK - All $N_CHECKED backups present | $PERF_DATA"
exit 0
fi