Skip to content

Instantly share code, notes, and snippets.

@jpedro
Last active March 15, 2019 16:45
Show Gist options
  • Save jpedro/ad9aeb76a991360bcfe6c2f05b6f0777 to your computer and use it in GitHub Desktop.
Save jpedro/ad9aeb76a991360bcfe6c2f05b6f0777 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -eu
projects=$(gcloud projects list --format='value(projectId)')
projectsCount=0
instancesCount=0
backupsCount=0
projectWithNoInstancesCount=0
instancesWithNobackupsCount=0
backupsFailedCount=0
backupsFailedCount=0
backupsSuccessCount=0
now="$(date +%s)"
for project in $projects
do
projectsCount=$(( projectsCount + 1 ))
echo "$projectsCount PROJECT $project"
instances=$(gcloud sql instances list --project $project --format='value(name)')
if [ "$instances" != "" ]
then
instanceNumber=0
for instance in $instances
do
instanceNumber=$(( instanceNumber + 1 ))
instancesCount=$(( instancesCount + 1 ))
echo " $projectsCount-$instanceNumber INSTANCE $instance"
backups=$(gcloud sql backups list --project $project --instance $instance --format='value(id)')
if [ "$backups" != "" ]
then
backupNumber=0
minHoursAgo=1000
hoursAgo=-1
for backup in $backups
do
backupNumber=$(( backupNumber + 1 ))
backupsCount=$(( backupsCount + 1 ))
details=$(gcloud sql backups describe $backup --project $project --instance $instance --format json)
status="$(echo $details | jq -r .status)"
endTime="$(echo $details | jq -r .endTime)"
timeStamp="$(date -j -f '%Y-%m-%dT%H:%M:%S' ${endTime:0:19} '+%s')"
hoursAgo="$(( ($now - $timeStamp) / 3600 ))"
if [ "$status" != "SUCCESSFUL" ]
then
backupsFailedCount=$(( backupsFailedCount + 1 ))
echo -e " $projectsCount-$instanceNumber-$backupNumber BackupId $backup \033[31;1m$status\033[0m"
echo -e " ==> FAILURE $project:$instance:$backup <=="
exit 1
continue
fi
if [ $hoursAgo -lt $minHoursAgo ]
then
minHoursAgo=$hoursAgo
fi
echo -e " $projectsCount-$instanceNumber-$backupNumber BackupId $backup \033[32;1m$status\033[0m ($hoursAgo hr ago)"
backupsSuccessCount=$(( backupsSuccessCount + 1 ))
done
if [ $minHoursAgo -gt 48 ]
then
echo -e " \033[31;1mINSTANCE $instance has not backuped for at least $minHoursAgo\033[0m"
exit 2
else
echo -e " \033[32;1m✔\033[0m Last backup: $minHoursAgo hrs"
fi
else
echo " ==> INSTANCE $instance has not backups"
instancesWithNobackupsCount=$(( instancesWithNobackupsCount + 1 ))
fi
echo
done
else
echo " ==> PROJECT $project has not SQL instances"
projectWithNoInstancesCount=$(( projectWithNoInstancesCount + 1 ))
fi
echo
done
echo "Projects : $projectsCount"
echo "Instances : $instancesCount"
echo "Backups : $backupsCount"
echo " Success : $backupsSuccessCount"
echo " Failed : $backupsFailedCount"
echo
echo "projectWithNoInstancesCount: $projectWithNoInstancesCount"
echo "instancesWithNobackupsCount: $instancesWithNobackupsCount"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment