Created
May 8, 2016 13:39
-
-
Save ajdavis/458442bc63b757f13cd0c1cbd689198f to your computer and use it in GitHub Desktop.
Google Sheets script to remind me to take backups of my photo archive. See https://emptysqua.re/blog/backup-reminders-google-sheets/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// in days | |
var backupFreq = 4; | |
var offsiteFreq = 14; | |
function sendError(msg) { | |
MailApp.sendEmail("jesse@emptysquare.net", "Backup reminders: error", msg); | |
} | |
function isWeekDay() { | |
var today = new Date(); | |
/* 0 is Sunday, 6 is Saturday */ | |
return today.getDay() != 0 && today.getDay() != 6; | |
} | |
function checkReminder() { | |
/* Don't remind me on weekends */ | |
if (!isWeekDay()) { | |
return; | |
} | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]); | |
var sheet = spreadsheet.getActiveSheet(); | |
/* find the names of data sets, e.g. ["photos", "system"], from the data column */ | |
var dataColumn = sheet.getRange(1, 2, sheet.getLastRow()).getValues(); | |
var data = []; | |
for (var i = 0; i < dataColumn.length; i++) { | |
var datum = dataColumn[i][0]; | |
if (datum == "data") { | |
continue; | |
} else if (datum.length === 0) { | |
break; | |
} else if (data.indexOf(datum) === -1) { | |
data.push(datum); | |
} | |
} | |
if (!data.length) { | |
sendError("couldn't find any data sets"); | |
return; | |
} | |
/* determine the most recent backup, and most recent offsite backup, | |
* of each data set */ | |
var warnings = []; | |
/* for each data set, e.g. "photos" */ | |
for (var i = 0; i < data.length; i++) { | |
var datum = data[i]; | |
var backupsRow = 1; | |
var found = false; | |
/* find the row with the data set's most recent backup dates */ | |
for (; backupsRow++; backupsRow < sheet.getLastRow()) { | |
if (sheet.getSheetValues(backupsRow, 1, 1, 1)[0][0] === datum) { | |
found = true; | |
break; | |
} | |
} | |
if (!found) { | |
sendError("couldn't find backups row for data set " + datum); | |
return; | |
} | |
var lastBackup = sheet.getSheetValues(backupsRow, 2, 1, 1)[0][0]; | |
var lastOffsite = sheet.getSheetValues(backupsRow, 3, 1, 1)[0][0]; | |
if (lastBackup === "#N/A") { | |
warnings.push("No " + datum + " backups."); | |
} else if (lastBackup > backupFreq) { | |
warnings.push("No " + datum + " backups in " + lastBackup + " days."); | |
} | |
if (lastOffsite === "#N/A") { | |
warnings.push("No " + datum + " offsite backups."); | |
} else if (lastOffsite > offsiteFreq) { | |
warnings.push("No " + datum + " offsite backups in " + lastOffsite + " days."); | |
} | |
} | |
if (warnings.length) { | |
var msg = warnings.join("\n\n") + | |
"\n\n(Intend backups every " + backupFreq + " days, " + | |
"offsite backups every " + offsiteFreq + " days.)"; | |
MailApp.sendEmail("jesse@emptysquare.net", "Backup reminders", msg); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment