mirror of
https://github.com/henrywhitaker3/Speedtest-Tracker.git
synced 2025-12-24 14:31:52 +01:00
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,3 +15,4 @@ yarn-error.log
|
||||
|
||||
_ide_helper.php
|
||||
.idea
|
||||
.config
|
||||
|
||||
118
README.md
118
README.md
@@ -1,6 +1,6 @@
|
||||
# Speedtest Tracker
|
||||
|
||||
[](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [](https://github.com/henrywhitaker3/Speedtest-Tracker/commits)  [](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE)
|
||||
[](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [](https://github.com/henrywhitaker3/Speedtest-Tracker/commits)  [](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE)
|
||||
|
||||
This program runs a speedtest check every hour and graphs the results. The back-end is written in [Laravel](https://laravel.com/) and the front-end uses [React](https://reactjs.org/). It uses the [Ookla's speedtest cli](https://www.speedtest.net/apps/cli) package to get the data and uses [Chart.js](https://www.chartjs.org/) to plot the results.
|
||||
|
||||
@@ -27,9 +27,6 @@ docker create \
|
||||
--name=speedtest \
|
||||
-p 8765:80 \
|
||||
-v /path/to/data:/config \
|
||||
-e SLACK_WEBHOOK=webhook `#optional` \
|
||||
-e PUID=uid `#optional` \
|
||||
-e PGID=gid `#optional` \
|
||||
-e OOKLA_EULA_GDPR=true \
|
||||
--restart unless-stopped \
|
||||
henrywhitaker3/speedtest-tracker
|
||||
@@ -42,7 +39,7 @@ version: '3.3'
|
||||
services:
|
||||
speedtest:
|
||||
container_name: speedtest
|
||||
image: henrywhitaker3/speedtest-tracker:dev
|
||||
image: henrywhitaker3/speedtest-tracker
|
||||
ports:
|
||||
- 8765:80
|
||||
volumes:
|
||||
@@ -51,17 +48,24 @@ services:
|
||||
- TZ=
|
||||
- PGID=
|
||||
- PUID=
|
||||
- SLACK_WEBHOOK=
|
||||
- BASE_PATH=/speedtest
|
||||
- OOKLA_EULA_GDPR=true
|
||||
logging:
|
||||
driver: json-file
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-file: 10
|
||||
max-size: 200k
|
||||
max-file: "10"
|
||||
max-size: "200k"
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
#### Images
|
||||
|
||||
There are 2 different docker images:
|
||||
|
||||
| Tag | Description |
|
||||
| :----: | --- |
|
||||
| latest | This is the stable release of the app |
|
||||
| dev | This release has more features, although could have some bugs |
|
||||
|
||||
#### Parameters
|
||||
|
||||
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
|
||||
@@ -79,96 +83,4 @@ Container images are configured using parameters passed at runtime (such as thos
|
||||
|
||||
### Manual Install
|
||||
|
||||
#### Installing Dependencies
|
||||
|
||||
This program has some dependencies, to install them you need to run the following:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt update
|
||||
sudo apt install php-common php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline php-xml php-sqlite3 php-zip php-mbstring composer python3 python3-pip git
|
||||
```
|
||||
```bash
|
||||
sudo apt install curl
|
||||
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
|
||||
sudo apt install nodejs
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo pip3 install speedtest-cli
|
||||
```
|
||||
|
||||
Then, download the code by running:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/henrywhitaker3/Speedtest-Tracker.git
|
||||
```
|
||||
|
||||
Install the composer and npm dependencies:
|
||||
|
||||
```bash
|
||||
composer install
|
||||
npm install && npm run production
|
||||
```
|
||||
|
||||
#### Setting up the database
|
||||
|
||||
Run the following to set your database variables:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Then update the `DB_DATABASE` value with the absolute path of your install, followed by `/database/speed.db`.
|
||||
|
||||
Finally, run the following to setup the tables in the database:
|
||||
|
||||
```bash
|
||||
php artisan key:generate
|
||||
php artisan migrate
|
||||
```
|
||||
|
||||
Now run the following to make sure everything has been setup properly (it should output a speedtest result):
|
||||
|
||||
```bash
|
||||
php artisan speedtest:run
|
||||
```
|
||||
|
||||
#### Scheduling Setup
|
||||
|
||||
To get speed test results every hour, you need to add a cronjob, run `sudo crontab -e` and add an entry with the following (with the path you your install):
|
||||
|
||||
```bash
|
||||
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
#### Queue Setup
|
||||
|
||||
```bash
|
||||
sudo apt install supervisor
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo vim /etc/supervisor/conf.d/laravel-worker.conf
|
||||
```
|
||||
|
||||
Add the following, updating the `command` and user `values`:
|
||||
|
||||
```bash
|
||||
[program:laravel-worker]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=php /path/to/project/artisan queue:work
|
||||
autostart=true
|
||||
autorestart=true
|
||||
user=<user>
|
||||
numprocs=8
|
||||
redirect_stderr=true
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
```bash
|
||||
sudo supervisorctl reread
|
||||
sudo supervisorctl update
|
||||
sudo supervisorctl restart all
|
||||
```
|
||||
For manual installtions, please follow the instrucitons [here](https://github.com/henrywhitaker3/Speedtest-Tracker/wiki/Manual-Installation).
|
||||
|
||||
43
app/Console/Commands/AcceptEULACommand.php
Normal file
43
app/Console/Commands/AcceptEULACommand.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use PhpParser\Node\Expr\ShellExec;
|
||||
|
||||
class AcceptEULACommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'speedtest:eula';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Accept the Ookla EULA and GDPR agreements.';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
shell_exec(config('speedtest.home') . ' && ' . app_path() . '/Bin/speedtest --accept-license --accept-gdpr');
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,10 @@ class SpeedtestHelper {
|
||||
public static function output()
|
||||
{
|
||||
$server = SettingsHelper::get('server')['value'];
|
||||
|
||||
$binPath = app_path() . DIRECTORY_SEPARATOR . 'Bin' . DIRECTORY_SEPARATOR . 'speedtest';
|
||||
$homePrefix = config('speedtest.home') . ' && ';
|
||||
|
||||
if($server != '' && $server != false) {
|
||||
$server = explode(',', $server);
|
||||
$server = $server[array_rand($server)];
|
||||
@@ -87,10 +90,10 @@ class SpeedtestHelper {
|
||||
return false;
|
||||
}
|
||||
|
||||
return shell_exec($binPath . ' -f json -s ' . $server);
|
||||
return shell_exec($homePrefix . $binPath . ' -f json -s ' . $server);
|
||||
}
|
||||
|
||||
return shell_exec($binPath . ' -f json');
|
||||
return shell_exec($homePrefix . $binPath . ' -f json');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"1.7.15": [
|
||||
{
|
||||
"description": "Updates for manual installs.",
|
||||
"link": ""
|
||||
}
|
||||
],
|
||||
"1.7.14": [
|
||||
{
|
||||
"description": "Updated dependencies.",
|
||||
|
||||
@@ -7,7 +7,23 @@ return [
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'version' => '1.7.14',
|
||||
'version' => '1.7.15',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Installation type
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'install' => 'manual',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Path for HOME variable
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'home' => 'HOME=' . base_path() . DIRECTORY_SEPARATOR,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user