Мониторинг сайта с помощью Google Docs



    Автор блога Digital Inspirations Амид Агарвал (Amit Agarwal) опубликовал скрипт для Google Docs, который опрашивает статус сайта и заносит ответ в ячейку таблицы. Таким образом, можно сделать сервис мониторинга своими руками. Google Docs позволяет запускать скрипт с минутным интервалом и получать уведомления на email.

    Инструкция такая: скопируйте себе этот документ, укажите URL для мониторинга в ячейке E3 и свой почтовый адрес в ячейке E5, затем установите минутный триггер на выполнение скрипта в меню Tools → Script Editor → Resources → Current Script’s Triggers.



    При попытке сохранить триггер появится большое красное предупреждение с запросом на авторизацию.

    Код скрипта

    /**   Monitor your Site's Uptime  **/
    
    function isMySiteDown()
    {
    
    // Get the URL of the Website to monitor
      var url = SpreadsheetApp.getActiveSheet().getRange("E3").getValue();
    
    // HTTP Response Code of the last server request
      if (!ScriptProperties.getProperty("status")) {
        ScriptProperties.setProperty("status", 200);
      }
    
      var response, error; 
    
      try {    
    
    // Fetch the web page using UrlFetchApp
        response = UrlFetchApp.fetch(url);
    
      } catch(error)
      {
        insertData(error, -1, "Website down");
        return;
      }
    
      var code = response.getResponseCode();
    
    // code = 200 means the fetch request was successful
      if (code == 200)
        insertData("Up", code, "Website up");
      else
        insertData(response.getContent()[0], code, "Website down");
    }
    
    function insertData(error, code, msg) {  
    
    // Ignore if the error message is logged already
      if (ScriptProperties.getProperty("status") == code)
        return;
    
    // Log the server error in a Google Sheet
    
      var sheet = SpreadsheetApp.getActiveSheet();
      var email = sheet.getRange("E5").getValue();
      var row   = sheet.getLastRow() + 1;
    
      sheet.getRange(row,1).setValue(new Date());
      sheet.getRange(row,2).setValue(error);
      sheet.getRange(row,3).setValue(code);
    
    // Send an email alert for the downtime  
    
      ScriptProperties.setProperty("status", code);
      MailApp.sendEmail(email, msg, error);
    }
    Поддержать автора
    Поделиться публикацией

    Комментарии 32

      +25
      всегда считал скриптинг в Google Docs чем-то вроде «подсчета суммы в екселе», лишь для работы текущего пользователя с документом. А вон оно как может… Надо будет поизучать возможности
        0
        Прикольно, но и ежу же понятно, что это не мониторинг, а так по фану)
          0
          Помню как-то в Excel'e писал аналог Battle city, сейчас думаю Google Docs перенести)
            +1
            а я арканоид делал :) просто ради фана…
            +1
            Google Apps Script и не такое умеет
            https://developers.google.com/apps-script/articles
            +2
            В хаб «ненормальное программирование» надо бы добавить.

            И ведь требует этот мониторинг, чтобы документ был открыт?
              +1
              Да, обязательно ли держать документ открытым?
                0
                Насколько я понял — нет. Могу ошибаться.
                  +6
                  Нет конечно — открытым держать не надо. Google Apps Script — это типа серверного javascript'a. Там есть аналог крона, доступ к разным их API. Всё серьезно.
                  developers.google.com/apps-script/guide_events#TimeTriggers
                0
                Нет, если ставить trigger на таймере он автоматом запускает скрипт через заданный интервал. Пользуюсь скриптом с момента как автор выложил его в сеть, работает как и должно. Хотя в прошлую неделю trigger-ы гугла плохо работали и приходили ошибки запуска скрипта.
                +1
                Попробовал все сделать по инструкции.
                Ничего не работает.

                Наверное, надо что-то еще неочевидное сделать, до чего я, как первый раз в жизни открывший Google Docs, додуматься не могу :)
                  0
                  Попробуйте выполнить скрипт вручную.
                    0
                    Я так понял, что первые 8 строк невидно, то есть если выставили 5 минут, то 8*5=40 минут не увидите результатов. Я вручную несколько раз прогонял скрипт, в итоге сначала были undefined, а потом нормально всё пришло.
                    +1
                    А кто-нибудь пробовал у себя?
                    Как-то криво отрабатывают скрипты. Почему-то функция isMySiteDown отрабатывает только вручную после ручного же запуска insertData. Последний же добавляет в ячейки значения undefined.
                    К тому же записи начинаются с 8 строки, а не со 2й, об этом даже написано в официальном блоге:
                    www.labnol.org/internet/website-uptime-monitor/21060/
                      0
                      Да… Как-то по крону не работает.
                      Что-ли уже прикрыли такую возможность?
                        0
                        Хотя вот это все объясняет :)
                        // Ignore if the error message is logged already
                        if (ScriptProperties.getProperty("status") == code)
                          return;
                        
                      +1
                      Закроют такой cron. Или у него уже должны быть ограничения. Хотя это… мечта.
                        +2
                        Как я понял уведомления будут приходить ежеминутно или только в моменты недоступности?
                        А так скрипт интересный, оказывается этот сервис не только файло/документохранилище…
                          0
                          Насколько я понял скрипт присылает уведомление когда добавляется новая строка в документ. А новая строка добавляется, если изменился код ответа сервера.
                          +3
                          У себя на сайте я в страницу ошибки 50х внедрил Javascript для отсылки ивента в Google Analytics, но там уведомление по почте идет целые сутки.
                          Нужно прикрутить скрипт для добавления строки в публичный документ и отсылки уведомления.
                            0
                            у меня не отсылается и не добавляется ничего…
                              0
                              Небольшой правкой скрипта добавил отображение URL и ResponseCode в Email-сообщение (в insertData добавил строчку, пред отправкой Email)

                              error = error + ". ResponseCode: " + code + "\n\r" + SpreadsheetApp.getActiveSheet().getRange("E3").getValue();

                              Кстати, если на сервере добавить страницу с статусом сервисов, то можно и их попробовать мониторить подобным образом.
                                0
                                Новая эпоха ddos грядёт, средствами google.
                                  0
                                  Раз в минуту запуст. НенаДДОСишься так особо.
                                  А создашь сотни документов — быстро вычислят и забанят.
                                  0
                                  Как-то можно заставить этот скрипт средствами Google отправлять SMS при изменении статуса ответа от сайта?
                                  –3
                                  Шикарно! На днях думал — как же мне проверить, как часто недоступен мой vad.by при обещанном >99% uptime у IPHoster. Хабр всегда читает мысли, если не надевать шапочку из фольги :)
                                    0
                                    P.S. Проверка хабраэффекта обернулась немного предсказуемым результатом. Нет, не падежом сайта, а „—“. Извините.
                                    P.P.S. Только что стартовая страница Google Analytics поменяла дизайн. Давно пора. Внутренности остались прежними.
                                    0
                                    А можно как-то в одном документе сразу несколько сайтов мониторить?
                                      0
                                      Все здорово, но неизбежное случилось — пришло сообщение «Service using too much computer time for one day» и таблица со сводкой неуспешных запусков скрипта по этой причине.
                                        0
                                        1 сайт отслеживался?
                                        0
                                        у меня отработало штатно и 13 апреля в 16-45 (короткий outage) и только что проверил.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое