Merged with master
This commit is contained in:
commit
91796c8cc6
|
@ -6,6 +6,9 @@ This is the Docker version of LibreSpeed.
|
|||
|
||||
See the included `doc.md` or the wiki for instructions on how to use it.
|
||||
|
||||
## Go backend
|
||||
A Go implementation is available in the `go` branch, maintained by [Maddie Zhan](https://github.com/maddie).
|
||||
|
||||
## Donate
|
||||
[![Donate with Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/fdossena/donate)
|
||||
[Donate with PayPal](https://www.paypal.me/sineisochronic)
|
||||
|
|
19
doc.md
19
doc.md
|
@ -141,18 +141,6 @@ __Advanced parameters:__ (Seriously, don't change these unless you know what you
|
|||
* `1514 / 1440`: TCP+IPv6+ETH, ignoring HTTP overhead
|
||||
* `1`: ignore overheads. This measures the speed at which you actually download and upload files rather than the raw connection speed
|
||||
|
||||
### Multiple Points of Test
|
||||
If you want to use more than one test server, this is the time to add all your test points and select the best one. Skip this part if you don't want to use this feature.
|
||||
|
||||
The best way to do this is to declare an array with all your servers, and give it to the speedtest:
|
||||
```js
|
||||
var SPEEDTEST_SERVERS=[
|
||||
server1,
|
||||
server2,
|
||||
...
|
||||
];
|
||||
s.addTestPoints(SPEEDTEST_SERVERS);
|
||||
|
||||
## Multiple Points of Test
|
||||
For multiple servers, you need to set up 1+ LibreSpeed backends, and 1 LibreSpeed frontend.
|
||||
|
||||
|
@ -173,7 +161,7 @@ docker run -e MODE=backend -p 80:80 -it adolfintel/speedtest
|
|||
### Frontend mode
|
||||
In frontend mode, LibreSpeed serves clients the Web UI and a list of servers. To do this:
|
||||
* Set the `MODE` environment variable to `frontend`
|
||||
* Create a servers.json file with your test points. The syntax is the following:
|
||||
* Create a `servers.json` file with your test points. The syntax is the following:
|
||||
```
|
||||
[
|
||||
{
|
||||
|
@ -196,6 +184,11 @@ In frontend mode, LibreSpeed serves clients the Web UI and a list of servers. To
|
|||
]
|
||||
```
|
||||
Note: if a server only supports HTTP or HTTPS, specify the protocol in the server field. If it supports both, just use `//`.
|
||||
If you want the test to load this list from an URL instead of a file, just put the URL that you want to be loaded in the file in quotes, like this:
|
||||
```
|
||||
"//mydomain.com/ServerList.json"
|
||||
```
|
||||
It doesn't need to be a complete URL, if it's the same domain you can just specify the file name. Note that the same origin policy still applies.
|
||||
* Mount this file to `/servers.json` in the container
|
||||
|
||||
The test can be accessed on port 80.
|
||||
|
|
|
@ -22,29 +22,48 @@ s.setParameter("getIp_ispInfo","false");
|
|||
<?php if(getenv("DISTANCE")){ ?>
|
||||
s.setParameter("getIp_ispInfo_distance","<?=getenv("DISTANCE") ?>");
|
||||
<?php } ?>
|
||||
s.addTestPoints(SPEEDTEST_SERVERS); //add list of servers
|
||||
|
||||
//SERVER AUTO SELECTION
|
||||
function initServers(){
|
||||
s.selectServer(function(server){
|
||||
if(server!=null){ //at least 1 server is available
|
||||
I("loading").className="hidden"; //hide loading message
|
||||
//populate server list for manual selection
|
||||
for(var i=0;i<SPEEDTEST_SERVERS.length;i++){
|
||||
if(SPEEDTEST_SERVERS[i].pingT==-1) continue;
|
||||
var option=document.createElement("option");
|
||||
option.value=i;
|
||||
option.textContent=SPEEDTEST_SERVERS[i].name;
|
||||
if(SPEEDTEST_SERVERS[i]===server) option.selected=true;
|
||||
I("server").appendChild(option);
|
||||
}
|
||||
//show test UI
|
||||
I("testWrapper").className="visible";
|
||||
initUI();
|
||||
}else{ //no servers are available, the test cannot proceed
|
||||
I("message").innerHTML="No servers available";
|
||||
}
|
||||
});
|
||||
var noServersAvailable=function(){
|
||||
I("message").innerHTML="No servers available";
|
||||
}
|
||||
var runServerSelect=function(){
|
||||
s.selectServer(function(server){
|
||||
if(server!=null){ //at least 1 server is available
|
||||
I("loading").className="hidden"; //hide loading message
|
||||
//populate server list for manual selection
|
||||
for(var i=0;i<SPEEDTEST_SERVERS.length;i++){
|
||||
if(SPEEDTEST_SERVERS[i].pingT==-1) continue;
|
||||
var option=document.createElement("option");
|
||||
option.value=i;
|
||||
option.textContent=SPEEDTEST_SERVERS[i].name;
|
||||
if(SPEEDTEST_SERVERS[i]===server) option.selected=true;
|
||||
I("server").appendChild(option);
|
||||
}
|
||||
//show test UI
|
||||
I("testWrapper").className="visible";
|
||||
initUI();
|
||||
}else{ //no servers are available, the test cannot proceed
|
||||
noServersAvailable();
|
||||
}
|
||||
});
|
||||
}
|
||||
if(typeof SPEEDTEST_SERVERS === "string"){
|
||||
//need to fetch list of servers from specified URL
|
||||
s.loadServerList(SPEEDTEST_SERVERS,function(servers){
|
||||
if(servers==null){ //failed to load server list
|
||||
noServersAvailable();
|
||||
}else{ //server list loaded
|
||||
SPEEDTEST_SERVERS=servers;
|
||||
runServerSelect();
|
||||
}
|
||||
});
|
||||
}else{
|
||||
//hardcoded server list
|
||||
s.addTestPoints(SPEEDTEST_SERVERS);
|
||||
runServerSelect();
|
||||
}
|
||||
}
|
||||
|
||||
var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040";
|
||||
|
|
36
speedtest.js
36
speedtest.js
|
@ -49,7 +49,7 @@ function Speedtest() {
|
|||
this._settings = {}; //settings for the speedtest worker
|
||||
this._state = 0; //0=adding settings, 1=adding servers, 2=server selection done, 3=test running, 4=done
|
||||
console.log(
|
||||
"LibreSpeed by Federico Dossena v5.1 - https://github.com/librespeed/speedtest"
|
||||
"LibreSpeed by Federico Dossena v5.2 - https://github.com/librespeed/speedtest"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -127,6 +127,40 @@ Speedtest.prototype = {
|
|||
addTestPoints: function(list) {
|
||||
for (var i = 0; i < list.length; i++) this.addTestPoint(list[i]);
|
||||
},
|
||||
/**
|
||||
* Load a JSON server list from URL (multiple points of test)
|
||||
* url: the url where the server list can be fetched. Must be an array with objects containing the following elements:
|
||||
* {
|
||||
* "name": "User friendly name",
|
||||
* "server":"http://yourBackend.com/", URL to your server. You can specify http:// or https://. If your server supports both, just write // without the protocol
|
||||
* "dlURL":"garbage.php" path to garbage.php or its replacement on the server
|
||||
* "ulURL":"empty.php" path to empty.php or its replacement on the server
|
||||
* "pingURL":"empty.php" path to empty.php or its replacement on the server. This is used to ping the server by this selector
|
||||
* "getIpURL":"getIP.php" path to getIP.php or its replacement on the server
|
||||
* }
|
||||
* result: callback to be called when the list is loaded correctly. An array with the loaded servers will be passed to this function, or null if it failed
|
||||
*/
|
||||
loadServerList: function(url,result) {
|
||||
if (this._state == 0) this._state = 1;
|
||||
if (this._state != 1) throw "You can't add a server after server selection";
|
||||
this._settings.mpot = true;
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onload = function(){
|
||||
try{
|
||||
var servers=JSON.parse(xhr.responseText);
|
||||
for(var i=0;i<servers.length;i++){
|
||||
this._checkServerDefinition(servers[i]);
|
||||
}
|
||||
this.addTestPoints(servers);
|
||||
result(servers);
|
||||
}catch(e){
|
||||
result(null);
|
||||
}
|
||||
}.bind(this);
|
||||
xhr.onerror = function(){result(null);}
|
||||
xhr.open("GET",url);
|
||||
xhr.send();
|
||||
},
|
||||
/**
|
||||
* Returns the selected server (multiple points of test)
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue