Last active
January 19, 2016 04:52
-
-
Save y16ra/0e677cf42754788fd021 to your computer and use it in GitHub Desktop.
URL Monitoring using Google AppsScript
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
/** | |
* スプレッドシートに記載したURLの外形監視を実行する。 | |
* 指定されたURLに接続してステータスコードが200以外の場合メールで通知する。 | |
* また、前回の実行時に200以外のステータスコードだった場合で、 | |
* ステータスが200になった場合は復旧メールを送信する。 | |
* スプレッドシートの項目は、サービス名, 監視対象URL, ステータス, emails(10個まで) とする。 | |
*/ | |
function monitoring() { | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var current_sheet = spreadsheet.getActiveSheet(); | |
for (var i = 2; i <= current_sheet.getLastRow(); i++) { | |
var url = current_sheet.getRange(i, 2).getValue(); | |
var status_code = check_server(url); | |
if(status_code != 200) { | |
var subject = '[ERROR] URL監視アラート : ' + current_sheet.getRange(i, 1).getValue(); | |
var mail_body = 'サーバでエラーコードが検知されました。サーバの状況を確認してください。\n' | |
+ '[' + status_code + ']' + url; | |
send_mail(i, subject, mail_body); | |
current_sheet.getRange(i, 3).setValue(status_code); | |
} else { | |
var pre_status = current_sheet.getRange(i, 3).getValue(); | |
if (pre_status != 200) { | |
var subject = '[OK] URL監視アラート : ' + current_sheet.getRange(i, 1).getValue(); | |
var mail_body = '復旧しました。\n' + url + ' [' + pre_status + '] -> [200]'; | |
send_mail(i, subject, mail_body); | |
} | |
current_sheet.getRange(i, 3).setValue(status_code); | |
} | |
} | |
} | |
/** | |
* メールを送信する。 | |
* | |
* @param {int} index スプレッドシートの行 | |
* @param {string} subject メールの件名 | |
* @param {string} body メールの本文 | |
*/ | |
function send_mail(index, subject, body) { | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var current_sheet = spreadsheet.getActiveSheet(); | |
var emails = current_sheet.getSheetValues(index, 4, 1, 10); | |
var to = ''; | |
for (var j=0; j<emails[0].length; j++) { | |
if (emails[0][j] != '') { | |
to += emails[0][j] + ','; | |
} | |
} | |
MailApp.sendEmail(to, subject, body); | |
} | |
/** | |
* URLに接続してステータスコードを取得する。 | |
* @param {string} 接続先のURL | |
* @return {int} HTTPステータスコード。接続に失敗した場合は999を返す。 | |
*/ | |
function check_server(url) { | |
try { | |
var res = UrlFetchApp.fetch(url); | |
return res.getResponseCode(); | |
} catch(e) { | |
return 999; | |
} | |
} | |
function onOpen() { | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var entries = [{ | |
name : "監視を実行する", | |
functionName : "monitoring" | |
}]; | |
spreadsheet.addMenu("Monitoring", entries); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment