Sobre o projeto
Este repositório fornece um mecanismo de keep-alive para um serviço web gratuito do Render. Ele combina um workflow do GitHub Actions com um pequeno script Node.js que faz requisições HTTP GET periódicas para uma URL de destino configurada, para que o serviço não hiberne por inatividade.
Problema resolvido: o agendador gratuito do GitHub Actions pode atrasar intervalos curtos de cron, como a cada 5 minutos, quando seus servidores estão ocupados, deixando lacunas entre as execuções. Os serviços da camada gratuita do Render dormem após cerca de 15 minutos sem tráfego, então pings perdidos podem causar cold starts.
Abordagem descrita no README:
- Sessão ativa de 14 minutos: cada job do GitHub Actions é executado por cerca de 14 minutos e envia um ping a cada 4 minutos (aos 0, 4, 8 e 12 minutos).
- Múltiplos gatilhos cron: agendamentos como */10 * * * * e 5,15,25,35,45,55 * * * * são usados para que novas sessões de runner continuem sendo iniciadas.
- O objetivo declarado é cobertura contínua, já que pings a cada 4 minutos dentro de uma janela ativa de 14 minutos permanecem abaixo do limite de inatividade de 15 minutos.
Recursos:
- APIs nativas do Node.js 22: usa fetch() embutido e node:timers/promises, sem dependências npm externas.
- Lógica de retry: tenta novamente até 3 vezes com atraso de 10 segundos em erros de rede ou respostas que não sejam 2xx.
- Saída no console: registra carimbos de data/hora ISO UTC, códigos de status HTTP, tempos de resposta em milissegundos, resultados de sucesso/falha e contagens de ciclos da sessão.
- Acionamento manual: oferece suporte a workflow_dispatch para execuções imediatas.
Configuração: a URL de destino é definida no início de ping.js como TARGET_URL, atualmente apontando para um endpoint hospedado no Render. Alterar o endpoint exige editar essa constante e enviar a alteração.
Implantação: o README instrui os usuários a fazer commit e push dos arquivos atualizados para a branch main, após o que o GitHub Actions inicia a sessão ativa de ping.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.