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.