Recentemente vi um post do Felippe Nardi mostrando como ele automatizou os e-mails de entrega de um cliente se integrando aos Correios, fiquei bem animado para tentar construir outras coisas úteis usando Google Spreadsheets e Javascript.
Construí uma planilha bem simples na qual colocamos uma lista de sites a serem monitorados e um e-mail de notificação para cada um deles, para que seja enviado um e-mail em caso de indisponibilidade. Ela está disponível publicamente aqui. Salve uma cópia para começar os seus testes 🙂
Para ver as funções existentes na planilha e criar novas, clique em Ferramentas -> Editor de Scripts.
Definiremos 2 funções para fazer o monitoramento: uma que faz uma requisição HTTP na URL que configuramos e checa se veio um status HTTP de sucesso na resposta, e a outra simplesmente processa as células da tabela para obter os dados necessários. Todo o código pode ser visto a seguir.
var sheet = SpreadsheetApp.getActiveSheet(), startRow = 2, // skips header line lastRow = sheet.getLastRow() -1, // get last line with data dataRange = sheet.getRange(startRow, 1, lastRow, 3), // first value is the row, second is the column in number data = dataRange.getValues(); // get data of every cell within the range function checkAllSites() { for (var i = 0; i < data.length; i++) { var row = data[i], siteUrl = row[0], notificationEmail = row[1], currentRow = (startRow+i), wasItAvailable = sheet.getRange(currentRow, 3), //getRange is 1-based instead of 0-based lastCheckDate = sheet.getRange(currentRow, 4), timestamp = Utilities.formatDate(new Date(), "America/Sao_Paulo", "dd/MM/yyyy HH:mm:ss"); if(!pingSite(siteUrl)) { // Let's try to open the site and check if we get a success response var subject = "Your site is unavailable :(", message = "We tried to check your site " + siteUrl + " at " + timestamp + " but it was unavailable!"; MailApp.sendEmail(notificationEmail, subject, message); wasItAvailable.setValue('no'); } else { wasItAvailable.setValue('yes'); } lastCheckDate.setValue(timestamp); } }; function pingSite(url) { var status; try{ status = UrlFetchApp.fetch(url).getResponseCode(); if(status>=200 && status<=206){ return true; } else{ return false; } } catch(error){ // the typical error that might occur here is DNS related. No matter what happens instead of HTTP 2xx code, we'll consider an error return false; } };
Um pequeno resumo sobre o que criamos:
Com isso já conseguimos que a função checkAllSites execute os testes sobre todos os sites que configurarmos. A cereja do bolo vai ser a execução automática desta função pelo Google, na frequência que desejarmos. Para isso, dentro do Editor de Script, clique em Recursos ->Acionadores do Projeto atual (ou Resources -> Current project’s triggers) e crie o agendamento conforme abaixo.
Pronto! Temos agora uma ferramenta de monitoramento bem confiável e simples, sem nenhum custo adicional e nenhuma preocupação com a infraestrutura. Agora você nunca mais vai precisar do Pingdom ou ferramenta parecida 🙂
Uma coisa legal dos scripts do Google é que ganhamos acesso a diversas APIs interessantes, e todo o trabalho é feito com Javascript, de uma forma bem simples de estender e customizar. Já tenho algumas idéias de novos scripts, como:
Esta lista é uma pequena amostra de possibilidades que temos com Google Docs + Javascript usando as APIs do Google. 🙂
Gostou do conteúdo? Tem alguma dúvida? Entre em contato com nossos Especialistas Mandic Cloud, ficamos felizes em ajudá-lo.