有網友看了之前寫的一篇文章 [Google Apps]--My First Google Apps Script,問我一個是否可以使用 Google Spreadsheet 來作為 server alive & failed notice 的腳本
查了一下 Google Apps Script 文件,發現有現成的API可以使用,就直接套用做成一個可以探詢 Server List 是否存活的App
https://docs.google.com/spreadsheets/d/1uPhxJGx9HyvLDOSEW8NDDWen2I543Lq3RW-p4uTEKsc/edit?usp=sharing
網友提出的想法是這樣的,他希望有兩個Sheet,一個紀錄要查詢的Server,一個紀錄Server 的 Administrator,當網站不存在時,就通知網站管理員
我大致上開了兩個工作表如下:
一個是 Server List
一個是管理員 List,兩者間為1:1關係(如多個管理員,就以逗號區分,理論上應該可以自動判斷,如果不行就要自己 split)
function loadServerList() {
var sheetApp = SpreadsheetApp.getActiveSpreadsheet();
var sheet1=sheetApp.getSheets()[0];
var sheet2=sheetApp.getSheets()[1];
var serverlist=new Array(), adminlist= new Array();
var iRow=2,i;
// 先將 Server List 讀進 Array
// iRow=2 從第二列開始讀,讀到空白行
while (!sheet1.getRange(iRow, 1).getValue()==""){
serverlist[iRow-2]=sheet1.getRange(iRow, 1).getValue();
iRow++;
}
iRow=2;
// 將 Administrator 讀進 Array
while (!sheet2.getRange(iRow, 1).getValue()==""){
adminlist[iRow-2]=sheet2.getRange(iRow, 1).getValue();
iRow++;
}
// 透過 try catch 攔截錯誤,發送 email
try{
for (i=0; i < serverlist.length; i++){
var response = UrlFetchApp.fetch(serverlist[i]);
MailApp.sendEmail(adminlist[i], 'UrlFetchApp OK:'+serverlist[i], response.getContentText());
Logger.log(response.getContentText());
}
} catch (e){
MailApp.sendEmail(adminlist[i], 'UrlFetchApp Failed:'+serverlist[i], '');
Logger.log("Url Fetch Failed!")+serverlist[i];
}
}
Google Apps Script 內建的 Service API 有一個是 URLFetch
讓你可以擷取網站的資料回傳,我們就透過這個 Service,來當作網站存活的查詢,查詢失敗就透過 exception block 傳送失敗通知
這邊為了測試這個 Service 的運作方式,所以將查詢成功的部份也寄送 email 得到的 mail 結果如下:(第二個網址是我故意寫錯,測試用)
這樣就可以執行了 (App 執行的過程,會要求認證與授權,授權過之後就不會再出現了)
...好像還少了什麼...
誰去執行?
當然是要讓系統自己做啊!
按一下 Script Editor 上面的時鐘,新增觸發程序,完工!
1 意見 :
當連線有問題時,為了要了解錯誤之原因,以方便處理問題,在以下原程式增加 "response.getContentText()" 這段程式碼,以便發送mail時,可於內容附加錯誤訊息之內容,但在執行時會產生錯訊息如下,
Reply"TypeError: 無法呼叫 undefined 的「getContentText」方法。 (第 32 行,檔案名稱:)關閉"
不知原因為何??請指教,謝謝~~
catch (e){ MailApp.sendEmail(adminlist[i], 'UrlFetchApp Failed:'+serverlist[i], response.getContentText());
張貼留言