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.839 ]
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 II
Nenhum coment�rio foi encontrado.
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Organizando seus PDF com o Zotero
Erro no realm join [Resolvido]
Um programa para baixar vídeos: Parabolic
Como Definir o Painel Principal em Múltiplos Monitores no Linux Mint
Sempre que vou baixar algum pacote acontece o erro dpkg (7)
como instalo panfrost-dri e o driver panfrost fork , ou panfrost (12)