Olá Pessoal,
Como podem observar pelo título, digo que hoje será nosso primeiro post efetivamente relacionado a Python, e de fato tenho que mencionar que vocês também estão certo, pois podemos começar uma nova jornada aqui em nosso BLOG.
Como vocês podem notar em nosso BLOG, eu sempre tento desenvolver algo que de fato é motivacional para mim buscar a informação, pesquisar, desenvolver, concluir, testar e depois tento compartilhar com vocês essa ideia, que por sua vez pode ajudar algum de vocês e também sempre aprendo algo à mais com vocês.
Projeto
Esse papo iniciou-se em um dos grupos e acabei me interessando na ideia, pois de momento pensei em 4 formas para poder utilizar essas facilidades:
- Ambiente corporativo tanto a nível de TI Interno, como também para empresas de terceiros, que em muitos casos precisamos executar troubleshooting.
- Nível de usuario domestico, para ter algum historico e avaliar se esta de acordo com os planos contratados.
- Executar um teste em guest shell em roteadores Cisco rodando diretamente o script Python.
- Para aprendizagem sobre os conceitos de Python.
SpeedTest
Acredito que a maioria de vocês em algum momento já utilizou o site do SpeedTest ou qualquer outra variação nesse sentido ( Fast – Netflix, Brasil Banda Larga, OKLA, Cloudflare, etc ).
Talvez muitos de vocês vão achar que estou sendo maluco, pois esses testes muito das vezes não significam muito em troubleshooting, pois nem sempre os valores indicados são reais, já que sempre irá buscar o servidor mais proximo de seu ponto, depende também da disponibilidade desse provedor, não tem preferência esse tráfego, os servidores que estão medindo esse tráfego nem sempre estão disponivéis em estruturas dedicadas, etc.
Também concordo nesses ítens, mas foi um aprendizado para eu aplicar algo em Python, então sempre olhe com outra perspectiva seu aprendizado. Pode ser, que para alguma situação de um leitor, isso possa ser útil, então por isso resolvi compartilhar e não guardar a informação comigo. 🙂
Devemos lembrar que temos uma biblioteca Python definida como speedtest-cli, ou seja, não iremos precisar utilizar um navegador para obter os valores.
Lab
Nesse laboratório utilizei alguns outros conceitos que depois posso detalhar em outros posts, pois a ideia é que esse teste fique em execução, assim pode-se fazer a validação conforme sua necessidade, ou seja, para nosso exemplo eu fiz com que meu script execute automaticamente a cada 30 minutos.
Após esse período, ele irá passar as informações desejadas para um dashboard, onde iremos poder consultar essas informações através da Internet. Esse ambiente que temos é free, porém temos algumas ressalvas, pois a base de dados que fica guardada no dashboard é de 30 dias, podemos ter apenas 3 devices cadastrados e no máximo cada dashboard desses devices pode ter 10 gráficos. A ferramenta que utilizei foi da Ubidots, mas como informado o plano free atende muito bem para estruturar seus testes e ” brincadeiras…rs “.
Segue a estrutura:
- Docker Ubuntu – image 18.04
- Python 2.7
- Crontab
- speedtest-cli
- Python Library request
- Conta na Ubidots
- Link de Internet ( rsrs )
Código
Conforme mencionando anteriormente iremos utilizar algumas bibliotecas do Python, e a partir dela iremos utilizar as variáveis para construir nosso código. Não tenho também a ideia de explicar toda a estrutura do Python neste momento, pois espero publicar mais ” 101 – Python “ para trazer testes mais lógico e simples.
Com isso, segue o código definido para essa tarefa. Se observarem o código também já esta explicando cada funcionalidade.
#!/usr/bin/python import speedtest import requests #Global variables ENDPOINT = "things.ubidots.com" #URL related webpage to create dashboard DEVICE_LABEL = "raspberry-pi" #Not necessary to be raspeberry and can use any linux inside container or run in your machine VARIABLE_LABEL = "city" #Variable created inside Ubidots portal TOKEN = "YOUR TOKEN" #Get value related your connection using library SpeedTest st = speedtest.Speedtest() #Get values related class of server near of your provider st.get_best_server() #Execute Post Related City and Provider of SpeedTest def post_var(payload_ci_sp, url=ENDPOINT, device=DEVICE_LABEL, token=TOKEN): url = "http://{}/api/v1.6/devices/{}".format(url, device) headers = {"X-Auth-Token": TOKEN, "Content-Type": "application/json"} if VARIABLE_LABEL == 'city': req = requests.post(url=url, headers=headers, json=payload_ci_sp) else: print("Error with variable City") #Main function to capture payload each variable(city,provider) def main(): # Builds Payload and topic payload_ci_sp = {VARIABLE_LABEL: {"value": 30, "context": {"city": st.best['name'], "provider": st.best['sponsor']}}} #Send Data post_var(payload_ci_sp) #It only to execute main function + post_var if __name__ == "__main__": main() #Capture all values related your connection payload = {'Download': round(st.download() / 1000000, 2) , 'Upload': round(st.upload() / 1000000, 2), 'Ping': round(st.results.ping, 2)} #Execute post of values r = requests.post('http://things.ubidots.com/api/v1.6/devices/raspberry-pi/?token='TOKEN'', data=payload)
Dashboard
Após essa estrutura iremos avaliar se de fato as informações estão sendo populadas no portal da Ubidots. Vale lembrar que é necessário abrir uma conta no portal e também gerar uma ” API Key “, pois é através dessa API que você irá conseguir popular suas informações.
Uma outra dica é que para esse dashboard, as variáveis serão populadas através da estrutura como sendo um ” Raspberry PI “, porém como explicado acima não existe a necessidade de ter o equipamento, pois você pode executar através de qualquer equipamento baseando-se em Python 2.7 e versões posteriores.
Isso foi uma forma de utilizar essa facilidade de APIs do fabricante, que já disponibiliza isso através de seu dashboard.
Após obter as informações populadas, você pode montar seu dashboard da forma que achar mais interessante. Eu acabei colocando desta forma.
PS.: Eu coloquei também diferença de cores para simbolizar alguns limites que podem demonstrar para você, como amarelo o threshold 1 já excedeu.
Neste caso acima estou populado os valores bem como mostrando as variavéis que escolhi no meu código Python para representar ” City “ e ” Provider “.
Conclusão
Neste desenvolvimento tentei de fato mais aprender a trabalhar com o Python, bem como tentar transferir informações para outras plataformas, do que propriamente o fato de ser o teste do SpeedTest. Acho que isso de alguma forma incentivou para usar uma situação real e transformar ela em algo mais palpável, do que visualizar isso através de um Browser.
O que vocês acharam? Qual sua opinião sobre a utilização do SpeedTest? Tem pensando em alguma facilidade utilizando Python?
Descreva abaixo em nossos comentários. 🙂
Vale ressaltar que esses códigos eu já havia populado no Github, então se deseja ter mais detalhes ou se deseja contribuir mais com o código fique a vontade. Vai lá para dar uma conferida -> Inet_Validation_Speed
PS.: Um dos testes que estou achando bem mais interessante hoje é da CloudFlare, que tem mostrando o jitter e as variações por banda.
Abs,
Rodrigo
2 comments
Parabéns pelo post. Cheguei nele por acaso.
Assim como você estou estudando Python para criar ferramentas de troubleshooting em redes.
Abs e sucesso.
Author
Que bacana. Estamos estudando e tentando desenvolver, bem como repassando para comunidade.
Aqui temos também muito conteúdo de outros assuntos.