Web monitor com a BeagleBone Black

Web monitor com a BeagleBone Black

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 "------------------------------------\n\n\n"

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

#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)+" segundos\n")
                        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? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

1
Web monitor com a BeagleBone Black
3 votos, 5.00 classificação média (100% pontuação)

Engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP), trabalha com desenvolvimento de firmware. Colaborador do site FILIPEFLOP.

Compartilhe este Post

5 Comentários

  1. Alexandre - 17 de janeiro de 2017

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

  2. JEAN FONSECA RODRIGUES - 17 de janeiro de 2017

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

    • Pedro Bertoleti - 17 de janeiro de 2017

      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?

Deixe uma resposta