Skip to content

Instantly share code, notes, and snippets.

@ajdavis
Created May 8, 2016 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ajdavis/458442bc63b757f13cd0c1cbd689198f to your computer and use it in GitHub Desktop.
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/
// 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