Desenvolvimento

21 mar, 2018

Como verificar a saúde da sua aplicação Node no Heroku periodicamente

Publicidade

O Heroku é uma plataforma como serviço (PaaS) simplesmente fantástica. Antes de pensar em utilizar infra estruturas mais robustas e completas como a Amazon AWS, Google Cloud ou a Microsoft Azure para as minhas aplicações (e as da Code Prestige), na maior parte das vezes consigo testá-las primeiramente no Heroku. A sua simplicidade e o fato de possuir planos gratuitos de uso a tornam uma opção muito boa para aplicações não críticas.

Mas como alegria de desenvolvedor(a) dura pouco, há uma série de restrições que envolvem o plano gratuito da ferramenta. Um dos problemas que costumam acontecer é o da nossa aplicação morrer após um problema crítico e continuar sepultada sem que recebamos qualquer tipo de notificação. Para um MVP de um produto, uma validação de mercado ou uma demonstração para um potencial cliente, isso pode ser fatal.

Para conseguir reverter esta situação e mantermos um histórico da saúde das nossas aplicações em Node.js enquanto elas estão hospedadas de forma gratuita, vou ensinar alguns truques bem simples.

Se você for utilizar o Heroku como ambiente de produção, ele oferece uma série de ferramentas bacanas por um preço acessível.

A função setInterval()

Este primeiro truque é o que acredito ser o mais trivial e provavelmente é a primeira solução que vem a mente das pessoas. A ideia é basicamente usar a função setInterval() do JavaScript para fazer uma requisição para a aplicação a cada X minutos. Algo deste gênero:

var http = require("http");
setInterval(function() {
    http.get("http://<nome_do_app>.herokuapp.com");
}, 300000); // a cada 5 minutos (300000)

Podemos aproveitar essa artimanha para utilizar algum serviço que nos avise sobre a aplicação, como um SMS, e-mail ou algo do gênero. Se não recebemos o check esperado, sabemos que algo está errado.

Pingability

O Pingability é um serviço que basicamente executa o código do exemplo anterior pra gente, ou seja, a cada X minutos, ele dá um ping na aplicação para verificar seu funcionamento. No seu plano gratuito, conseguimos realizar até 750 verificações mensais. Fazendo uma estimativa simples, podemos ter uma ideia de quantas verificações podemos fazer:

  • 1 minuto  – 45.000 verificações
  • 5 minutos –  9.000 verificações
  • 10 minutos –  4.500 verificações
  • 30 minutos  – 1.500 verificações
  • 60 minutos  – 750 verificações

Seu funcionamento é muito simples. Basicamente, o que precisamos é registrar a URL da aplicação no Heroku e o tempo de intervalo desejado. Feito isso, o serviço se encarregará de pingar a aplicação para verificar sua saúde.

O bacana é que o serviço guarda todas estas informações e te envia diariamente um e-mail com elas. No plano pago, há uma infinidade de outros indicadores, gráficos e afins que a ferramenta disponibiliza.

Uma outra alternativa dada por um dos nossos leitores é o Uptime Robot. Funciona de forma semelhante ao Pingability e oferece uma série de indicadores, alertas e integrações.

Google App Script

Esta é uma alternativa bem diferente (baseada neste artigo), mas que também funciona. A ideia aqui é utilizar um script dentro de uma planilha para realizar essa tarefa. Para isso, crie uma nova planilha, e então:

  • Vá ao menu Tools → Script Editor
  • Digite 1 na célula B1 que funcionará como um contador
  • Coloque o seguinte código:
// script ajustado de: https://medium.com/@pandachain/keep-free-heroku-app-awake-during-a-specific-period-using-google-app-script-in-2017-63fe37ee9e9f
function myFunction() {
 var d = new Date();
 var hours = d.getHours();
 var currentTime = d.toLocaleDateString();
 var counter = SpreadsheetApp.getActiveSheet().getRange('B1').getValues();
 
 if (hours >= 6 && hours <= 18) {
 var response = UrlFetchApp.fetch('<url_da_sua_aplicação_no_heroku>');
 SpreadsheetApp.getActiveSheet().getRange('A' + counter).setValue('Visitado às ' + currentTime + ' ' + hours + 'h');
 SpreadsheetApp.getActiveSheet().getRange('B1').setValue(Number(counter) + 1);
 }
}

  • Salve. Dentro do Editor de Script, vá para Edit → current project’s trigger.
  • Adicione uma nova trigger, configure o intervalo e salve.

E pronto, o Google executará o script com base nas configurações e sua atividade será registrada na planilha. Dessa forma, conseguimos salvar os status na planilha para uma fácil visualização.

Conclusão

Estas são algumas das alternativas mais famosas para monitorarmos a saúde de aplicações web hospedadas gratuitamente no Heroku. Até o momento todas elas parecem estar funcionando bem, mas lembre-se de que este artigo não é atemporal, ou seja, as políticas da empresa podem mudar e estes truques podem parar de funcionar.

É importante lembrar que no plano gratuito do Heroku, as aplicações dormem após 30 minutos de inatividade. Até a data em que este artigo foi escrito, todos as aplicações gratuitas compartilham uma cota de 550 horas por mês. Não esqueça de levar isso em consideração na hora de configurar seus alertas.

Referências