71 lines
2.4 KiB
Bash
71 lines
2.4 KiB
Bash
#!/bin/bash
|
|
|
|
project="${1}"
|
|
bucket="${2}"
|
|
declare -a sixmonths=('multinode')
|
|
output_status="OK"
|
|
exit_status=0
|
|
problems=""
|
|
num_problems=0
|
|
data_dir='/opt/backups/data'
|
|
for project in $(ls ${data_dir}); do
|
|
for bucket in $(ls ${data_dir}/${project}/ | sed 's/\.dat$//'); do
|
|
issixmonths="false"
|
|
for customer in "${sixmonths[@]}"; do
|
|
if [[ "${bucket}" =~ ${customer} ]]; then
|
|
issixmonths="true"
|
|
fi
|
|
done
|
|
number_of_full_to_keep='<%= @full_backup_retention %>'
|
|
if [[ "${issixmonths}" == "true" ]]; then
|
|
number_of_full_to_keep=6
|
|
fi
|
|
max_num_inc=$((32 * number_of_full_to_keep))
|
|
max_num_full=$((2 * number_of_full_to_keep))
|
|
|
|
tabular_data=$(cat "${data_dir}/${project}/${bucket}.dat")
|
|
# We warn if there are too many old backups
|
|
num_full=$(echo "${tabular_data}" | grep -c full)
|
|
num_inc=$(echo "${tabular_data}" | grep -c inc)
|
|
if [[ ${num_inc} -gt ${max_num_inc} ]] || [[ ${num_full} -gt ${max_num_full} ]]; then
|
|
problems="${problems} Too many backups: ${project}:${bucket}"
|
|
num_problems=$((num_problems + 1))
|
|
if [[ ${exit_status} -ne 2 ]]; then
|
|
output_status="WARNING"
|
|
exit_status=1
|
|
fi
|
|
fi
|
|
|
|
latest_full=$(echo "${tabular_data}" | grep full | sort | tail -1)
|
|
latest_inc=$(echo "${tabular_data}" | grep inc | sort | tail -1)
|
|
|
|
latest_full_date=$(date -d "$(echo "${latest_full}" | awk '{print $2}' | sed 's/T/ /' | sed -e 's/\([0-9][0-9]\)\([0-9][0-9]\)Z/:\1:\2/' -e 's/\(20[0-9][0-9]\)\([0-9][0-9]\)/\1-\2-/')" +%s)
|
|
latest_inc_date=$(date -d "$(echo "${latest_inc}" | awk '{print $2}' | sed 's/T/ /' | sed -e 's/\([0-9][0-9]\)\([0-9][0-9]\)Z/:\1:\2/' -e 's/\(20[0-9][0-9]\)\([0-9][0-9]\)/\1-\2-/')" +%s)
|
|
|
|
now=$(date +%s)
|
|
thirtytwodaysinseconds=$((32 * 24 * 60 * 60))
|
|
twodaysinseconds=$((2 * 24 * 60 * 60))
|
|
|
|
seconds_since_full=$((now - latest_full_date))
|
|
seconds_since_inc=$((now - latest_inc_date))
|
|
|
|
# We say that it is critical if backups are too old
|
|
if [[ ${seconds_since_full} -gt ${thirtytwodaysinseconds} ]] || [[ ${seconds_since_inc} -gt ${twodaysinseconds} ]]; then
|
|
if [[ ${seconds_since_full} -gt ${twodaysinseconds} ]]; then
|
|
num_problems=$((num_problems + 1))
|
|
problems="${problems} Too old backups: ${project}:${bucket}"
|
|
output_status="CRITICAL"
|
|
exit_status=2
|
|
fi
|
|
fi
|
|
|
|
done
|
|
done
|
|
if [[ -z ${problems} ]]; then
|
|
problems="No problems detected"
|
|
fi
|
|
|
|
output="${output_status}: ${problems} | num_problems=${num_problems};1;1;;"
|
|
echo "${output}"
|
|
exit ${exit_status}
|