{"id":355,"date":"2017-01-29T23:19:19","date_gmt":"2017-01-30T01:19:19","guid":{"rendered":"http:\/\/pedrobertoleti.com.br\/?p=355"},"modified":"2018-02-16T08:59:38","modified_gmt":"2018-02-16T10:59:38","slug":"monitorador-de-downtime-no-linux","status":"publish","type":"post","link":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/","title":{"rendered":"Monitor de DownTime no Linux"},"content":{"rendered":"<p style=\"text-align: justify;\">Mais do que nunca, somos dependentes da Internet. Dependemos dela para ler not\u00edcias, nos correspondermos, pagar contas, fazer compras e por a\u00ed vai. Isso sem falar na onda do IoT (Internet of Things &#8211; Internet das Coisas em tradu\u00e7\u00e3o livre), a qual baseia sua exist\u00eancia na conectividade \u00e0 rede. Entretanto, nem sempre temos \u00e0 disposi\u00e7\u00e3o uma conex\u00e3o boa \u00e0 Internet, comprometendo assim muitas de nossas atividades e inviabilizando o uso equipamentos do contexto de IoT.<\/p>\n<p style=\"text-align: justify;\">Pois bem, como saber qual a qualidade e\/ou estabilidade de sua Internet? \u00c9 exatamente disso que este artigo se trata: como monitorar DownTime.<br \/>\nAl\u00e9m disso, o projeto tamb\u00e9m permite disponibilizar, \u00e0 n\u00edvel global (atrav\u00e9s da rede social <a href=\"http:\/\/www.twitter.com\">Twitter<\/a>\u00a0e da plataforma cloud <a href=\"https:\/\/www.google.com.br\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwiGva7DhNnRAhXGhlQKHTLTBQMQFggaMAA&amp;url=https%3A%2F%2Fthingspeak.com%2F&amp;usg=AFQjCNGv6eNcqr13B69C_yllPWXWp7dFmA&amp;sig2=NPBENXFXwoZfgVwRyeHp-A&amp;bvm=bv.144686652,d.eWE\">ThingSpeak<\/a>), as informa\u00e7\u00f5es obtidas. Desta forma, al\u00e9m de saber a quantas anda sua qualidade de conectividade, voc\u00ea contribuir\u00e1 para todos terem\u00a0ideia das operadoras de Internet que oferecem menos qualidade de conectividade \u00e0 Internet.<\/p>\n<p style=\"text-align: justify;\">Este projeto pode ser usado em Linux (inclusive em dispositivos embarcados), o que aumenta consideravelmente suas possibilidades de uso.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>&nbsp;<\/p>\n<p>Para reproduzir o projeto aqui proposto, h\u00e1 os seguintes pr\u00e9-requisitos:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Conhecimento b\u00e1sico de Linux<\/li>\n<li style=\"text-align: justify;\">Conhecimento b\u00e1sico de Python<\/li>\n<li style=\"text-align: justify;\">Conhecimento b\u00e1sico sobre redes de computadores<\/li>\n<li style=\"text-align: justify;\">Ter ao menos ouvido falar de ThingSpeak e Twitter (se n\u00e3o conhe\u00e7e algum destes, agora \u00e9 uma \u00f3tima hora para conhecer!)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Motiva\u00e7\u00e3o do projeto<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">A disponibilidade de Internet por parte das operadoras \u00e9 garantida pelo artigo 46, resolu\u00e7\u00e3o n\u00ba614\/2013 da ANATEL (mais detalhes <a href=\"http:\/\/www.anatel.gov.br\/consumidor\/banda-larga\/direitos\/interrupcao-do-servico\">aqui<\/a>). Exceto em caso de interrup\u00e7\u00e3o programada com aviso pr\u00e9vio (de, no m\u00ednimo, uma semana), todo o per\u00edodo de indisponibilidade de Internet maior que 30 minutos deve ser descontado da fatura mensal.<\/p>\n<p style=\"text-align: justify;\">E isso faz todo o sentido, afinal estamos pagando por um servi\u00e7o, logo nada mais justo esperar que este seja entregue corretamente.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"size-medium wp-image-395 aligncenter\" src=\"http:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet-300x300.png 300w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet-150x150.png 150w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet-256x256.png 256w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet-192x192.png 192w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/QUalidadeServicoInternet.png 650w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: justify;\">Portanto, a motiva\u00e7\u00e3o deste projeto \u00e9, al\u00e9m de monitorar as piores operadoras de Internet do Brasil, ter meios de fazer valer nossos direitos como consumidores!<\/p>\n<h2>Estrat\u00e9gia do projeto<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">A estrat\u00e9gia do projeto \u00e9 simples: pingar um local confi\u00e1vel (na rede externa \/ Internet) e avaliar a resposta obtida. Ou seja:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Houve resposta ao ping: a conectividade \u00e0 Internet est\u00e1 ok!<\/li>\n<li style=\"text-align: justify;\">Sem resposta ao ping: pois \u00e9, a Internet se foi.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">O segredo da coisa est\u00e1 no tempo entre os pings: para evitar ser bloqueado no servidor onde voc\u00ea est\u00e1 pingando por envio excessivos de pings \/pacotes ICMP (acredite ou n\u00e3o, isso se o tempo for muito curto, isso \u00e9 considerado um ataque DDoS, por mais pr\u00e9-hist\u00f3rica que esta ideia seja). Portanto, como limite seguro, este projeto considera seguro um intervalo entre pings de <strong>20 segundos<\/strong>. Por consequencia, o menor DownTime comtabiliz\u00e1vel ser\u00e1 20 segundos.<\/p>\n<p style=\"text-align: justify;\">Como alvo dos pings, deve ser escolhido o local mais confi\u00e1vel poss\u00edvel. No caso do projeto, escolhi o famoso Google, mais precisamente, o servidor DNS dele (IP 8.8.8.8). Motivo: eles devem receber tantas requisi\u00e7\u00f5es \/ segundo l\u00e1 que dificilmente ir\u00e3o bloquear algo nesta linha, levando o risco de bloqueio por n\u00famero excessivos de pacotes ICMP a praticamente zero.<\/p>\n<p style=\"text-align: justify;\">A partir do momento que pode-se comprovar o funcionamento ou n\u00e3o da Internet, \u00e9 poss\u00edvel contabilizar o Downtime e fazer o que desejar com esta informa\u00e7\u00e3o (neste caso, ser\u00e1 enviada ao Twitter e ThingSpeak o Downtime, &#8220;dedurando&#8221; a operadora de Internet).<\/p>\n<p style=\"text-align: justify;\">Vale ressaltar que o Tweet ser\u00e1, na verdade, gerado pelo pr\u00f3prio ThingSpeak (atrav\u00e9s do acesso de sua API HTTPS). Dessa forma, com uma simples requisi\u00e7\u00e3o HTTPS e sem necessidade de biblioteca ou recursos mais espec\u00edficos, pode-se gerar os Tweets do projeto. Al\u00e9m disso, todos os DownTimes contabilizados ir\u00e3o ser salvos no seu canal ThingSpeak, o que permite acompanhar o hist\u00f3rico de DownTimes de determinada situa\u00e7\u00e3o.<\/p>\n<h2 style=\"text-align: justify;\">Preparando o terreno<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Antes da implementa\u00e7\u00e3o do projeto em si, \u00e9 necess\u00e1rio serem feitas algumas coisas antes:<\/p>\n<h3 style=\"text-align: justify;\">&#8211; Conta no Twitter<\/h3>\n<p style=\"text-align: justify;\">A primeira coisa a ser feita \u00e9 criar uma conta no Twitter dedicada ao projeto. N\u00e3o h\u00e1 segredo nenhum aqui: basta visitar o <a href=\"http:\/\/www.twitter.com\">site do Twitter<\/a> e fazer uma conta comum.<\/p>\n<h3>&#8211; Conta no ThingSpeak e cria\u00e7\u00e3o de um canal<\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Ser\u00e1 preciso uma conta no ThingSpeak e, posteriormente, a cria\u00e7\u00e3o de um canal. Para isso, recomendo a visualiza\u00e7\u00e3o do v\u00eddeo abaixo. O v\u00eddeo \u00e9 do <a href=\"http:\/\/pedrominatel.com.br\/pt\/\">Pedro Minatel<\/a>, um grande nome do IoT no Brasil.<\/p>\n<figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe  id=\"_ytid_72683\"  width=\"1290\" height=\"968\"  data-origwidth=\"1290\" data-origheight=\"968\" src=\"https:\/\/www.youtube.com\/embed\/L5Ba6fubAuE?enablejsapi=1&autoplay=0&cc_load_policy=0&cc_lang_pref=&iv_load_policy=1&loop=0&rel=1&fs=1&playsinline=0&autohide=2&theme=dark&color=red&controls=1&disablekb=0&\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure>\n<p style=\"text-align: justify;\"><strong>Importante:<\/strong> ao criar o canal, anote \/ salve a Write Key API dele. Isto ser\u00e1 fundamental para envios de informa\u00e7\u00f5es ao canal (algo que ser\u00e1 detalhado mais a frente neste artigo).<\/p>\n<h3>&#8211; Interligando Twitter ao ThingSpeak<\/h3>\n<p style=\"text-align: justify;\">Conforme foi falado na estrat\u00e9gia do projeto, o ThingSpeak \u00e9 quem, na realidade, ir\u00e1 gerar o Tweet. Portanto, ser\u00e1 necess\u00e1rio fazer a integra\u00e7\u00e3o de sua conta ThingSpeak com a conta do Twitter do projeto. Para isso, siga o procedimento abaixo:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Fa\u00e7a login no Twitter e permane\u00e7a logado em uma das abas do navegador<\/li>\n<li style=\"text-align: justify;\">Abra uma nova aba e fa\u00e7a login no ThingSpeak. Uma vez logado, clique em <strong>Apps<\/strong> e depois em <strong>ThingTweet<\/strong>. Observe a figura abaixo:\n<p><figure id=\"attachment_361\" aria-describedby=\"caption-attachment-361\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"size-medium wp-image-361\" src=\"http:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak-300x122.jpeg\" alt=\"Figura 1 - Apps do ThingSpeak (destaque ao ThingTweet)\" width=\"300\" height=\"122\" srcset=\"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak-300x122.jpeg 300w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak-768x314.jpeg 768w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak-1024x418.jpeg 1024w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak-192x78.jpeg 192w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/AppsThingSpeak.jpeg 1041w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-361\" class=\"wp-caption-text\">Figura 1 &#8211; Apps do ThingSpeak (destaque ao ThingTweet)<\/figcaption><\/figure><\/li>\n<li style=\"text-align: justify;\">Na tela que abrir, no lado direito da mesma, observar a sess\u00e3o Example API Endpoint. L\u00e1 conter\u00e1 uma informa\u00e7\u00e3o similar a da figura 2.<\/li>\n<\/ul>\n<figure id=\"attachment_362\" aria-describedby=\"caption-attachment-362\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"size-medium wp-image-362\" src=\"http:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/RequisicaoHTTPThingTweet-300x77.jpeg\" alt=\"Figura 2 - dados para requisi\u00e7\u00e3o HTTPS (Tweetar com o ThingSpeak)\" width=\"300\" height=\"77\" srcset=\"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/RequisicaoHTTPThingTweet-300x77.jpeg 300w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/RequisicaoHTTPThingTweet-192x50.jpeg 192w, https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/RequisicaoHTTPThingTweet.jpeg 573w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-362\" class=\"wp-caption-text\">Figura 2 &#8211; dados para requisi\u00e7\u00e3o HTTPS (Tweetar com o ThingSpeak)<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Anote \/ guarde estas informa\u00e7\u00f5es, principalmente a API_KEY. Isto ser\u00e1 utilizado mais adiante neste projeto.<\/p>\n<ul>\n<li style=\"text-align: justify;\">Clique em ThingTweet. Na p\u00e1gina que abrir, clique no bot\u00e3o <strong>Link Twitter Account. <\/strong>Siga as instru\u00e7\u00f5es da tela e a integra\u00e7\u00e3o est\u00e1 feita!<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Talk is cheap. Show me the code!<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">\u00c9 chegada a hora do c\u00f3digo! O c\u00f3digo deste projeto foi feito em linguagem Python. Este projeto pode rodar basicamente em qualquer dispositivo que utilize Linux, seja ele embarcado ou n\u00e3o.<\/p>\n<pre class=\"lang:python decode:true \">import httplib\r\nimport urllib\r\nimport os\r\nimport time\r\n\r\n#variaveis globais\r\nContaTwetterDoSeuProvedorDeInternet = \"@NEToficial\"\r\nNomeDaSuaCidade = \"Sao Bernardo do Campo - SP\"\r\nAPIKeyThingSpeak = 'KKKKKKKKKKKKKKKK'   #substitua KKKKKKKKKKKKKKKK pela sua api_key\r\nWriteAPIKey = 'WWWWWWWWWWWWWWWW'   #substitua WWWWWWWWWWWWWWWW pela sua write api key do seu canal\r\n\r\n#Downtime monitor variables\r\nTimestampInicial_DownTime = 0\r\nEstaOffline = 0\r\nDownTimeTotal = 0\r\nArquivoRelatorioDowntime = \"DownTimeReport.txt\"\r\nNumeroDowntimesDetectados = 0\r\nNumeroTentativas = 1\r\n\r\ndef VerificaERegistraDowntime(res):\r\n\tglobal EstaOffline\r\n\tglobal TimestampInicial_DownTime\r\n\tglobal DownTimeTotal\r\n\tglobal ArquivoRelatorioDowntime\r\n\tglobal NumeroDowntimesDetectados\r\n\tglobal NumeroTentativas\r\n\r\n\tif (res == 0):\r\n\t\tprint \" \"\r\n\t\tprint \"Internet esta on!\"\r\n\telse:\r\n\t\tprint \" \"\r\n\t\tprint \"Internet esta off...\"\r\n\r\n        #Verifica se internet estava on e agora esta off\r\n\tif ((res!=0) and (EstaOffline == 0)):\r\n\t\tTimestampInicial_DownTime = time.time()\r\n\t\tEstaOffline = 1\r\n\t        return\r\n\r\n        #Verifica se internet estava off e agora esta on\r\n\tif ((res == 0) and (EstaOffline == 1)):\r\n\t\tDownTimeTotal = time.time() - TimestampInicial_DownTime\r\n\t\t\r\n\t\tif (DownTimeTotal &gt; (1800)):  #se maior que 30min, deve ser descontada da fatura\r\n\t\t\tStringDT =  \"DownTime detectado (&gt;30min): \"+str(DownTimeTotal)+\" segundos offline\\n\"\r\n\t\telse:\t\r\n\t\t\tStringDT =  \"DownTime detectado (&lt;30min): \"+str(DownTimeTotal)+\" segundos offline\\n\"\r\n\t        print StringDT\r\n\t\tTxtFile = open(ArquivoRelatorioDowntime,\"a\")\r\n\t\tTxtFile.write(StringDT)\r\n\t\tTxtFile.close()\r\n        \tNumeroDowntimesDetectados = NumeroDowntimesDetectados + 1\r\n\t\tEstaOffline = 0\r\n\t        EnviaTweet(DownTimeTotal)\r\n\t\tEnviaDownTimeThingSpeak(DownTimeTotal)\r\n\t\treturn\r\n\r\ndef EnviaTweet(DuracaoDT):\r\n\tglobal ContaTwetterDoSeuProvedorDeInternet\r\n\tglobal NomeDaSuaCidade\r\n\tglobal APIKeyThingSpeak\r\n        \r\n        \r\n        StringParaTwettar = ContaTwetterDoSeuProvedorDeInternet+\", foi detectado um downtime de \"+str(DuracaoDT)+\" segundos. Estou na cidade de \"+NomeDaSuaCidade+\". #DownTimeDetectado\"\r\n\tparams = urllib.urlencode({'api_key': APIKeyThingSpeak, 'status': StringParaTwettar})  \r\n\tconn = httplib.HTTPConnection(\"api.thingspeak.com:80\")\r\n\tconn.request(\"POST\",\"\/apps\/thingtweet\/1\/statuses\/update\",params)\r\n\tresp = conn.getresponse()\r\n\tconn.close()\r\n\r\ndef EnviaTweetDownTimeIniciado():\r\n\tglobal APIKeyThingSpeak\r\n\r\n    \tStringParaTwettar = \"Monitor de DownTime iniciado!\"\r\n\tparams = urllib.urlencode({'api_key': APIKeyThingSpeak, 'status': StringParaTwettar})  \r\n\tconn = httplib.HTTPConnection(\"api.thingspeak.com:80\")\r\n\tconn.request(\"POST\",\"\/apps\/thingtweet\/1\/statuses\/update\",params)\r\n\tresp = conn.getresponse()\r\n\tconn.close()\r\n\t\r\ndef EnviaDownTimeThingSpeak(DuracaoDT):\t  \t\r\n\tglobal WriteAPIKey\r\n\r\n\tparams = urllib.urlencode({'field1': str(DuracaoDT),'key':WriteAPIKey})\r\n    \theaders = {\"Content-typZZe\": \"application\/x-www-form-urlencoded\",\"Accept\": \"text\/plain\"}\r\n\tconn = httplib.HTTPConnection(\"api.thingspeak.com:80\")\r\n    \tconn.request(\"POST\", \"\/update\", params, headers) # Tenta fazer uma requisicao\r\n\tresp = conn.getresponse()\r\n\r\n\r\n#----------------------\r\n#  PROGRAMA PRINCIPAL\r\n#----------------------\r\n\r\nEnviaTweetDownTimeIniciado()\r\n\r\nwhile True:\r\n\ttry:\r\n\t\tos.system(\"clear\")\r\n       \t\tprint \"---------------------------\"\r\n\t    \tprint \"     DownTime Monitor      \"\r\n      \t\tprint \"---------------------------\"\r\n\t        print \" \"\r\n\t\tprint \"Tentativa #\"+str(NumeroTentativas)+\" - \"+str(NumeroDowntimesDetectados)+\" downtime(s) detectados\"\r\n\t        print \" \"\r\n\r\n\t\tPingResult = os.system(\"ping -c 1 8.8.8.8\")\r\n\t        VerificaERegistraDowntime(PingResult)\r\n\t\ttime.sleep(20) \r\n      \t\tNumeroTentativas = NumeroTentativas + 1\r\n\texcept (KeyboardInterrupt):\r\n\t\tprint \"Aplicacao encerrada.\"\r\n\t\texit(1)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Se preferir, pode baixar o c\u00f3digo-fonte do meu reposit\u00f3rio no GitHub clicando <a href=\"https:\/\/github.com\/phfbertoleti\/MonitorDownTime\">aqui<\/a>.<\/p>\n<p style=\"text-align: justify;\">Para executar o c\u00f3digo, basta salvar o c\u00f3digo come extens\u00e3o .py e utilizar o seguinte comando:<\/p>\n<pre class=\"lang:sh decode:true\">sudo python NOMEDOSEUARQUIVO.py<\/pre>\n<p><strong><br \/>\nObserva\u00e7\u00e3o:<\/strong> o sudo neste caso \u00e9 necess\u00e1rio pois, em algumas distribui\u00e7\u00f5es, o envio de pacotes ICMP (os pings) n\u00e3o \u00e9 liberado a usu\u00e1rios comuns.<\/p>\n<p>&nbsp;<\/p>\n<h2>Resultado<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Como resultado, segue abaixo a conta Twitter que criei e dados do canal ThingSpeak que criei para este fim. Ambos cont\u00e9m todos os Downimes registrados)<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/twitter.com\/DTimeMonitor\">Link para conta Twitter<\/a><\/p>\n<p>[iframe_loader src=&#8221;https:\/\/thingspeak.com\/channels\/208858\/charts\/1&#8243;]<\/p>\n<p style=\"text-align: justify;\">Em suma, quanto mais pessoas utilizarem este projeto, teremos no Twitter uma fonte de informa\u00e7\u00e3o cada vez melhor sobre as operadoras e locais com mais Downtime no Brasil. Para isso, bastar\u00e1 procurar pera hashtag #DownTimeDetectado no Twitter! Portanto, quanto mais pessoas usarem, melhor. Que tal contribuir com esta avalia\u00e7\u00e3o da Internet brasileira e, de quebra, fazer valer seus direitos de consumidor ?<\/p>\n<h2 style=\"text-align: justify;\"><\/h2>\n<h2 style=\"text-align: justify;\">Trabalhos futuros<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Como acontece com todo e qualquer projeto existente, sempre h\u00e1 possibilidades de trabalhos futuros \/ melhorias. Se algu\u00e9m quiser melhorar este projeto (sinta-se \u00e0 vontade para isso!), sugiro considerar:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Uma forma de inicializar este projeto junto com seu sistema operacional, de forma que este execute em &#8220;background&#8221;.<\/li>\n<li style=\"text-align: justify;\">Incrementar a an\u00e1lise por ele feita, incluindo tamb\u00e9m avalia\u00e7\u00e3o a velocidade de Internet.<\/li>\n<li style=\"text-align: justify;\">Essa \u00e9 para os que gostam de um hacking um pouco mais pesado: os roteadores utilizam, em sua maioria, a distribui\u00e7\u00e3o Linux OpenWRT. Apesar de objetivar uso em redes, esta distribui\u00e7\u00e3o suporta Python e as bibliotecas utilizadas aqui neste projeto.<br \/>\nSendo assim, sugiro implementar este projeto direto no roteador (incluindo: acessar via ssh, instalar bibliotecas, faz\u00ea-lo inicializar automaticamente com o script, etc.). Dessa forma, o seu pr\u00f3prio roteador &#8220;avisar\u00e1&#8221; quando a Internet cair.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Agradecimentos<\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Segue aqui um agradecimento especial ao Cleiton Bueno por toda a ajuda e paci\u00eancia em me ajudar neste projeto. Muito obrigado mesmo!<\/p>\n<p style=\"text-align: justify;\">Gostou do artigo? Tem d\u00favidas? Tem cr\u00edticas? Comente abaixo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mais do que nunca, somos dependentes da Internet. Dependemos dela para ler not\u00edcias, nos correspondermos, pagar contas, fazer compras e por a\u00ed vai. Isso sem falar na onda do IoT (Internet of Things &#8211; Internet das Coisas em tradu\u00e7\u00e3o livre), a qual baseia sua exist\u00eancia na conectividade \u00e0 rede. Entretanto, nem sempre temos \u00e0 disposi\u00e7\u00e3o&#8230;<\/p>\n","protected":false},"author":1,"featured_media":383,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[9,6,11,13,5],"tags":[],"class_list":["post-355","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-iot","category-nivel-intermediario","category-publicacoes","category-artigos-nacionais"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Monitor de DownTime no Linux -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Monitor de DownTime no Linux -\" \/>\n<meta property=\"og:description\" content=\"Mais do que nunca, somos dependentes da Internet. Dependemos dela para ler not\u00edcias, nos correspondermos, pagar contas, fazer compras e por a\u00ed vai. Isso sem falar na onda do IoT (Internet of Things &#8211; Internet das Coisas em tradu\u00e7\u00e3o livre), a qual baseia sua exist\u00eancia na conectividade \u00e0 rede. Entretanto, nem sempre temos \u00e0 disposi\u00e7\u00e3o...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pbertoleti\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-30T01:19:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-02-16T10:59:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"333\" \/>\n\t<meta property=\"og:image:height\" content=\"333\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Pedro Bertoleti\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@pedro_bertoleti\" \/>\n<meta name=\"twitter:site\" content=\"@pedro_bertoleti\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pedro Bertoleti\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/\"},\"author\":{\"name\":\"Pedro Bertoleti\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/#\\\/schema\\\/person\\\/fe1c150103c09ca0a2b9bb200bef33de\"},\"headline\":\"Monitor de DownTime no Linux\",\"datePublished\":\"2017-01-30T01:19:19+00:00\",\"dateModified\":\"2018-02-16T10:59:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/\"},\"wordCount\":1359,\"commentCount\":4,\"image\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/InternetDown.jpg\",\"articleSection\":[\"Blog\",\"IoT\",\"N\u00edvel intermedi\u00e1rio\",\"Publica\u00e7\u00f5es\",\"publica\u00e7\u00f5es nacionais\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/\",\"url\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/\",\"name\":\"Monitor de DownTime no Linux -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/InternetDown.jpg\",\"datePublished\":\"2017-01-30T01:19:19+00:00\",\"dateModified\":\"2018-02-16T10:59:38+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/#\\\/schema\\\/person\\\/fe1c150103c09ca0a2b9bb200bef33de\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/InternetDown.jpg\",\"contentUrl\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/InternetDown.jpg\",\"width\":333,\"height\":333},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/2017\\\/01\\\/29\\\/monitorador-de-downtime-no-linux\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Monitor de DownTime no Linux\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/#website\",\"url\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pedrobertoleti.com.br\\\/#\\\/schema\\\/person\\\/fe1c150103c09ca0a2b9bb200bef33de\",\"name\":\"Pedro Bertoleti\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g\",\"caption\":\"Pedro Bertoleti\"},\"description\":\"Informa\u00e7\u00f5es completas em: http:\\\/\\\/pedrobertoleti.com.br\\\/index.php\\\/sobre\\\/\",\"sameAs\":[\"http:\\\/\\\/www.pedrobertoleti.com.br\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Monitor de DownTime no Linux -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/","og_locale":"pt_BR","og_type":"article","og_title":"Monitor de DownTime no Linux -","og_description":"Mais do que nunca, somos dependentes da Internet. Dependemos dela para ler not\u00edcias, nos correspondermos, pagar contas, fazer compras e por a\u00ed vai. Isso sem falar na onda do IoT (Internet of Things &#8211; Internet das Coisas em tradu\u00e7\u00e3o livre), a qual baseia sua exist\u00eancia na conectividade \u00e0 rede. Entretanto, nem sempre temos \u00e0 disposi\u00e7\u00e3o...","og_url":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/","article_publisher":"https:\/\/www.facebook.com\/pbertoleti","article_published_time":"2017-01-30T01:19:19+00:00","article_modified_time":"2018-02-16T10:59:38+00:00","og_image":[{"width":333,"height":333,"url":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","type":"image\/jpeg"}],"author":"Pedro Bertoleti","twitter_card":"summary_large_image","twitter_creator":"@pedro_bertoleti","twitter_site":"@pedro_bertoleti","twitter_misc":{"Escrito por":"Pedro Bertoleti","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#article","isPartOf":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/"},"author":{"name":"Pedro Bertoleti","@id":"https:\/\/pedrobertoleti.com.br\/#\/schema\/person\/fe1c150103c09ca0a2b9bb200bef33de"},"headline":"Monitor de DownTime no Linux","datePublished":"2017-01-30T01:19:19+00:00","dateModified":"2018-02-16T10:59:38+00:00","mainEntityOfPage":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/"},"wordCount":1359,"commentCount":4,"image":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","articleSection":["Blog","IoT","N\u00edvel intermedi\u00e1rio","Publica\u00e7\u00f5es","publica\u00e7\u00f5es nacionais"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/","url":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/","name":"Monitor de DownTime no Linux -","isPartOf":{"@id":"https:\/\/pedrobertoleti.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#primaryimage"},"image":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","datePublished":"2017-01-30T01:19:19+00:00","dateModified":"2018-02-16T10:59:38+00:00","author":{"@id":"https:\/\/pedrobertoleti.com.br\/#\/schema\/person\/fe1c150103c09ca0a2b9bb200bef33de"},"breadcrumb":{"@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#primaryimage","url":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","contentUrl":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","width":333,"height":333},{"@type":"BreadcrumbList","@id":"https:\/\/pedrobertoleti.com.br\/index.php\/2017\/01\/29\/monitorador-de-downtime-no-linux\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/pedrobertoleti.com.br\/"},{"@type":"ListItem","position":2,"name":"Monitor de DownTime no Linux"}]},{"@type":"WebSite","@id":"https:\/\/pedrobertoleti.com.br\/#website","url":"https:\/\/pedrobertoleti.com.br\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pedrobertoleti.com.br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/pedrobertoleti.com.br\/#\/schema\/person\/fe1c150103c09ca0a2b9bb200bef33de","name":"Pedro Bertoleti","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/76ea2e908fec70b0d55b4eefd5ab24788f573fbe00bcb7b7d6e37da8f1e18dd3?s=96&d=mm&r=g","caption":"Pedro Bertoleti"},"description":"Informa\u00e7\u00f5es completas em: http:\/\/pedrobertoleti.com.br\/index.php\/sobre\/","sameAs":["http:\/\/www.pedrobertoleti.com.br"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/pedrobertoleti.com.br\/wp-content\/uploads\/2017\/01\/InternetDown.jpg","_links":{"self":[{"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/posts\/355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=355"}],"version-history":[{"count":41,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/posts\/355\/revisions"}],"predecessor-version":[{"id":1001,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/posts\/355\/revisions\/1001"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/media\/383"}],"wp:attachment":[{"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pedrobertoleti.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}