var properties = PropertiesService.getScriptProperties(); var service = "MyService" var url = "http://example.com"; var email = "you@gmail.com"; function parseDate(date_string) { return new Date(Date.parse(date_string)).toISOString(); } function startFailure() { var failures = parseInt(properties.getProperty('failures')); properties.setProperty('failures', failures + 1); var failure_start = new Date(); if (failures == 1) { properties.setProperty('failure_start', failure_start.toISOString()); } var message = "Failed to reach endpoint (attempt " + (failures + 1) + ")"; console.log(message); if ( failures < 3 ) { if (failures == 2) { message = message + " Alert will be silenced until recovery."; } MailApp.sendEmail(email, service + " is UNHEALTHY", message); } } function endFailure() { var failures = parseInt(properties.getProperty('failures')); if (failures > 0) { var failure_end = new Date(); var failure_start = properties.getProperty('failure_start'); var message = "Downtime lasted from " + parseDate(failure_start) + " to " + failure_end.toISOString(); MailApp.sendEmail(email, service + " returned to HEALTHY", message); } properties.setProperty('failures', 0); properties.deleteProperty('failure_start'); } function checkService() { try { var response = UrlFetchApp.fetch(url, { muteHttpExceptions: true, validateHttpsCertificates: false, followRedirects: true }); endFailure(); } catch (e) { startFailure(); } }