GoogleAppsScriptでサイトが落ちていないかを確認してSlack通知するスクリプト(ベーシック認証付き)

GoogleAppsScriptでサイトが落ちていないかを確認してSlack通知するスクリプト(ベーシック認証付き):


検証環境が落ちてると、みんな困る

良かれと思って検証環境を構築し、お客さんとかに教えると

デプロイミスって落ちてるときとかに文句を言われて辛いので

先手を取れるスクリプトを作成しました。


前準備

SlackのWebhookでIncoming Webhooks からURLを発行してね。


GoogleAppsScriptに下記スクリプトを配置する。

postUrl、postUrl2はwebhooksのURLです。

  • 一度エラー通知して、次もエラーだった場合は通知しません。
  • エラーの後エラーが解消されていたら通知します。
var postUrl = 'https://hooks.slack.com/services/*****/****/43Fr******zmr'; 
var postUrl2 = 'https://hooks.slack.com/services/*****/****/3m6*****cN7r'; 
var username = '検証環境落ちてるよ君';  // 通知時に表示されるユーザー名 
var icon = ':hatching_chick:';  // 通知時に表示されるアイコン 
var url = 'https://oneframe.co.jp'; // 調べたいURL 
var error_message = url + ' が落ちてるよー確認してー';  // 投稿メッセージ 
 
function myFunction() { 
  var user = "basic-auth-user"; // ベーシック認証のユーザ 
  var pass = "basic-auth-pass"; // ベーシック認証のパスワード 
  var options = { 
    "headers" : { 
      "Authorization" : " Basic " + Utilities.base64Encode(user + ":" + pass),  
    }, 
    "muteHttpExceptions" : true, 
  }; 
  var f; 
  var code = 500; 
  try { 
    f = UrlFetchApp.fetch(url, options) 
    code = f.getResponseCode(); 
    Logger.info(url + ":responscode>>>" + response.getResponseCode());  
  } catch(e) { 
    Logger.log("message:" + e.message + "\nfileName:" + e.fileName + "\nlineNumber:" + e.lineNumber + "\nstack:" + e.stack); 
  } 
 
  // 直前のステータスを取得 
  var status = PropertiesService.getScriptProperties().getProperty('status');   
  // エラーの場合で直前のステータスがngの場合は送信しない。 
  if (code != 200) { 
    if (status != "ng") { 
      message = error_message + " ステータスコード:" + code; 
      sendMessage(message); 
      PropertiesService.getScriptProperties().setProperty("status", "ng"); 
    } 
  } else { 
    // 正常の場合で直前のステータスがngの場合は改善した旨を通知する。 
    if (status == "ng") { 
      message = "エラーは解除されました!よかったよかった。"; 
      sendMessage(message); 
    } 
    PropertiesService.getScriptProperties().setProperty("status", "ok"); 
  } 
} 
 
function sendMessage(message) { 
  var jsonData = 
      { 
        "username" : username, 
        "icon_emoji": icon, 
        "text" : message + " ステータスコード:" + code 
      }; 
  var payload = JSON.stringify(jsonData); 
 
  var options = 
      { 
        "method" : "post", 
        "contentType" : "application/json", 
        "payload" : payload 
      }; 
 
  UrlFetchApp.fetch(postUrl, options); 
  UrlFetchApp.fetch(postUrl2, options); 
 
} 


GoogleAppsScriptでトリガー設定

5分おきくらいに設定しましょう。

めでたしめでたし。


技術的なポイント

UrlFetchApp.fetch ちゃんは便利なんだけど指定したサイトが500の場合は

例外を返すメンヘラな一面を持つ。

なのでこの子はtry 〜 catch の優しさで包み込んであげましょう。

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)