HiveBrain v1.2.0
Get Started
← Back to all entries
patternMinor

Checking site uptime with Google Docs

Submitted by: @import:stackexchange-codereview··
0
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:

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 // 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.