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:

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: