Entonces me surgió la duda de como saber si perdía mi conexión a internet y como poder demostrarle a ONO que llevaba varias horas sin poder trabajar desde casa.
Utilizando mi raspberry pi pude hacer esto. Instalé un Linux, mysql, php, ... y cientos de utilidades más.
Ahora tengo ONO 20 mb de fibra (mixta), pero a veces pienso que la velocidad es menor, si a esto sumamos que no se cuando se me cae la conexión estamos jodidos.
Lo primero que he hecho es intentar determinar a través de la consola en Linux si puedo hacer PING.
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo 1 || echo 0)La segunda cosa que tengo que haces es determinar mi IP:
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1Una vez que sabemos que podemos hacer PING y que hemos obtenida mi IP pública, creo una tabla en mi MySQL para almacenar esos datos:
CREATE TABLE IF NOT EXISTS `T_CHECK_INTERNET` ( `NCOD_INTERNO` int(11) NOT NULL AUTO_INCREMENT, `NCOD_ESTADO` int(11) NOT NULL, `IPV4` varchar(15) COLLATE utf8_spanish_ci NOT NULL, `DFEC_INICIO` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `DFEC_FIN` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `COUNT` int(11) NOT NULL, PRIMARY KEY (`NCOD_INTERNO`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=4 ;
Con esto almacenamos en una tabla, de forma incremental el estado de la conexión, mi ip, la fecha de inicio de la primera vez que se conectó, y la última comprobación. Además contaré las veces que hago la comprobación.
Esta tabla se comprobará cada minuto, pero si hacemos esto, tendremos una tabla llena de filas absurdas cada minuto. Para evitar esto crearé un procedimiento almacenado (así se llama en Oracle) pero en este caso en MySQL.
Este procedimiento se encargará de no repetir filas y actualizar cada minutos solo la columna DFEC_FIN. Así tendré una sola línea por cada conexión buena o mala. Lo entenderéis mas tarde.
DROP PROCEDURE `PRC_INSERT_CHECK_INTERNET`// CREATE DEFINER=`root`@`localhost` PROCEDURE `PRC_INSERT_CHECK_INTERNET`( IN pestado INT, IN pipv4 VARCHAR(15), IN pinicio DATETIME, IN pfin DATETIME) BEGIN DECLARE i_ncod_interno INT; DECLARE i_ipv4 VARCHAR(15); DECLARE i_ncod_estado INT; DECLARE i_inicio DATETIME; DECLARE i_fin DATETIME; DECLARE i_count INT; SELECT NCOD_INTERNO, NCOD_ESTADO, IPV4, DFEC_INICIO, DFEC_FIN, COUNT INTO i_ncod_interno, i_ncod_estado, i_ipv4, i_inicio, i_fin, i_count FROM T_CHECK_INTERNET WHERE NCOD_INTERNO = (SELECT MAX(NCOD_INTERNO) FROM T_CHECK_INTERNET); UPDATE T_CHECK_INTERNET SET DFEC_FIN = pfin, COUNT = COUNT + 1 WHERE NCOD_INTERNO = i_ncod_interno; IF (i_ncod_estado <> pestado) THEN INSERT INTO T_CHECK_INTERNET ( NCOD_ESTADO, IPV4, DFEC_INICIO, DFEC_FIN, COUNT ) VALUES ( pestado, pipv4, pinicio, pfin, 1 ); ELSE IF (STRCMP(i_ipv4,pipv4) <> 0) THEN INSERT INTO T_CHECK_INTERNET ( NCOD_ESTADO, IPV4, DFEC_INICIO, DFEC_FIN, COUNT ) VALUES ( 2, pipv4, pinicio, pfin, 1 ); END IF; END IF; commit; END
El procedimiento es un poco absurdo pero es la forma más fácil.
Una vez hecho esto sólo tengo una línea en la tabla que me indicará el tiempo de conexión desde la primera vez, y si hay una desconexión me aparece otra línea con el tiempo de esa desconexión. Si más tarde vuelve la conexión se vuelve a registrar.
Existen 3 estados:
0 -> Se ha perdido la conexión
1 -> Conexión realizada
2 -> Conexión realizada y se ha cambiado la IP.
Al final obtendré algo como esto:
Ahora creo un script y lo meto en el cron para que ejecute la llamada al script de MySQL con los parámetros como IP, estado, hora, ...
CALL PRC_INSERT_CHECK_INTERNET ( $PING, '$IP_PUBLICA', '$DATE', '$DATE' );Aquí tenéis el script completo (utilizando un DNS dinámico que claro tuve que instalar):
Descargar
Una vez que tenemos esto, mi estado de conexión y me IP lo que voy a hacer es comprobar mi velocidad de descarga. Para hacer esto la verdad es que he visitado un montón de páginas web para poder hacerlo y creo que lo he conseguido. Os muestro los pasos que he realizado para conseguirlo.
El primer objetivo para poder medir la velocidad de mi conexión es comprobar que efectivamente ONO me da 20mb. Como sabéis no son reales, sino es más o menos un 10%. Por lo tanto rondará lo 18-20 megas de máxima velocidad de descarga.
Una vez que vemos que ONO si me puede ofrecer mi velocidad necesito determinar como funcionan los plugins que se utilizan para comprobar la descarga. En el fondo lo que ocurre es que se descargan a tu PC ficheros desde algún sitio. Nosotros vamos a emular esto descargando ficheros desde sitios que se ofrecen para ello:
# Lista de URLs aleatorias URLs[1]=http://speedtest1.sea1.speakeasy.net/speedtest/random500x500.jpg URLs[2]=http://speedtest1.sea1.speakeasy.net/speedtest/random1000x1000.jpg URLs[3]=http://speedtest1.sea1.speakeasy.net/speedtest/random2000x2000.jpg URLs[4]=http://speedtest1.sea1.speakeasy.net/speedtest/random3000x3000.jpg URLs[5]=http://speedtest1.sea1.speakeasy.net/speedtest/random4000x4000.jpg URLs[6]=http://speedtest1.sfo1.speakeasy.net/speedtest/random500x500.jpg URLs[7]=http://speedtest1.sfo1.speakeasy.net/speedtest/random1000x1000.jpg URLs[8]=http://speedtest1.sfo1.speakeasy.net/speedtest/random2000x2000.jpg URLs[9]=http://speedtest1.sfo1.speakeasy.net/speedtest/random3000x3000.jpg URLs[10]=http://speedtest1.sfo1.speakeasy.net/speedtest/random4000x4000.jpg URLs[11]=http://speedtest1.lax1.speakeasy.net/speedtest/random500x500.jpg URLs[12]=http://speedtest1.lax1.speakeasy.net/speedtest/random1000x1000.jpg URLs[13]=http://speedtest1.lax1.speakeasy.net/speedtest/random2000x2000.jpg URLs[14]=http://speedtest1.lax1.speakeasy.net/speedtest/random3000x3000.jpg URLs[15]=http://speedtest1.lax1.speakeasy.net/speedtest/random4000x4000.jpg URLs[16]=http://speedtest1.dfw1.speakeasy.net/speedtest/random500x500.jpg URLs[17]=http://speedtest1.dfw1.speakeasy.net/speedtest/random1000x1000.jpg URLs[18]=http://speedtest1.dfw1.speakeasy.net/speedtest/random2000x2000.jpg URLs[19]=http://speedtest1.dfw1.speakeasy.net/speedtest/random3000x3000.jpg URLs[20]=http://speedtest1.dfw1.speakeasy.net/speedtest/random4000x4000.jpg URLs[21]=http://speedtest1.chi1.speakeasy.net/speedtest/random500x500.jpg URLs[22]=http://speedtest1.chi1.speakeasy.net/speedtest/random1000x1000.jpg URLs[23]=http://speedtest1.chi1.speakeasy.net/speedtest/random2000x2000.jpg URLs[24]=http://speedtest1.chi1.speakeasy.net/speedtest/random3000x3000.jpg URLs[25]=http://speedtest1.chi1.speakeasy.net/speedtest/random4000x4000.jpg URLs[26]=http://speedtest1.atl1.speakeasy.net/speedtest/random500x500.jpg URLs[27]=http://speedtest1.atl1.speakeasy.net/speedtest/random1000x1000.jpg URLs[28]=http://speedtest1.atl1.speakeasy.net/speedtest/random2000x2000.jpg URLs[29]=http://speedtest1.atl1.speakeasy.net/speedtest/random3000x3000.jpg URLs[30]=http://speedtest1.atl1.speakeasy.net/speedtest/random4000x4000.jpg URLs[31]=http://speedtest1.nyc1.speakeasy.net/speedtest/random500x500.jpg URLs[32]=http://speedtest1.nyc1.speakeasy.net/speedtest/random1000x1000.jpg URLs[33]=http://speedtest1.nyc1.speakeasy.net/speedtest/random2000x2000.jpg URLs[34]=http://speedtest1.nyc1.speakeasy.net/speedtest/random3000x3000.jpg URLs[35]=http://speedtest1.nyc1.speakeasy.net/speedtest/random4000x4000.jpg URLs[36]=http://speedtest1.wdc1.speakeasy.net/speedtest/random500x500.jpg URLs[37]=http://speedtest1.wdc1.speakeasy.net/speedtest/random1000x1000.jpg URLs[38]=http://speedtest1.wdc1.speakeasy.net/speedtest/random2000x2000.jpg URLs[39]=http://speedtest1.wdc1.speakeasy.net/speedtest/random3000x3000.jpg URLs[40]=http://speedtest1.wdc1.speakeasy.net/speedtest/random4000x4000.jpg URLs[41]=http://www.testdevelocidad.es/speedtest/random500x500.jpg URLs[42]=http://www.testdevelocidad.es/speedtest/random1000x1000.jpg URLs[43]=http://www.testdevelocidad.es/speedtest/random2000x2000.jpg URLs[44]=http://www.testdevelocidad.es/speedtest/random3000x3000.jpg URLs[45]=http://www.testdevelocidad.es/speedtest/random4000x4000.jpg URLs[46]=http://testvsvll2.ono.es/speedtest/random500x500.jpg URLs[47]=http://testvsvll2.ono.es/speedtest/random1000x1000.jpg URLs[48]=http://testvsvll2.ono.es/speedtest/random2000x2000.jpg URLs[49]=http://testvsvll2.ono.es/speedtest/random3000x3000.jpg URLs[50]=http://testvsvll2.ono.es/speedtest/random4000x4000.jpg URLs[51]=http://host1.cablexnet.net/host2/speedtest/random500x500.jpg URLs[52]=http://host1.cablexnet.net/host2/speedtest/random1000x1000.jpg URLs[53]=http://host1.cablexnet.net/host2/speedtest/random2000x2000.jpg URLs[54]=http://host1.cablexnet.net/host2/speedtest/random3000x3000.jpg URLs[55]=http://host1.cablexnet.net/host2/speedtest/random4000x4000.jpg URLs[56]=http://speedtest.cyberneticos.net/speedtest/random500x500.jpg URLs[57]=http://speedtest.cyberneticos.net/speedtest/random1000x1000.jpg URLs[58]=http://speedtest.cyberneticos.net/speedtest/random2000x2000.jpg URLs[59]=http://speedtest.cyberneticos.net/speedtest/random3000x3000.jpg URLs[60]=http://speedtest.cyberneticos.net/speedtest/random4000x4000.jpg URLs[61]=http://speedtest.wdc01.softlayer.com/downloads/test10.zip URLs[62]=http://speedtest.wdc01.softlayer.com/downloads/test100.zip URLs[63]=http://speedtest.wdc01.softlayer.com/downloads/test500.zip URLs[64]=http://london1.linode.com/100MB-london.bin URLs[65]=http://tokyo1.linode.com/100MB-tokyo.bin URLs[66]=http://fremont1.linode.com/100MB-fremont.bin URLs[67]=http://newark1.linode.com/100MB-newark.bin
Actualmente he conseguido encontrar 67 ficheros donde hacer pruebas de descargas, como se pueden ver son ficheros especialmente para ello. La verdad es mi comprobador de descarga dependerá no solo de la velocidad de ONO sino de la velocidad de los servidores.
Como hay 67 URLs no todas serán buenas, así que por cada prueba de download hago una descarga de 5 ficheros e intento que en cada prueba sean diferentes. Utilizo para ello una especie de RANDOM en BASH para seleccionar 5 URLs diferentes cada vez. TO BE CONTINUED
No hay comentarios:
Publicar un comentario