Web monitor com a BeagleBone Black 6

A BeagleBone Black é, sem dúvidas, uma das SBC (Single-Board Computer) mais populares existentes. Dentre suas principais características, estão o tamanho físico reduzido, SoC com recursos poderosos e conectividade à Internet (via cabo / Ethernet). Desta forma, esta SBC pode (e deve) ser utilizada em aplicações da Internet das Coisas, e este post sobre web monitor com BeagleBone Black vai ajudar nessa tarefa.

Web monitor com a Beaglebone Black

De nada adianta um projeto sobre Internet das Coisas se a conectividade à internet é ruim / intermitente demais. Considerando isso, este post irá mostrar como utilizar a BeagleBone Black para monitorar o downtime (neste caso, tempo em que não há conectividade com Internet/ “que se fica sem Internet”). Em posse destes dados, pode-se avaliar a qualidade de conexão à Internet, algo primordial para a implantação de projetos IoT.

Material necessário

Para reproduzir o projeto deste web monitor, você precisará apenas de uma BeagleBone Black e um cabo Ethernet (para conectar a placa à rede). Certifique-se que, no ponto de rede a ser utilizado pela BeagleBone Black, há acesso à Internet.

Método de medição do web monitor

Para contabilizar o downtime, primeiramente, é necessário ter em mãos um endereço de Internet confiável (leia-se: que há pouquíssimas chances de cair). Um bom exemplo para isso é o Google.

Em posse do endereço de Internet confiável, o método utilizado para detectar e contabilizar o downtime é o seguinte:

  • A cada três segundos é feito um ping ao site confiável escolhido. O comando de ping utilizado é o seguinte:
    ping -c 1 ENDERECO_DO_SITE_CONFIAVEL

Onde “-c 1” indica que é feita uma única tentativa de ping.

  • Se a resposta for bem sucedida (houver resposta ao ping), espera-se até o próximo momento para fazer o ping novamente
  • Caso não houver resposta ao ping, é inicializada a contabilização de downtime, sendo esta finalizada assim que a conectividade à Internet for reestabelecida

Projeto web monitor com Beaglebone Black

O projeto consiste em, baseado no método descrito anteriormente, contabilizar o downtime. Cada downtime contabilizado é salvo em um arquivo texto (.txt), para posterior checagem.

O arquivo .txt chama-se “RelatorioDowntime.txt”, e este contém, para cada downtime contabilizado:

  • A data e hora de início do downtime
  • Tempo total de falta de conectividade à Internet (downtime)
  • A data e hora de registro do downtime

Código-fonte

O código-fonte do projeto pode ser visto a seguir.

Para colocá-lo na BeagleBone Black, digite o comando:

nano MonitoraDowntime.py

Uma vez aberto o editor nano, digite ou cole o código-fonte do projeto

Aperte Ctrl + X, depois diga sim às perguntas do editor nano (ele perguntará se deseja salvar o arquivo e se deseja manter o mesmo nome)

Vamos ao código-fonte:

import os
import time
from datetime import datetime

#Variaveis globais
DNSParaPingar = "www.google.com" #DNS confiavel (algum que voce saiba que nao caia com facilidade)
ArqRelatorio = "RelatorioDowntime.txt"
TempoReestabelecimentoConexao = 0
TempoInicioDowntime = 0
EstavaSemConectividade = 'N'

#Funcao: escreve o cabecalho na tela
#Parametros: nenhum
#Retorno: nenhum
def EscreveCabecalhoNaTela():
	os.system("clear")
        print "------------------------------------"
        print "    Teste - Downtime de Internet    "
        print "------------------------------------nnn"

#Funcao: escreve status da conectividade na tela
#Parametros: status (0: sem Internet; 1: com Internet)
#Retorno: nenhum
def EscreveStatusConectividadeNaTela(StatusConectividade):
	if (StatusConectividade == 0):
		print "nnn-> Conectividade a Internet: ok!n"
        else:
 		print "nnn-> Conectividade a Internet: falhoun"

