Monitoriza tu velocidad de conexión con Python + Plot.ly
En un tweet the Linuxparty leo una forma de comprobar la velocidad de la conexión de internet desde la línea de comandos en Linux utilizando Python:
Comprobar la velocidad de Internet desde la línea de comandos en Linux: Cuando experimenta una lenta conexión ... http://t.co/PHGZ9qKy2m
— linuxparty (@linuxparty) February 3, 2014
Partiendo de esta base y viendo la posibilidad de probar la API de Plot.ly (servicio para crear gráficas) para Python, me he creado un pequeño script que ejecuto cada 5 minutos (por ahora, seguramente lo deje en una ejecución cada hora), que verifica la velocidad de la conexión y alimenta una gráfica en Plot.ly.
Evidentemente lo primero es crear una cuenta en Plot.ly para poder tener de un usuario y una key para utilizar con la API (en el código de mi script está puesto como <USUARIO> y <KEY>
Después en nuestro sistema tenemos que instalar la librería Python para instalar la API de Plot.ly:
$# sudo apt-get install python-pip $# sudo pip install plotly
Ahora nos bajamos el script para verificar la velocidad de conexión que sale en el artículo de Linuxparty:
wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
Con esto ya tendremos todos los elementos.
#!/usr/bin/env python # -*- coding: utf-8 -*- # by Akirasan Febrero 2014 import plotly.plotly as py import datetime import speedtest_cli import sys import StringIO import string from datetime import datetime py = py.sing_in("<USUARIO>", "<KEY>") #guardamos y redireccionamos el sys.stdout stdout = sys.stdout sys.stdout = reportSIO = StringIO.StringIO() #Llamamos a la utilidad speedtest_cli speedtest_cli.speedtest() #Recuperamos lo escrito en nuestro IO reportStr = reportSIO.getvalue() #recuperar sys.stdout sys.stdout = stdout #Buscamos posición de la información dl_pos = string.find(reportStr, 'Download:') ul_pos = string.find(reportStr, 'Upload:') dia = datetime.today() layout = {'title': 'Velocidad conexion internet'} data = [{'x': dia, 'y': reportStr[dl_pos+9:dl_pos+9+6], 'name':'Download' }, {'x': dia, 'y': reportStr[ul_pos+7:ul_pos+7+6], 'name':'Upload' } ] py.plot(data, filename='Velocidad_Internet', fileopt='extend', world_readable=False, layout=layout)
Luego ya solo falta o ejecutarlo como un script poniendo los permisos de ejecución y programarlo con el cron o similar.
Una vez hemos alimentado la información en Plot.ly podemos ir a consultar y ver el resultado de la gráfica. Algo como esto: