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.769 ]
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"; } }
Carregando automaticamente wireless via ndiswrapper
Carregando automaticamente wireless via ndiswrapper II
Script de conectividade wireless
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Como abrir o pycharm no linux [RESOLVIDO] (4)
VMs e Interfaces de Rede desapareceram (12)