#Funcao: contabiliza downtime
#Parametros: status da conectividade a Internet
#Retorno: nenhum
def ContabilizaDowntime(StatusConectividade):
	global EstavaSemConectividade
        global TempoReestabelecimentoConexao
        global TempoInicioDowntime

	if (StatusConectividade == 0):
                TempoReestabelecimentoConexao = time.time()
		if (EstavaSemConectividade == 'S'):
			ValorDowntime = TempoReestabelecimentoConexao - TempoInicioDowntime
			print "-> Conexao foi reestabelecida. Downtime: "+str(ValorDowntime)+" segundos"
                        file = open(ArqRelatorio,"a")
                        file.write("Downtime: "+str(ValorDowntime)+" segundosn")
                        file.write("Data/hora de registro: "+str(datetime.now())+"n")
                        file.write("-------------n")
                        file.close()
                        EstavaSemConectividade = 'N'
        else:
                TempoInicioDowntime=time.time()
                print "-> Contabilizando downtime..."
                file = open(ArqRelatorio,"a")
                file.write("---Registro de downtime---n")
                file.write("Data/hora de inicio: "+str(datetime.now())+"n")
                file.close()
                EstavaSemConectividade = 'S'

#programa principal
ContadorVerificacoes = 0

while True:
	try:
	     ContadorVerificacoes = ContadorVerificacoes + 1
             EscreveCabecalhoNaTela()
             print "["+str(ContadorVerificacoes)+"] Verificando conectividade a Internet...n"
	
             #avalia conectividade a Internet
             RespostaPing = os.system("ping -c 1 "+DNSParaPingar)
             EscreveStatusConectividadeNaTela(RespostaPing)  

             #contabiliza downtime
             ContabilizaDowntime(RespostaPing) 

             #aguarda 3 segundos ate proxima avaliacao       
             time.sleep(3)  
        except KeyboardInterrupt:
             print "Ctrl+C pressionado. Aplicacao sendo encerrada"
             exit(1)


Colocando o projeto para rodar

Para colocar o projeto para rodar, digite o seguinte comando:

python MonitoraDowntime.py

Uma vez em execução, basta “deixar” a BeagleBone Black fazer o trabalho. Quando desejar parar o  programa, basta pressionar as teclas Ctrl+C. O relatório de downtime pode ser visto através do comando:

cat RelatorioDowntime.txt


Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

6 Comentários

  1. Valeria a pena ou seria viável fazer um projeto como esse só com um NodeMcu?

    1. Alexandre, bom dia.

      Olha, com exceção a parte do relatório em arquivo TXT, seria possível. Nunca fiz algo do gênero no NodeMCU, mas sei que é possível sem problemas.

      Atenciosamente,
      Pedro Bertoleti

  2. Bom dia, agora te pergunto uma coisa, porque utilizar a BEAGLEBONE BLACK e não um RASPBERRY PI?

    1. Bom dia Jean.

      Ótima pergunta. Considerando do ponto de vista de software somente, não há diferenças em usar um ou outro (pois considerando que as duas SBCs citadas usam distribuições Debian/baseadas no Debian e também que o projeto não exige nada de especial).
      Porém, a BBB leva algumas vantagens em relação à Raspberry Pi: tem um SoC com ADC, possui (na minha opinião) um melhor gerenciamento de energia / consumo e o mais importante: tem um roadmap bom / garantia de fabricação pela Texas por X anos. Isso significa que, você como fabricante de um produto que usa uma SBC, pode contar com a BBB sendo fabricada para usar no seu produto sem medo de ela parar de ser fabricada de uma hora pra outra. Com a Raspberry, ocorre o oposto (eles não garantem nada quanto a roadmap).

      Em suma:
      – Quer algo mais profissional? BBB
      – Quer algo menos profissional e mais barato? Raspberry Pi

      Sacou?

      1. Bah até me espantei pela velocidade da resposta hahaha, muito obrigado! verei mais de perto a BBB! valeu e parabéns pelo artigo!

Trackbacks and Pingbacks

  1. […] Aos que tiverem curiosidade sobre a medição da parte de Downtime, já temos um projeto no blog para fazer tal diagnóstico / medição. […]