Sin descripción

maddie a5960daecf Merge pull request #308 from etenzy/go hace 6 años
.github 0c4c8c15bd Added issue templates hace 7 años
.logo aa2380b1b5 Forgot logo hace 6 años
assets 62b8a3c17f Sync frontend assets with PHP hace 6 años
config 044b913bd5 Make Server-Location configurable hace 6 años
database e9b33d81b8 Update Go modules import path hace 6 años
results e9b33d81b8 Update Go modules import path hace 6 años
web 044b913bd5 Make Server-Location configurable hace 6 años
.gitignore 275286cd79 Match `distance` query parameter behavior with PHP backend hace 6 años
LICENSE 4af26110e4 Create LICENSE (#208) hace 7 años
README.md 9212301af6 Update installation instructions hace 6 años
go.mod e9b33d81b8 Update Go modules import path hace 6 años
go.sum a81bb0380d Add BoltDB as embedded database option instead of SQLite (#282) hace 6 años
main.go e9b33d81b8 Update Go modules import path hace 6 años
settings.toml 044b913bd5 Make Server-Location configurable hace 6 años

README.md

LibreSpeed Logo

LibreSpeed

No Flash, No Java, No WebSocket, No Bullshit.

This is a very lightweight speed test implemented in JavaScript, using XMLHttpRequest and Web Workers.

Try it

Take a speed test (PHP implementation)

Compatibility

All modern browsers are supported: IE11, latest Edge, latest Chrome, latest Firefox, latest Safari.
Works with mobile versions too.

Features

  • Download
  • Upload
  • Ping
  • Jitter
  • IP Address, ISP, distance from server (optional)
  • Telemetry (optional)
  • Results sharing (optional)
  • Multiple Points of Test (optional)
  • Compatible with PHP frontend predefined endpoints (with .php suffixes)

Screenshot

Server requirements

  • Any Go supported platforms
  • BoltDB, PostgreSQL or MySQL database to store test results (optional)
  • A fast! Internet connection

Installation

You need Go 1.13+ to compile the binary.

  1. Clone this repository:

    $ git clone github.com/librespeed/speedtest
    # Switch to the Go branch
    $ git checkout -b go
    
  2. Build

    # Change current working directory to the repository
    $ cd speedtest
    # Compile
    $ go build -ldflags "-w -s" -trimpath -o speedtest main.go
    
  3. Copy the assets directory, settings.toml file along with the compiled speedtest binary into a single directory

  4. If you have telemetry enabled,

    • For PostgreSQL/MySQL, create database and import the corresponding .sql file under database/{postgresql,mysql}

      # assume you have already created a database named `speedtest` under current user
      $ psql speedtest < database/postgresql/telemetry_postgresql.sql
      
    • For embedded BoltDB, make sure to define the database_file path in settings.toml:

      database_file="speedtest.db"
      
  5. Put assets folder under the same directory as your compiled binary.

    • Make sure the font files and JavaScripts are in the assets directory
    • You can have multiple HTML pages under assets directory. They can be access directly under the server root (e.g. /example-singleServer-full.html)
    • It's possible to have a default page mapped to /, simply put a file named index.html under assets
  6. Change settings.toml according to your environment:

    # bind address, use empty string to bind to all interfaces
    bind_address="127.0.0.1"
    # backend listen port, default is 8989
    listen_port=8989
    # ipinfo.io API key, if applicable
    ipinfo_api_key=""
        
    # password for logging into statistics page, change this to enable stats page
    statistics_password="PASSWORD"
    # redact IP addresses
    redact_ip_addresses=false
        
    # database type for statistics data, currently supports: bolt, mysql, postgresql
    database_type="postgresql"
    database_hostname="localhost"
    database_name="speedtest"
    database_username="postgres"
    database_password=""
       
    # if you use `bolt` as database, set database_file to database file location
    database_file="speedtest.db"
    

Differences between Go and PHP implementation and caveats

  • Since there is no CGo-free SQLite implementation available, I've opted to use BoltDB instead, as an embedded database alternative to SQLite
  • Test IDs are generated ULID, there is no option to change them to plain ID
  • You can use the same HTML template from the PHP implementation
  • There might be a slight delay on program start if your Internet connection is slow. That's because the program will attempt to fetch your current network's ISP info for distance calculation between your network and the speed test client's. This action will only be taken once, and cached for later use.

License

Copyright (C) 2016-2020 Federico Dossena
Copyright (C) 2020 Maddie Zhan

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/lgpl.