diff --git a/doc.md b/doc.md index 14e3b1c..74c92ff 100644 --- a/doc.md +++ b/doc.md @@ -330,7 +330,7 @@ If you see a table called `speedtest_users`, empty, you did it right. ### Configuring `telemetry.php` Open telemetry_settings.php with notepad or a similar text editor. -Set your preferred database, ``$db_type="mysql";``, ``$db_type="sqlite";``, ``$db_type="postgresql";`` or or ``$db_type="csv";`` +Set your preferred database, ``$db_type="mysql";``, ``$db_type="sqlite";``, ``$db_type="postgresql";`` or ``$db_type="csv";`` If you choose to use Sqlite3, you must set the path to your database file: ```php $Sqlite_db_file = "../telemetry.sql"; @@ -363,7 +363,7 @@ __Note__: CSV currently only supports basic telemetry, the log will not be saved Edit your test page; where you start the worker, you need to specify the `telemetry_level`. There are 3 levels: * `none`: telemetry is disabled (default) -* `basic`: telemetry collects IP, User Agent, Preferred language, Test results +* `basic`: telemetry collects IP, ISP info, User Agent, Preferred language, Test results * `full`: same as above, but also collects a log (10-150 Kb each, not recommended) Example: diff --git a/speedtest_worker.js b/speedtest_worker.js index a46641e..fbf1e8c 100644 --- a/speedtest_worker.js +++ b/speedtest_worker.js @@ -442,7 +442,7 @@ function pingTest (done) { if (i < settings.count_ping) doPing(); else done() // more pings to do? } }.bind(this) - // sent xhr + // send xhr xhr[0].open('GET', settings.url_ping + url_sep(settings.url_ping) + 'r=' + Math.random(), true) // random string to prevent caching xhr[0].send() }.bind(this) @@ -457,14 +457,15 @@ function sendTelemetry(){ xhr.open('POST', settings.url_telemetry+url_sep(settings.url_telemetry)+"r="+Math.random(), true); try{ var fd = new FormData() - fd.append('dl', dlStatus) + fd.append('ispinfo', clientIp) //clientIp also contains ISP info + fd.append('dl', dlStatus) fd.append('ul', ulStatus) fd.append('ping', pingStatus) fd.append('jitter', jitterStatus) fd.append('log', settings.telemetry_level>1?log:"") xhr.send(fd) }catch(ex){ - var postData = 'dl='+encodeURIComponent(dlStatus)+'&ul='+encodeURIComponent(ulStatus)+'&ping='+encodeURIComponent(pingStatus)+'&jitter='+encodeURIComponent(jitterStatus)+'&log='+encodeURIComponent(settings.telemetry_level>1?log:'') + var postData = 'ispinfo='+encodeURIComponent(clientIp)+'dl='+encodeURIComponent(dlStatus)+'&ul='+encodeURIComponent(ulStatus)+'&ping='+encodeURIComponent(pingStatus)+'&jitter='+encodeURIComponent(jitterStatus)+'&log='+encodeURIComponent(settings.telemetry_level>1?log:'') xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xhr.send(postData) } diff --git a/speedtest_worker.min.js b/speedtest_worker.min.js index ac73078..7794608 100644 --- a/speedtest_worker.min.js +++ b/speedtest_worker.min.js @@ -1 +1 @@ -var testStatus=-1,dlStatus="",ulStatus="",pingStatus="",jitterStatus="",clientIp="",dlProgress=0,ulProgress=0,pingProgress=0,log="";function tlog(s){log+=Date.now()+": "+s+"\n"}function twarn(s){log+=Date.now()+" WARN: "+s+"\n",console.warn(s)}var settings={test_order:"IP_D_U",time_ul:15,time_dl:15,time_ulGraceTime:3,time_dlGraceTime:1.5,count_ping:35,url_dl:"garbage.php",url_ul:"empty.php",url_ping:"empty.php",url_getIp:"getIP.php",getIp_ispInfo:!0,getIp_ispInfo_distance:"km",xhr_dlMultistream:10,xhr_ulMultistream:3,xhr_multistreamDelay:300,xhr_ignoreErrors:1,xhr_dlUseBlob:!1,xhr_ul_blob_megabytes:20,garbagePhp_chunkSize:20,enable_quirks:!0,ping_allowPerformanceApi:!0,overheadCompensationFactor:1.06,useMebibits:!1,telemetry_level:0,url_telemetry:"telemetry.php"},xhr=null,interval=null,test_pointer=0;function url_sep(url){return url.match(/\?/)?"&":"?"}function clearRequests(){if(tlog("stopping pending XHRs"),xhr){for(var i=0;i=settings.test_order.length)return testStatus=4,void sendTelemetry();switch(settings.test_order.charAt(test_pointer)){case"I":if(test_pointer++,iRun)return void runNextTest();iRun=!0,getIp(runNextTest);break;case"D":if(test_pointer++,dRun)return void runNextTest();dRun=!0,testStatus=1,dlTest(runNextTest);break;case"U":if(test_pointer++,uRun)return void runNextTest();uRun=!0,testStatus=3,ulTest(runNextTest);break;case"P":if(test_pointer++,pRun)return void runNextTest();pRun=!0,testStatus=2,pingTest(runNextTest);break;case"_":test_pointer++,setTimeout(runNextTest,1e3);break;default:test_pointer++}}};runNextTest()}"abort"===params[0]&&(tlog("manually aborted"),clearRequests(),runNextTest=null,interval&&clearInterval(interval),1settings.time_dl&&01e3*settings.time_dlGraceTime&&(0settings.time_ul&&01e3*settings.time_ulGraceTime&&(0=settings.test_order.length)return testStatus=4,void sendTelemetry();switch(settings.test_order.charAt(test_pointer)){case"I":if(test_pointer++,iRun)return void runNextTest();iRun=!0,getIp(runNextTest);break;case"D":if(test_pointer++,dRun)return void runNextTest();dRun=!0,testStatus=1,dlTest(runNextTest);break;case"U":if(test_pointer++,uRun)return void runNextTest();uRun=!0,testStatus=3,ulTest(runNextTest);break;case"P":if(test_pointer++,pRun)return void runNextTest();pRun=!0,testStatus=2,pingTest(runNextTest);break;case"_":test_pointer++,setTimeout(runNextTest,1e3);break;default:test_pointer++}}};runNextTest()}"abort"===params[0]&&(tlog("manually aborted"),clearRequests(),runNextTest=null,interval&&clearInterval(interval),1settings.time_dl&&01e3*settings.time_dlGraceTime&&(0settings.time_ul&&01e3*settings.time_ulGraceTime&&(0prepare("INSERT INTO speedtest_users (ip,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?)") or die("2"); - $stmt->bind_param("ssssssss",$ip,$ua,$lang,$dl,$ul,$ping,$jitter,$log) or die("3"); + $stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ispinfo,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?,?)") or die("2"); + $stmt->bind_param("sssssssss",$ip,$ispinfo,$ua,$lang,$dl,$ul,$ping,$jitter,$log) or die("3"); $stmt->execute() or die("4"); $stmt->close() or die("5"); $conn->close() or die("6"); @@ -23,6 +24,7 @@ if($db_type=="mysql"){ $conn->exec(" CREATE TABLE IF NOT EXISTS `speedtest_users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + `ispinfo` text, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ip` text NOT NULL, `ua` text NOT NULL, @@ -34,8 +36,8 @@ if($db_type=="mysql"){ `log` longtext ); "); - $stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?)") or die("2"); - $stmt->execute(array($ip,$ua,$lang,$dl,$ul,$ping,$jitter,$log)) or die("3"); + $stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ispinfo,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?,?)") or die("2"); + $stmt->execute(array($ip,$ispinfo,$ua,$lang,$dl,$ul,$ping,$jitter,$log)) or die("3"); $conn = null; }elseif($db_type=="postgresql"){ // Prepare connection parameters for db connection @@ -45,8 +47,8 @@ if($db_type=="mysql"){ $conn_password = "password=$PostgreSql_password"; // Create db connection $conn = new PDO("pgsql:$conn_host;$conn_db;$conn_user;$conn_password") or die("1"); - $stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?)") or die("2"); - $stmt->execute(array($ip,$ua,$lang,$dl,$ul,$ping,$jitter,$log)) or die("3"); + $stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ispinfo,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?,?)") or die("2"); + $stmt->execute(array($ip,$ispinfo,$ua,$lang,$dl,$ul,$ping,$jitter,$log)) or die("3"); $conn = null; } elseif($db_type=="csv"){ @@ -55,6 +57,7 @@ elseif($db_type=="csv"){ $date = date('Y-m-d H:i:s'); $str = '"' . $date . '",'; $str .= '"' . $ip . '",'; + $str .= '"' . $ispinfo . '",'; $str .= '"' . $ua . '",'; $str .= '"' . $dl . '",'; $str .= '"' . $ul . '",'; @@ -63,11 +66,11 @@ elseif($db_type=="csv"){ // Set header if this is a new file if (!file_exists($Csv_File)) { - $header = '"date","ip","ua","download","upload","ping","jitter"' . "\n"; + $header = '"date","ip","ispinfo","ua","download","upload","ping","jitter"' . "\n"; file_put_contents($Csv_File, $header, FILE_APPEND); } - // Writting line to file + // Write line to file file_put_contents($Csv_File, $str, FILE_APPEND); } ?> diff --git a/telemetry_mysql.sql b/telemetry_mysql.sql index 160b4fd..abdd299 100644 --- a/telemetry_mysql.sql +++ b/telemetry_mysql.sql @@ -1,12 +1,3 @@ --- phpMyAdmin SQL Dump --- version 4.7.0 --- https://www.phpmyadmin.net/ --- --- Host: 127.0.0.1 --- Generation Time: Aug 24, 2017 at 02:16 PM --- Server version: 10.1.25-MariaDB --- PHP Version: 7.1.7 - SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; @@ -32,6 +23,7 @@ CREATE TABLE `speedtest_users` ( `id` int(11) NOT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ip` text NOT NULL, + `ispinfo` text, `ua` text NOT NULL, `lang` text NOT NULL, `dl` text, diff --git a/telemetry_postgresql.sql b/telemetry_postgresql.sql index 4c716dc..a750c98 100644 --- a/telemetry_postgresql.sql +++ b/telemetry_postgresql.sql @@ -42,6 +42,7 @@ CREATE TABLE speedtest_users ( id integer NOT NULL, "timestamp" timestamp without time zone DEFAULT now() NOT NULL, ip text NOT NULL, + ispinfo text, ua text NOT NULL, lang text NOT NULL, dl text, diff --git a/telemetry_settings.php b/telemetry_settings.php index 4bb9b62..505a8b1 100644 --- a/telemetry_settings.php +++ b/telemetry_settings.php @@ -1,6 +1,6 @@