SiteCheckSMS - Monitore seu website e receba alertas por SMS
Publicado por Fábio Berbert de Paula (última atualização em 19/03/2010)
[ Hits: 6.799 ]
Homepage: https://fabio.automatizando.dev
Script usado para testar a disponibilidade e velocidade de um site:
- se o site estiver fora do ar, enviar um SMS para o administrador
- se o site estiver lento (variável $tempoAceitavel), enviar um SMS para o administrador
Utiliza o serviço do site www.fastsms.com.br para o envio de SMS.
Configure a seção 2, de definição de variáveis.
Melhorias no código são bem vindas!
#!/usr/bin/perl # ------------- # Script usado para testar a disponibilidade e velocidade de um site # # - se o site estiver fora do ar, enviar um SMS para o administrador # - se o site estiver lento (variável $tempoAceitavel), enviar um # SMS para o administrador # # Programado por Fábio Berbert de Paula <fberbert@gmail.com> # http://www.vivaolinux.com.br/~fabio # # Novas versões deste script serão publicadas em: # http://www.vivaolinux.com.br/script/siteCheckSMS/ # # Sumário: # # 1. Carregamento dos módulos Perl # 2. Definição das variáveis # 3. Verificar se o script está rodando / gravar pid deste processo # 4. Verificar conexão com a internet # 5. Verificar se o aviso já foi enviado nos últimos 10 minutos # 6. Acessar o site coletando tempo de resposta e/ou disponibilidade # 7. Enviar o SMS para o administrador em caso de lentidão ou erro # # Sub-rotinas: # # checarPid() - verifica se o script está em execução, caso negativo, # grava o PID do processo atual no arquivo de PID # # gravarStatus() - grava a data e o status (erro ou sucesso) da # última verificação do site. # # verificarInternet() - verifica a conexão com a internet do host # que está executando o script. Se a internet estiver down, o script # sempre acusará erro de acesso ao site, então não faz sentido # executar o script sem acesso à internet. # # debugar() - imprime mensagens detalhadas na tela caso o $debug = 1 # tenha sido definido. # ------------------------------------------------------ # 1. Carregamento dos módulos Perl use strict; use Net::Ping; use Time::HiRes; use LWP::UserAgent; use IO::Socket::INET; # 2. Definição das variáveis #variáveis configuráveis my $site = "http://www.vivaolinux.com.br/"; # site testado my $nomeSite = "VOL"; my $tempoAceitavel = 10; #em segundos #caminhos de arquivo my $status = "/tmp/siteCheckSMS.status"; #arquivo de status my $pidfile = "/tmp/siteCheckSMS.pid"; #arquivo de pid my $debuglogfile = "/tmp/siteCheckSMS.debug"; #variáveis para o serviço FastSMS my $fastURL = "http://www.fastsms.com.br/sms.cfm"; my $fastID = "FBI210xxx"; my $fastPass = "xxxxxx"; my $fastCelular = "xxxxxx"; #variáveis de debug my $debuglog = 1; # 0 = sem debug | 1 = com debug my $debug = 1; # 0 = sem debug | 1 = com debug #variáveis usadas pelo script my ($antes, $depois, $diff, $mensagem, $ultimoAviso, $avisado, $agora, $pid); my ($ua, $request, $response, $code); # 3. Verificar se o script está rodando / gravar pid deste processo debugar("1. Verificando se o script está rodando:"); my $isrunning = checarPid(); if ($isrunning) { exit; } # 4. Verificar conexão com a internet debugar(); debugar("2. Verificando conexão com internet:"); my $conex = verificarInternet(); if ($conex==0) { #se internet fora do ar, abordar execução do script debugar("\tSem conexão com internet, abortando..."); exit; } debugar("\tInternet OK!"); debugar(); # 5. Verificar se o aviso já foi enviado nos últimos 10 minutos debugar("3. Lendo arquivo de status:"); open(READ, $status); while (<READ>) { chomp; ($ultimoAviso, $avisado) = split(":", $_); if ($avisado) { debugar("\tÚltima verificação apresentou lentidão ou erro."); } else { debugar("\tÚltima verificação não apresentou lentidão ou erro."); } #se o último aviso via SMS for mais antigo que 10 minutos, #então vamos zerar o log $agora = time; if ( ($agora - $ultimoAviso > 600) && $avisado==1 ) { gravarStatus(0); debugar("\nÚltimo SMS enviado tem mais de 10 minutos, enviar novo SMS."); $avisado = 0; } } close(READ); if ($avisado) { debugar("\tÚltimo SMS foi enviado em menos de 30 minutos, abortando script..."); exit; } debugar(); # 6. Acessar o site coletando tempo de resposta e/ou disponibilidade debugar("4. Iniciando teste de acesso ao site:"); # criando agente LWP para acessar o site $ua = new LWP::UserAgent; testarSite(); debugar(); #fazendo encoding da mensagem para enviar via GET: $mensagem =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; # 7. Enviar o SMS para o administrador em caso de lentidão ou erro if ($diff>$tempoAceitavel || $code!=200) { #enviar o SMS debugar("5. Lentidão ou erro detectado. Enviando SMS de alerta para $fastCelular"); debugar(); $request = new HTTP::Request GET => "$fastURL?id=$fastID&senha=$fastPass¶=$fastCelular&texto=$mensagem"; $response = $ua->request($request); gravarStatus(1); } else { gravarStatus(0); } sub gravarStatus { my $erro = shift; open(WRITE, ">$status"); print WRITE time . ":$erro"; close(WRITE); } sub verificarInternet { my $cont = 0; my $p = Net::Ping->new("tcp"); $p->hires(); #executo ping em 3 hosts diferentes, se 2 estiverem up, #significa que a internet está ok my ($ret, $duration, $ip) = $p->ping('kratos'); $cont+= $ret; ($ret, $duration, $ip) = $p->ping('www.vivaolinux.com.br'); $cont+= $ret; ($ret, $duration, $ip) = $p->ping('www.br-linux.org'); $cont+= $ret; if ($cont>=2) { return 1; } else { return 0; } } sub debugar { my $log = shift; my $localtime = localtime; print STDERR $log."\n" if ($debug); if ($debuglog) { open(WRITELOG, ">>$debuglogfile"); print WRITELOG "($localtime) $log\n"; close(WRITELOG); } } sub checarPid { $pid = $$; open(READ, $pidfile); my $pidinfile = <READ>; chomp($pidinfile); close(READ); my $exists = 0; $exists = kill 0, $pidinfile if ($pidinfile); if ($exists) { debugar("\tJá existe um checkSiteSMS rodando no pid $pidinfile\n"); return 1; } debugar("\tGravando o pid deste processo em $pidfile"); open(WRITE, ">$pidfile"); print WRITE $pid; close(WRITE); return 0; } sub testarSite { # em caso de lentidão vou executar o teste de tempo por 3 vezes para # me certificar que a demora não ocorreu por gargalo do link de #internet desta estação for (my $x=1; $x<=3; $x++) { $antes = time; $request = new HTTP::Request GET => $site; $response = $ua->request($request); $code = $response->code(); $depois = time; if ($code==200) { $diff = $depois - $antes; debugar("\tTeste $x levou $diff segundos...") if ($diff>$tempoAceitavel); } else { $diff = 0; } $x = 4 if ($diff<$tempoAceitavel); } debugar("\tHTTP-Status do site: $code"); if ($code==200) { $mensagem = "$nomeSite levou $diff segundos para abrir"; debugar("\tTempo de acesso ao site: $diff segundos"); } else { $mensagem = "$nomeSite esta fora do ar"; } }
Importação de IPs do Whatsapp como Objeto do Zentyal
Slowloris.pl (não foi feito por mim é apenas um compartilhamento.)
Nenhum comentário foi encontrado.
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)