patternMinor
Checking site uptime with Google Docs
Viewed 0 times
googlewithcheckingsitedocsuptime
Problem
I modified Amit Agarwal's script which checks the uptime of one website so that it now checks several sites. The script runs every 5 minutes, however, I kept receiving mails that a site was down and then 5 mins later that it was up again.
I adapted my code to only log a change if it persisted for two checks, like this:
Are there better ways of solving this?
I adapted my code to only log a change if it persisted for two checks, like this:
function siteUptimeCheck(url, row) {
var response, error;
var status = "status"+row.toString(); // status1, status2..
if (!ScriptProperties.getProperty(status))
ScriptProperties.setProperty(status, 200);
try { // try, catch, else
var success = true;
response = UrlFetchApp.fetch(url);
} catch(error) {
success = false;
insertData(status, url, row, error, response.getResponseCode(), "Site down: ");
return;
} if(success) {
insertData(status, url, row, "Up", response.getResponseCode(), "Site up: ");
}
}
function insertData(status, url, row, error, code, msg) {
if (ScriptProperties.getProperty(status) == code) {
return; // Return if there are no changes
} else if (ScriptProperties.getProperty(status) == 1) {
sheet.getRange(row,2).setValue(code);
if (code != 200) {
//create newdate log entry
sheet.getRange(row,3).setValue(newdate +" "+ error);
}
ScriptProperties.setProperty(status, code);
MailApp.sendEmail(email, msg, error);
} else {
ScriptProperties.setProperty(status, 1); // Marker for "something changed"
}
}Are there better ways of solving this?
Solution
There is no
Instead I would do:
// try, catch, else in javascript. Instead I would do:
var success = false, state = null;
try {
response = UrlFetchApp.fetch(url);
success = true;
error = "Up";
state = "Site up: ";
} catch(ex) {
success = false;
error = ex;
state = "Site down: ";
}
insertData(status, url, row, error, response.getResponseCode(), state);Code Snippets
var success = false, state = null;
try {
response = UrlFetchApp.fetch(url);
success = true;
error = "Up";
state = "Site up: ";
} catch(ex) {
success = false;
error = ex;
state = "Site down: ";
}
insertData(status, url, row, error, response.getResponseCode(), state);Context
StackExchange Code Review Q#19061, answer score: 3
Revisions (0)
No revisions yet.