Compare commits

..

4 Commits

Author SHA1 Message Date
Henry Whitaker
0b8c633a75 Merge pull request #300 from henrywhitaker3/dev 2020-09-05 01:17:57 +01:00
Henry Whitaker
212c7a99bf Update README.md 2020-08-30 19:00:31 +01:00
Henry Whitaker
3dc494b02e Update README.md 2020-08-27 00:30:31 +01:00
Henry Whitaker
478c209bb2 Create docker-image-pr.yml 2020-08-15 17:34:44 +01:00
18 changed files with 265 additions and 466 deletions

16
.github/workflows/docker-image-pr.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: DockerPR
on:
pull_request:
branches: [ docker, dev-docker, alpha-docker ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)

View File

@@ -1,6 +1,6 @@
# Speedtest Tracker
[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.8-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE)
[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.6-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](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.

View File

@@ -7,8 +7,7 @@ use App\Setting;
use Cache;
use Carbon\Carbon;
class SettingsHelper
{
class SettingsHelper {
/**
* Get a Setting object by name
@@ -20,9 +19,9 @@ class SettingsHelper
{
$name = Setting::where('name', $name)->get();
if (sizeof($name) == 0) {
if(sizeof($name) == 0) {
return false;
} else if (sizeof($name) == 1) {
} else if(sizeof($name) == 1) {
return $name[0];
} else {
$name = $name->keyBy('name');
@@ -41,11 +40,11 @@ class SettingsHelper
{
$setting = SettingsHelper::get($name);
if ($value === false) {
if($value === false) {
$value = "0";
}
if ($setting !== false) {
if($setting !== false) {
$setting->value = $value;
$setting->save();
} else {
@@ -55,7 +54,7 @@ class SettingsHelper
]);
}
if ($name == 'show_failed_tests_on_graph') {
if($name == 'show_failed_tests_on_graph') {
Cache::flush();
}
@@ -70,13 +69,13 @@ class SettingsHelper
public static function getBase()
{
$base = env('BASE_PATH', '/');
if ($base == '') {
if($base == '') {
$base = '/';
} else {
if ($base[0] != '/') {
if($base[0] != '/') {
$base = '/' . $base;
}
if ($base[-1] != '/') {
if($base[-1] != '/') {
$base = $base . '/';
}
}
@@ -96,7 +95,7 @@ class SettingsHelper
// Try exact key
$val = exec('echo $' . $key);
if ($val == "") {
if($val == "") {
array_push($results, true);
} else {
array_push($results, false);
@@ -105,25 +104,25 @@ class SettingsHelper
// Try key all caps
$val = exec('echo $' . strtoupper($key));
if ($val == "") {
if($val == "") {
array_push($results, true);
} else {
array_push($results, false);
}
if (env($key, false) == false) {
if(env($key, false) == false) {
array_push($results, true);
} else {
array_push($results, false);
}
if (env(strtoupper($key), false) == false) {
if(env(strtoupper($key), false) == false) {
array_push($results, true);
} else {
array_push($results, false);
}
if (in_array(false, $results)) {
if(in_array(false, $results)) {
return false;
}
@@ -139,11 +138,6 @@ class SettingsHelper
{
return [
'base' => SettingsHelper::getBase(),
'widgets' => [
'show_average' => (bool)SettingsHelper::get('show_average')->value,
'show_max' => (bool)SettingsHelper::get('show_max')->value,
'show_min' => (bool)SettingsHelper::get('show_min')->value,
],
'graphs' => [
'download_upload_graph_enabled' => SettingsHelper::get('download_upload_graph_enabled'),
'download_upload_graph_width' => SettingsHelper::get('download_upload_graph_width'),
@@ -169,15 +163,15 @@ class SettingsHelper
*/
public static function testNotification($agent = true)
{
$agents = ['slack', 'telegram'];
$agents = [ 'slack', 'telegram' ];
if ($agent === true) {
if($agent === true) {
event(new TestNotificationEvent($agents));
return true;
}
if (in_array($agent, $agents)) {
event(new TestNotificationEvent([$agent]));
if(in_array($agent, $agents)) {
event(new TestNotificationEvent([ $agent ]));
return true;
}
@@ -194,14 +188,14 @@ class SettingsHelper
'telegram_chat_id' => SettingsHelper::get('telegram_chat_id')->value,
];
foreach ($settings as $key => $value) {
foreach($settings as $key => $value) {
$key = 'integrations.' . $key;
if ($value === "") {
if($value === "") {
$value = null;
}
config()->set([$key => $value]);
config()->set([ $key => $value ]);
}
}
}

View File

@@ -18,9 +18,9 @@ class SpeedtestController extends Controller
{
public function __construct()
{
if ((bool)SettingsHelper::get('auth')->value === true) {
if((bool)SettingsHelper::get('auth')->value === true) {
$this->middleware('auth:api')
->only(['run', 'delete', 'deleteAll']);
->only([ 'run', 'delete', 'deleteAll' ]);
}
}
@@ -32,7 +32,7 @@ class SpeedtestController extends Controller
public function index()
{
$data = Speedtest::orderBy('created_at', 'desc')
->paginate();
->paginate();
return response()->json([
'method' => 'index of speedtests',
@@ -49,12 +49,12 @@ class SpeedtestController extends Controller
public function time($days)
{
$rule = [
'days' => ['required', 'integer'],
'days' => [ 'required', 'integer' ],
];
$validator = Validator::make(['days' => $days], $rule);
$validator = Validator::make([ 'days' => $days ], $rule);
if ($validator->fails()) {
if($validator->fails()) {
return response()->json([
'method' => 'get speedtests in last x days',
'error' => $validator->errors(),
@@ -65,16 +65,16 @@ class SpeedtestController extends Controller
$data = Cache::remember('speedtest-days-' . $days, $ttl, function () use ($days) {
$showFailed = (bool)SettingsHelper::get('show_failed_tests_on_graph')->value;
if ($showFailed === true) {
if($showFailed === true) {
return Speedtest::where('created_at', '>=', Carbon::now()->subDays($days))
->orderBy('created_at', 'asc')
->get();
->orderBy('created_at', 'asc')
->get();
}
return Speedtest::where('created_at', '>=', Carbon::now()->subDays($days))
->where('failed', false)
->orderBy('created_at', 'asc')
->get();
->where('failed', false)
->orderBy('created_at', 'asc')
->get();
});
return response()->json([
@@ -93,12 +93,12 @@ class SpeedtestController extends Controller
public function fail($days)
{
$rule = [
'days' => ['required', 'integer'],
'days' => [ 'required', 'integer' ],
];
$validator = Validator::make(['days' => $days], $rule);
$validator = Validator::make([ 'days' => $days ], $rule);
if ($validator->fails()) {
if($validator->fails()) {
return response()->json([
'method' => 'get speedtests in last x days',
'error' => $validator->errors(),
@@ -122,38 +122,20 @@ class SpeedtestController extends Controller
public function latest()
{
$data = SpeedtestHelper::latest();
$avg = Speedtest::select(DB::raw('AVG(ping) as ping, AVG(download) as download, AVG(upload) as upload'))
->where('failed', false)
->get();
$max = Speedtest::select(DB::raw('MAX(ping) as ping, MAX(download) as download, MAX(upload) as upload'))
->where('failed', false)
->get();
$response = [
'method' => 'get latest speedtest',
'data' => $data,
];
if (SettingsHelper::get('show_average')) {
$avg = Speedtest::select(DB::raw('AVG(ping) as ping, AVG(download) as download, AVG(upload) as upload'))
->where('failed', false)
->first()
->toArray();
$response['average'] = $avg;
}
if (SettingsHelper::get('show_max')) {
$max = Speedtest::select(DB::raw('MAX(ping) as ping, MAX(download) as download, MAX(upload) as upload'))
->where('failed', false)
->first()
->toArray();
$response['maximum'] = $max;
}
if (SettingsHelper::get('show_min')) {
$min = Speedtest::select(DB::raw('MIN(ping) as ping, MIN(download) as download, MIN(upload) as upload'))
->where('failed', false)
->first()
->toArray();
$response['minimum'] = $min;
}
if ($data) {
return response()->json($response, 200);
if($data) {
return response()->json([
'method' => 'get latest speedtest',
'data' => $data,
'average' => $avg[0],
'max' => $max[0],
], 200);
} else {
return response()->json([
'method' => 'get latest speedtest',
@@ -176,7 +158,7 @@ class SpeedtestController extends Controller
'method' => 'run speedtest',
'data' => 'a new speedtest has been added to the queue'
], 200);
} catch (Exception $e) {
} catch(Exception $e) {
return response()->json([
'method' => 'run speedtest',
'error' => $e
@@ -193,7 +175,7 @@ class SpeedtestController extends Controller
{
$ret = SpeedtestHelper::deleteAll();
if ($ret['success']) {
if($ret['success']) {
return response()->json([
'method' => 'delete all speedtests from the database',
'success' => true

View File

@@ -1,24 +1,4 @@
{
"1.9.8": [
{
"description": "Fixed bug with minimum display setting.",
"link": ""
}
],
"1.9.7": [
{
"description": "Added option to display minimum values on the top widgets.",
"link": ""
},
{
"description": "New general settings section.",
"link": ""
},
{
"description": "Updated dependencies.",
"link": ""
}
],
"1.9.6": [
{
"description": "Clear the cache on restore.",

View File

@@ -15,7 +15,7 @@
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0",
"henrywhitaker3/healthchecks-io": "^1.0",
"laravel-notification-channels/telegram": "^0.5.0",
"laravel-notification-channels/telegram": "^0.4.0",
"laravel/framework": "^7.0",
"laravel/slack-notification-channel": "^2.0",
"laravel/tinker": "^2.0",

313
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "5a60bc84653bdfda71c28e1264ed84e3",
"content-hash": "94fffe1900e25fd9ab781c8dd9ebab35",
"packages": [
{
"name": "asm89/stack-cors",
@@ -661,16 +661,16 @@
},
{
"name": "egulias/email-validator",
"version": "2.1.20",
"version": "2.1.19",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f46887bc48db66c7f38f668eb7d6ae54583617ff"
"reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f46887bc48db66c7f38f668eb7d6ae54583617ff",
"reference": "f46887bc48db66c7f38f668eb7d6ae54583617ff",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/840d5603eb84cc81a6a0382adac3293e57c1c64c",
"reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c",
"shasum": ""
},
"require": {
@@ -715,7 +715,7 @@
"validation",
"validator"
],
"time": "2020-09-06T13:44:32+00:00"
"time": "2020-08-08T21:28:19+00:00"
},
{
"name": "fideloper/proxy",
@@ -773,30 +773,33 @@
},
{
"name": "fruitcake/laravel-cors",
"version": "v2.0.2",
"version": "v2.0.1",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/laravel-cors.git",
"reference": "4b19bfc3bd422948af37a42a62fad7f49025894a"
"reference": "dbfc311b25d4873c3c2382b26860be3567492bd6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/4b19bfc3bd422948af37a42a62fad7f49025894a",
"reference": "4b19bfc3bd422948af37a42a62fad7f49025894a",
"url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/dbfc311b25d4873c3c2382b26860be3567492bd6",
"reference": "dbfc311b25d4873c3c2382b26860be3567492bd6",
"shasum": ""
},
"require": {
"asm89/stack-cors": "^2.0.1",
"illuminate/contracts": "^6|^7|^8",
"illuminate/support": "^6|^7|^8",
"php": ">=7.2",
"symfony/http-foundation": "^4|^5",
"symfony/http-kernel": "^4.3.4|^5"
"illuminate/contracts": "^5.6|^6.0|^7.0|^8.0",
"illuminate/support": "^5.6|^6.0|^7.0|^8.0",
"php": ">=7.1",
"symfony/http-foundation": "^4.0|^5.0",
"symfony/http-kernel": "^4.0|^5.0"
},
"require-dev": {
"laravel/framework": "^6|^7|^8",
"orchestra/testbench-dusk": "^4|^5|^6",
"phpunit/phpunit": "^6|^7|^8",
"laravel/framework": "^5.5|^6.0|^7.0|^8.0",
"orchestra/dusk-updater": "^1.2",
"orchestra/testbench": "^3.5|^4.0|^5.0|^6.0",
"orchestra/testbench-dusk": "^5.1",
"phpro/grumphp": "^0.16|^0.17",
"phpunit/phpunit": "^6.0|^7.0|^8.0",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
@@ -842,7 +845,7 @@
"type": "github"
}
],
"time": "2020-09-07T11:48:52+00:00"
"time": "2020-05-31T07:30:16+00:00"
},
{
"name": "guzzlehttp/guzzle",
@@ -1100,23 +1103,23 @@
},
{
"name": "laravel-notification-channels/telegram",
"version": "0.5.0",
"version": "0.4.1",
"source": {
"type": "git",
"url": "https://github.com/laravel-notification-channels/telegram.git",
"reference": "c1e12a953ecb5fec0c285bc74950028ddd085fc0"
"reference": "55a9d8bce07f456e0c675909dba9b21acda376d6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-notification-channels/telegram/zipball/c1e12a953ecb5fec0c285bc74950028ddd085fc0",
"reference": "c1e12a953ecb5fec0c285bc74950028ddd085fc0",
"url": "https://api.github.com/repos/laravel-notification-channels/telegram/zipball/55a9d8bce07f456e0c675909dba9b21acda376d6",
"reference": "55a9d8bce07f456e0c675909dba9b21acda376d6",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/guzzle": "^6.2 || ^7.0",
"illuminate/notifications": "^5.5 || ^6.0 || ^7.0 || ^8.0",
"illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0",
"illuminate/notifications": "^5.5 || ^6.0 || ^7.0",
"illuminate/support": "^5.5 || ^6.0 || ^7.0",
"php": ">=7.1"
},
"require-dev": {
@@ -1157,20 +1160,20 @@
"telegram notification",
"telegram notifications channel"
],
"time": "2020-09-07T19:29:19+00:00"
"time": "2020-07-06T19:01:02+00:00"
},
{
"name": "laravel/framework",
"version": "v7.28.1",
"version": "v7.27.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "f7493ab717ca2a9598b1db2d6a3bae8ac8c755e8"
"reference": "17777a92da9b3cf0026f26462d289d596420e6d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/f7493ab717ca2a9598b1db2d6a3bae8ac8c755e8",
"reference": "f7493ab717ca2a9598b1db2d6a3bae8ac8c755e8",
"url": "https://api.github.com/repos/laravel/framework/zipball/17777a92da9b3cf0026f26462d289d596420e6d0",
"reference": "17777a92da9b3cf0026f26462d289d596420e6d0",
"shasum": ""
},
"require": {
@@ -1315,7 +1318,7 @@
"framework",
"laravel"
],
"time": "2020-09-09T15:02:46+00:00"
"time": "2020-09-01T13:41:48+00:00"
},
{
"name": "laravel/slack-notification-channel",
@@ -1440,16 +1443,16 @@
},
{
"name": "laravel/ui",
"version": "v2.3.0",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
"reference": "2ccaa3b821ea8ac7e05393b946d0578bdb46099b"
"reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/ui/zipball/2ccaa3b821ea8ac7e05393b946d0578bdb46099b",
"reference": "2ccaa3b821ea8ac7e05393b946d0578bdb46099b",
"url": "https://api.github.com/repos/laravel/ui/zipball/fb1404f04ece6eee128e3fb750d3a1e064238b33",
"reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33",
"shasum": ""
},
"require": {
@@ -1491,20 +1494,20 @@
"laravel",
"ui"
],
"time": "2020-09-09T12:07:59+00:00"
"time": "2020-08-25T18:30:43+00:00"
},
{
"name": "lcobucci/jwt",
"version": "3.3.3",
"version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/lcobucci/jwt.git",
"reference": "c1123697f6a2ec29162b82f170dd4a491f524773"
"reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773",
"reference": "c1123697f6a2ec29162b82f170dd4a491f524773",
"url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18",
"reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18",
"shasum": ""
},
"require": {
@@ -1546,17 +1549,7 @@
"JWS",
"jwt"
],
"funding": [
{
"url": "https://github.com/lcobucci",
"type": "github"
},
{
"url": "https://www.patreon.com/lcobucci",
"type": "patreon"
}
],
"time": "2020-08-20T13:22:28+00:00"
"time": "2019-05-24T18:30:49+00:00"
},
{
"name": "league/commonmark",
@@ -1951,16 +1944,16 @@
},
{
"name": "nesbot/carbon",
"version": "2.39.1",
"version": "2.39.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "7af467873250583cc967a59ee9df29fabab193c1"
"reference": "0a41ea7f7fedacf307b7a339800e10356a042918"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7af467873250583cc967a59ee9df29fabab193c1",
"reference": "7af467873250583cc967a59ee9df29fabab193c1",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0a41ea7f7fedacf307b7a339800e10356a042918",
"reference": "0a41ea7f7fedacf307b7a339800e10356a042918",
"shasum": ""
},
"require": {
@@ -1973,7 +1966,7 @@
"doctrine/orm": "^2.7",
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
"kylekatarnls/multi-tester": "^2.0",
"phpmd/phpmd": "^2.9",
"phpmd/phpmd": "^2.8",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.35",
"phpunit/phpunit": "^7.5 || ^8.0",
@@ -2036,7 +2029,7 @@
"type": "tidelift"
}
],
"time": "2020-09-04T13:11:37+00:00"
"time": "2020-08-24T12:35:58+00:00"
},
{
"name": "nikic/php-parser",
@@ -2092,16 +2085,16 @@
},
{
"name": "opis/closure",
"version": "3.5.7",
"version": "3.5.6",
"source": {
"type": "git",
"url": "https://github.com/opis/closure.git",
"reference": "4531e53afe2fc660403e76fb7644e95998bff7bf"
"reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opis/closure/zipball/4531e53afe2fc660403e76fb7644e95998bff7bf",
"reference": "4531e53afe2fc660403e76fb7644e95998bff7bf",
"url": "https://api.github.com/repos/opis/closure/zipball/e8d34df855b0a0549a300cb8cb4db472556e8aa9",
"reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9",
"shasum": ""
},
"require": {
@@ -2149,7 +2142,7 @@
"serialization",
"serialize"
],
"time": "2020-09-06T17:02:15+00:00"
"time": "2020-08-11T08:46:50+00:00"
},
{
"name": "paragonie/random_compat",
@@ -3084,16 +3077,16 @@
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.2.0",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
"reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14",
"reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14",
"shasum": ""
},
"require": {
@@ -3102,7 +3095,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -3144,7 +3137,7 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2020-06-06T08:49:21+00:00"
},
{
"name": "symfony/error-handler",
@@ -3305,16 +3298,16 @@
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v2.2.0",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "0ba7d54483095a198fa51781bc608d17e84dffa2"
"reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2",
"reference": "0ba7d54483095a198fa51781bc608d17e84dffa2",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b",
"reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b",
"shasum": ""
},
"require": {
@@ -3327,7 +3320,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -3377,7 +3370,7 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2020-07-06T13:23:11+00:00"
},
{
"name": "symfony/finder",
@@ -4183,16 +4176,16 @@
},
{
"name": "symfony/polyfill-php56",
"version": "v1.18.1",
"version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
"reference": "13df84e91cd168f247c2f2ec82cc0fa24901c011"
"reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/13df84e91cd168f247c2f2ec82cc0fa24901c011",
"reference": "13df84e91cd168f247c2f2ec82cc0fa24901c011",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/d51ec491c8ddceae7dca8dd6c7e30428f543f37d",
"reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d",
"shasum": ""
},
"require": {
@@ -4202,11 +4195,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"dev-master": "1.15-dev"
}
},
"autoload": {
@@ -4253,7 +4242,7 @@
"type": "tidelift"
}
],
"time": "2020-07-14T12:35:20+00:00"
"time": "2020-03-09T19:04:49+00:00"
},
{
"name": "symfony/polyfill-php70",
@@ -4563,16 +4552,16 @@
},
{
"name": "symfony/polyfill-util",
"version": "v1.18.1",
"version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "46b910c71e9828f8ec2aa7a0314de1130d9b295a"
"reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/46b910c71e9828f8ec2aa7a0314de1130d9b295a",
"reference": "46b910c71e9828f8ec2aa7a0314de1130d9b295a",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/d8e76c104127675d0ea3df3be0f2ae24a8619027",
"reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027",
"shasum": ""
},
"require": {
@@ -4581,11 +4570,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"dev-master": "1.15-dev"
}
},
"autoload": {
@@ -4629,7 +4614,7 @@
"type": "tidelift"
}
],
"time": "2020-07-14T12:35:20+00:00"
"time": "2020-03-02T11:55:35+00:00"
},
{
"name": "symfony/process",
@@ -4789,16 +4774,16 @@
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
"reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
"reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
"shasum": ""
},
"require": {
@@ -4811,7 +4796,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -4861,7 +4846,7 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2020-07-06T13:23:11+00:00"
},
{
"name": "symfony/string",
@@ -5042,16 +5027,16 @@
},
{
"name": "symfony/translation-contracts",
"version": "v2.2.0",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "77ce1c3627c9f39643acd9af086631f842c50c4d"
"reference": "616a9773c853097607cf9dd6577d5b143ffdcd63"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/77ce1c3627c9f39643acd9af086631f842c50c4d",
"reference": "77ce1c3627c9f39643acd9af086631f842c50c4d",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63",
"reference": "616a9773c853097607cf9dd6577d5b143ffdcd63",
"shasum": ""
},
"require": {
@@ -5063,7 +5048,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -5113,7 +5098,7 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2020-07-06T13:23:11+00:00"
},
{
"name": "symfony/var-dumper",
@@ -5256,32 +5241,32 @@
},
{
"name": "tymon/jwt-auth",
"version": "1.0.1",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/tymondesigns/jwt-auth.git",
"reference": "b927137cd5bd4d2f5d48a1ca71bc85006b99dbae"
"reference": "d4cf9fd2b98790712d3e6cd1094e5ff018431f19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/b927137cd5bd4d2f5d48a1ca71bc85006b99dbae",
"reference": "b927137cd5bd4d2f5d48a1ca71bc85006b99dbae",
"url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/d4cf9fd2b98790712d3e6cd1094e5ff018431f19",
"reference": "d4cf9fd2b98790712d3e6cd1094e5ff018431f19",
"shasum": ""
},
"require": {
"illuminate/auth": "^5.2|^6|^7|^8",
"illuminate/contracts": "^5.2|^6|^7|^8",
"illuminate/http": "^5.2|^6|^7|^8",
"illuminate/support": "^5.2|^6|^7|^8",
"illuminate/auth": "^5.2|^6|^7",
"illuminate/contracts": "^5.2|^6|^7",
"illuminate/http": "^5.2|^6|^7",
"illuminate/support": "^5.2|^6|^7",
"lcobucci/jwt": "^3.2",
"namshi/jose": "^7.0",
"nesbot/carbon": "^1.0|^2.0",
"php": "^5.5.9|^7.0"
},
"require-dev": {
"illuminate/console": "^5.2|^6|^7|^8",
"illuminate/database": "^5.2|^6|^7|^8",
"illuminate/routing": "^5.2|^6|^7|^8",
"illuminate/console": "^5.2|^6|^7",
"illuminate/database": "^5.2|^6|^7",
"illuminate/routing": "^5.2|^6|^7",
"mockery/mockery": ">=0.9.9",
"phpunit/phpunit": "~4.8|~6.0"
},
@@ -5332,7 +5317,7 @@
"type": "patreon"
}
],
"time": "2020-09-08T12:29:20+00:00"
"time": "2020-03-04T11:21:28+00:00"
},
{
"name": "vlucas/phpdotenv",
@@ -5482,43 +5467,42 @@
"packages-dev": [
{
"name": "barryvdh/laravel-ide-helper",
"version": "v2.8.1",
"version": "v2.8.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "affa55122f83575888d4ebf1728992686e8223de"
"reference": "ba95d18ef55c91295250ae8b7bfa73d8fb866b9b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/affa55122f83575888d4ebf1728992686e8223de",
"reference": "affa55122f83575888d4ebf1728992686e8223de",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/ba95d18ef55c91295250ae8b7bfa73d8fb866b9b",
"reference": "ba95d18ef55c91295250ae8b7bfa73d8fb866b9b",
"shasum": ""
},
"require": {
"barryvdh/reflection-docblock": "^2.0.6",
"composer/composer": "^1.6 || ^2.0@dev",
"doctrine/dbal": "~2.3",
"ext-json": "*",
"illuminate/console": "^6 || ^7 || ^8",
"illuminate/filesystem": "^6 || ^7 || ^8",
"illuminate/support": "^6 || ^7 || ^8",
"illuminate/console": "^5.5 || ^6 || ^7",
"illuminate/filesystem": "^5.5 || ^6 || ^7",
"illuminate/support": "^5.5 || ^6 || ^7",
"php": ">=7.2",
"phpdocumentor/type-resolver": "^1.1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2",
"illuminate/config": "^6 || ^7 || ^8",
"illuminate/view": "^6 || ^7 || ^8",
"illuminate/config": "^5.5 || ^6 || ^7",
"illuminate/view": "^5.5 || ^6 || ^7",
"mockery/mockery": "^1.3",
"orchestra/testbench": "^4 || ^5 || ^6",
"phpunit/phpunit": "^8.5 || ^9",
"orchestra/testbench": "^3.5 || ^4 || ^5",
"phpro/grumphp": "^0.19.0",
"spatie/phpunit-snapshot-assertions": "^1.4 || ^2.2 || ^3",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^3.12"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
"dev-master": "2.7-dev"
},
"laravel": {
"providers": [
@@ -5559,7 +5543,7 @@
"type": "github"
}
],
"time": "2020-09-07T07:36:37+00:00"
"time": "2020-08-10T08:22:48+00:00"
},
{
"name": "barryvdh/reflection-docblock",
@@ -6039,21 +6023,21 @@
},
{
"name": "facade/flare-client-php",
"version": "1.3.5",
"version": "1.3.4",
"source": {
"type": "git",
"url": "https://github.com/facade/flare-client-php.git",
"reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8"
"reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/25907a113bfc212a38d458ae365bfb902b4e7fb8",
"reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8",
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/0eeb0de4fc1078433f0915010bd8f41e998adcb4",
"reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4",
"shasum": ""
},
"require": {
"facade/ignition-contracts": "~1.0",
"illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
"illuminate/pipeline": "^5.5|^6.0|^7.0",
"php": "^7.1",
"symfony/http-foundation": "^3.3|^4.1|^5.0",
"symfony/mime": "^3.4|^4.0|^5.1",
@@ -6097,20 +6081,20 @@
"type": "github"
}
],
"time": "2020-08-26T18:06:23+00:00"
"time": "2020-07-13T23:25:57+00:00"
},
{
"name": "facade/ignition",
"version": "2.3.7",
"version": "2.3.6",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
"reference": "b364db8860a63c1fb58b72b9718863c21df08762"
"reference": "d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/ignition/zipball/b364db8860a63c1fb58b72b9718863c21df08762",
"reference": "b364db8860a63c1fb58b72b9718863c21df08762",
"url": "https://api.github.com/repos/facade/ignition/zipball/d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81",
"reference": "d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81",
"shasum": ""
},
"require": {
@@ -6129,7 +6113,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.14",
"mockery/mockery": "^1.3",
"orchestra/testbench": "^5.0|^6.0",
"orchestra/testbench": "5.0",
"psalm/plugin-laravel": "^1.2"
},
"suggest": {
@@ -6169,7 +6153,7 @@
"laravel",
"page"
],
"time": "2020-09-06T19:26:27+00:00"
"time": "2020-08-10T13:50:38+00:00"
},
{
"name": "facade/ignition-contracts",
@@ -6838,25 +6822,25 @@
},
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-2.x": "2.x-dev"
"dev-master": "2.x-dev"
}
},
"autoload": {
@@ -6883,7 +6867,7 @@
"reflection",
"static analysis"
],
"time": "2020-06-27T09:03:43+00:00"
"time": "2020-04-27T09:25:28+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
@@ -6940,24 +6924,25 @@
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.3.0",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "e878a14a65245fbe78f8080eba03b47c3b705651"
"reference": "30441f2752e493c639526b215ed81d54f369d693"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651",
"reference": "e878a14a65245fbe78f8080eba03b47c3b705651",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/30441f2752e493c639526b215ed81d54f369d693",
"reference": "30441f2752e493c639526b215ed81d54f369d693",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"php": "^7.2",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*"
"ext-tokenizer": "^7.2",
"mockery/mockery": "~1"
},
"type": "library",
"extra": {
@@ -6981,7 +6966,7 @@
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"time": "2020-06-27T10:12:23+00:00"
"time": "2020-06-19T20:22:09+00:00"
},
{
"name": "phpspec/prophecy",
@@ -7450,16 +7435,16 @@
},
{
"name": "scrivo/highlight.php",
"version": "v9.18.1.2",
"version": "v9.18.1.1",
"source": {
"type": "git",
"url": "https://github.com/scrivo/highlight.php.git",
"reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9"
"reference": "52fc21c99fd888e33aed4879e55a3646f8d40558"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/efb6e445494a9458aa59b0af5edfa4bdcc6809d9",
"reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9",
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/52fc21c99fd888e33aed4879e55a3646f8d40558",
"reference": "52fc21c99fd888e33aed4879e55a3646f8d40558",
"shasum": ""
},
"require": {
@@ -7521,7 +7506,7 @@
"type": "github"
}
],
"time": "2020-08-27T03:24:44+00:00"
"time": "2020-03-02T05:59:21+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",

View File

@@ -7,7 +7,7 @@ return [
|--------------------------------------------------------------------------
*/
'version' => '1.9.8',
'version' => '1.9.6',
/*
|--------------------------------------------------------------------------

View File

@@ -1,56 +0,0 @@
<?php
use App\Helpers\SettingsHelper;
use App\Setting;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddWidgetCardSettings extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if (!SettingsHelper::get('show_average')) {
Setting::create([
'name' => 'show_average',
'value' => true,
'description' => 'If enabled, the average value for speedtests will be shown in the widgets.'
]);
}
if (!SettingsHelper::get('show_max')) {
Setting::create([
'name' => 'show_max',
'value' => true,
'description' => 'If enabled, the maximum value for speedtests will be shown in the widgets.'
]);
}
if (!SettingsHelper::get('show_min')) {
Setting::create([
'name' => 'show_min',
'value' => true,
'description' => 'If enabled, the minimum value for speedtests will be shown in the widgets.'
]);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Setting::whereIn('name', [
'show_average',
'show_max',
'show_min',
])->delete();
}
}

25
package-lock.json generated
View File

@@ -9032,24 +9032,18 @@
}
},
"sass-loader": {
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.2.tgz",
"integrity": "sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg==",
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz",
"integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==",
"dev": true,
"requires": {
"klona": "^2.0.3",
"loader-utils": "^2.0.0",
"neo-async": "^2.6.2",
"schema-utils": "^2.7.1",
"schema-utils": "^2.7.0",
"semver": "^7.3.2"
},
"dependencies": {
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -9061,17 +9055,6 @@
"json5": "^2.1.2"
}
},
"schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
}
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",

View File

@@ -22,7 +22,7 @@
"react-dom": "^16.2.0",
"resolve-url-loader": "^3.1.0",
"sass": "^1.26.10",
"sass-loader": "^10.0.2"
"sass-loader": "^10.0.1"
},
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.10.4",

2
public/js/app.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -131,7 +131,9 @@ export default class LatestResults extends Component {
>
<Widget
title="Ping"
data={data}
value={parseFloat(data.data.ping).toFixed(1)}
avg={parseFloat(data.average.ping).toFixed(1)}
max={parseFloat(data.max.ping).toFixed(1)}
failed={data.data.failed}
unit="ms"
icon="ping"
@@ -145,7 +147,9 @@ export default class LatestResults extends Component {
>
<Widget
title="Download"
data={data}
value={parseFloat(data.data.download).toFixed(1)}
avg={parseFloat(data.average.download).toFixed(1)}
max={parseFloat(data.max.download).toFixed(1)}
failed={data.data.failed}
unit="Mbit/s"
icon="dl"
@@ -159,7 +163,9 @@ export default class LatestResults extends Component {
>
<Widget
title="Upload"
data={data}
value={parseFloat(data.data.upload).toFixed(1)}
avg={parseFloat(data.average.upload).toFixed(1)}
max={parseFloat(data.max.upload).toFixed(1)}
failed={data.data.failed}
unit="Mbit/s"
icon="ul"

View File

@@ -8,88 +8,38 @@ export default class Widget extends Component {
this.state = {
title: this.props.title,
value: this.props.value,
unit: this.props.unit,
icon: this.props.icon,
avg: this.props.avg,
max: this.props.max,
failed: this.props.failed,
data: this.props.data
}
}
parseData(title, data) {
var returnData = {};
if(title == 'Ping') {
returnData.value = parseFloat(data.data.ping).toFixed(1);
if(window.config.widgets.show_average) {
returnData.avg = parseFloat(data.average.ping).toFixed(1);
}
if(window.config.widgets.show_max) {
returnData.max = parseFloat(data.maximum.ping).toFixed(1);
}
if(window.config.widgets.show_min) {
returnData.min = parseFloat(data.minimum.ping).toFixed(1);
}
}
if(title == 'Upload') {
returnData.value = parseFloat(data.data.upload).toFixed(1);
if(window.config.widgets.show_average) {
returnData.avg = parseFloat(data.average.upload).toFixed(1);
}
if(window.config.widgets.show_max) {
returnData.max = parseFloat(data.maximum.upload).toFixed(1);
}
if(window.config.widgets.show_min) {
returnData.min = parseFloat(data.minimum.upload).toFixed(1);
}
}
if(title == 'Download') {
returnData.value = parseFloat(data.data.download).toFixed(1);
if(window.config.widgets.show_average) {
returnData.avg = parseFloat(data.average.download).toFixed(1);
}
if(window.config.widgets.show_max) {
returnData.max = parseFloat(data.maximum.download).toFixed(1);
}
if(window.config.widgets.show_min) {
returnData.min = parseFloat(data.minimum.download).toFixed(1);
}
}
return returnData;
}
componentDidUpdate = () => {
if(this.props.title != this.state.title || this.props.data != this.state.data || this.props.unit != this.state.unit || this.props.icon != this.state.icon || this.props.failed != this.state.failed) {
if(this.props.title != this.state.title || this.props.value != this.state.value || this.props.unit != this.state.unit || this.props.icon != this.state.icon || this.props.avg != this.state.avg || this.props.max != this.state.max || this.props.failed != this.state.failed) {
this.setState({
title: this.props.title,
value: this.props.value,
unit: this.props.unit,
icon: this.props.icon,
avg: this.props.avg,
max: this.props.max,
failed: this.props.failed,
data: this.props.data
});
}
}
render() {
var title = this.state.title;
var value = this.state.value;
var unit = this.state.unit;
var icon = this.state.icon;
var max = this.state.max;
var avg = this.state.avg;
var failed = Boolean(Number(this.state.failed));
var data = this.parseData(title, this.state.data);
switch(icon) {
case 'ping':
icon = <span className="ti-pulse icon text-success"></span>;
@@ -113,30 +63,17 @@ export default class Widget extends Component {
</div>
<div className="text-truncate">
<h3 className="d-inline">{(!failed) ? data.value : <span className="ti-close text-danger"></span> }</h3>
<h3 className="d-inline">{(!failed) ? value : <span className="ti-close text-danger"></span> }</h3>
<p className="d-inline ml-2">{unit} (current)</p>
</div>
{window.config.widgets.show_average &&
<div className="text-muted text-truncate">
<h5 className="d-inline">{data.avg}</h5>
<p className="d-inline ml-2">{unit} (average)</p>
</div>
}
{window.config.widgets.show_max &&
<div className="text-muted text-truncate">
<h5 className="d-inline">{data.max}</h5>
<p className="d-inline ml-2">{unit} (maximum)</p>
</div>
}
{window.config.widgets.show_min &&
<div className="text-muted text-truncate">
<h5 className="d-inline">{data.min}</h5>
<p className="d-inline ml-2">{unit} (minimum)</p>
</div>
}
<div className="text-muted text-truncate">
<h5 className="d-inline">{avg}</h5>
<p className="d-inline ml-2">{unit} (average)</p>
</div>
<div className="text-muted text-truncate">
<h5 className="d-inline">{max}</h5>
<p className="d-inline ml-2">{unit} (maximum)</p>
</div>
</div>
</div>
</Card.Body>

View File

@@ -47,10 +47,6 @@ export default class SettingWithModal extends Component {
if(this.state.autoClose) {
this.toggleShow();
}
Axios.get('api/settings/config')
.then((resp) => {
window.config = resp.data;
})
})
.catch((err) => {
if(err.response.status == 422) {
@@ -198,7 +194,7 @@ export default class SettingWithModal extends Component {
</Col>
{e.description == null &&
<Col md={md} sm={sm}>
<p dangerouslySetInnerHTML={{ __html: e.obj.description}}></p>
<p>{e.obj.description}</p>
</Col>
}
</Row>

View File

@@ -59,28 +59,10 @@ export default class Settings extends Component {
return (
<Row>
<Col lg={{ span: 4 }} md={{ span: 6 }} sm={{ span: 12 }}>
<SettingWithModal title="General settings" description="Configure general settings for the app." autoClose={true} settings={[
{
obj: e.schedule,
type: 'text'
},
{
obj: e.server,
type: 'text'
},
{
obj: e.show_average,
type: 'checkbox'
},
{
obj: e.show_max,
type: 'checkbox'
},
{
obj: e.show_min,
type: 'checkbox'
},
]} />
<Setting name={e.schedule.name} value={e.schedule.value} description={e.schedule.description} />
</Col>
<Col lg={{ span: 4 }} md={{ span: 6 }} sm={{ span: 12 }}>
<Setting name={e.server.name} value={e.server.value} description={e.server.description} />
</Col>
<Col lg={{ span: 4 }} md={{ span: 6 }} sm={{ span: 12 }}>
<SettingWithModal title="Graph settings" description="Control settings for the graphs." autoClose={true} settings={[

View File

@@ -27,13 +27,13 @@ class APISpeedtestTest extends TestCase
$dl = [];
$ul = [];
for ($i = 0; $i < 3; $i++) {
for($i = 0; $i < 3; $i++) {
$pingVal = $faker->randomFloat();
array_push($ping, $pingVal);
array_push($ping,$pingVal);
$dlVal = $faker->randomFloat();
array_push($dl, $dlVal);
array_push($dl,$dlVal);
$ulVal = $faker->randomFloat();
array_push($ul, $ulVal);
array_push($ul,$ulVal);
Speedtest::create([
'ping' => $pingVal,
@@ -70,12 +70,7 @@ class APISpeedtestTest extends TestCase
'download',
'upload',
],
'maximum' => [
'ping',
'download',
'upload',
],
'minimum' => [
'max' => [
'ping',
'download',
'upload',

View File

@@ -19,7 +19,7 @@ class LatestTest extends TestCase
*/
private $controller;
public function setUp(): void
public function setUp() : void
{
parent::setUp();
@@ -53,7 +53,6 @@ class LatestTest extends TestCase
$this->assertArrayHasKey('data', $resp);
$this->assertArrayHasKey('average', $resp);
$this->assertArrayHasKey('maximum', $resp);
$this->assertArrayHasKey('minimum', $resp);
$this->assertArrayHasKey('max', $resp);
}
}