Merge pull request #271 from henrywhitaker3/alpha-docker

Updated to v1.9.2
This commit is contained in:
Henry Whitaker
2020-08-21 23:48:39 +01:00
committed by GitHub
26 changed files with 594 additions and 12 deletions

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.0-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.2-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 [Ookla's Speedtest cli](https://www.speedtest.net/apps/cli) to get the data and uses [Chart.js](https://www.chartjs.org/) to plot the results.

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.0-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.2-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

@@ -0,0 +1,67 @@
<?php
namespace App\Helpers;
class NotificationsHelper {
/**
* Parse $errors and format message
*
* @param array $errors
* @return String
*/
public static function formatPercentageThresholdMessage(array $errors)
{
$msg = NotificationsHelper::thresholdMessageStart($errors);
$msg = $msg . 'exceeded the percentage threshold';
return $msg;
}
/**
* Parse $errors and format message
*
* @param array $errors
* @return String
*/
public static function formatAbsoluteThresholdMessage(array $errors)
{
$msg = NotificationsHelper::thresholdMessageStart($errors);
$msg = $msg . 'exceeded the absolute threshold';
return $msg;
}
/**
* Iterate through errors to format message
*
* @param array $errors
* @return String
*/
public static function thresholdMessageStart(array $errors)
{
$msg = 'For the latest speedtest, the ';
for($i = 0; $i < sizeof($errors); $i++) {
$key = $errors[$i];
$msg = $msg . $key;
if(sizeof($errors) > 1 && $i < (sizeof($errors) - 1)) {
$msg = $msg . ', ';
}
}
if($msg[-1] != '') {
$msg = $msg . ' ';
}
if(sizeof($errors) > 1) {
$msg = $msg . 'values ';
} else {
$msg = $msg . 'value ';
}
return $msg;
}
}

View File

@@ -10,6 +10,7 @@ use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use InvalidArgumentException;
use JsonException;
class SpeedtestHelper {
@@ -301,4 +302,77 @@ class SpeedtestHelper {
'msg' => 'There was an error backing up the database. No speedtests have been deleted.'
];
}
/**
* Work out if a test is lower than the threshold for historic tests
*
* @param String $type
* @param Speedtest $test
* @return array
*/
public static function testIsLowerThanThreshold(String $type, Speedtest $test)
{
if($type == 'percentage') {
$avg = Speedtest::select(DB::raw('AVG(ping) as ping, AVG(download) as download, AVG(upload) as upload'))
->where('failed', false)
->get()
->toArray()[0];
$threshold = SettingsHelper::get('threshold_alert_percentage')->value;
if($threshold == '') {
return [];
}
$errors = [];
foreach($avg as $key => $value) {
if($key == 'ping') {
$threshold = (float)$value * (1 + ( $threshold / 100 ));
if($test->$key > $threshold) {
array_push($errors, $key);
}
} else {
$threshold = (float)$value * (1 - ( $threshold / 100 ));
if($test->$key < $threshold) {
array_push($errors, $key);
}
}
}
return $errors;
}
if($type == 'absolute') {
$thresholds = [
'download' => SettingsHelper::get('threshold_alert_absolute_download')->value,
'upload' => SettingsHelper::get('threshold_alert_absolute_upload')->value,
'ping' => SettingsHelper::get('threshold_alert_absolute_ping')->value,
];
$errors = [];
foreach($thresholds as $key => $value) {
if($value == '') {
continue;
}
if($key == 'ping') {
if($test->$key > $value) {
array_push($errors, $key);
}
} else {
if($test->$key < $value) {
array_push($errors, $key);
}
}
}
return $errors;
}
throw new InvalidArgumentException();
}
}

View File

@@ -82,16 +82,17 @@ class SpeedtestJob implements ShouldQueue
private function healthcheck(String $method)
{
try {
$hc = new Healthchecks(SettingsHelper::get('healthchecks_uuid')->value);
if($method === 'start') {
Healthcheck::start();
$hc->start();
}
if($method === 'success') {
Healthcheck::success();
$hc->success();
}
if($method === 'fail') {
Healthcheck::fail();
$hc->fail();
}
} catch(Exception $e) {
Log::error($e->getMessage());

View File

@@ -3,8 +3,13 @@
namespace App\Listeners;
use App\Helpers\SettingsHelper;
use App\Helpers\SpeedtestHelper;
use App\Notifications\SpeedtestAbsoluteThresholdNotificationSlack;
use App\Notifications\SpeedtestAbsoluteThresholdTelegram;
use App\Notifications\SpeedtestCompleteSlack;
use App\Notifications\SpeedtestCompleteTelegram;
use App\Notifications\SpeedtestPercentageThresholdNotificationSlack;
use App\Notifications\SpeedtestPercentageThresholdTelegram;
use Exception;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
@@ -32,9 +37,63 @@ class SpeedtestCompleteListener
*/
public function handle($event)
{
if((bool)SettingsHelper::get('threshold_alert_percentage_notifications')->value == true) {
$data = $event->speedtest;
$errors = SpeedtestHelper::testIsLowerThanThreshold('percentage', $data);
if(sizeof($errors) > 0) {
if(SettingsHelper::get('slack_webhook')->value) {
try {
Notification::route('slack', SettingsHelper::get('slack_webhook')->value)
->notify(new SpeedtestPercentageThresholdNotificationSlack($errors));
} catch(Exception $e) {
Log::notice('Your sleck webhook is invalid');
Log::notice($e);
}
}
if(SettingsHelper::get('telegram_bot_token')->value == true && SettingsHelper::get('telegram_chat_id')->value == true) {
try {
config([ 'services.telegram-bot-api' => [ 'token' => SettingsHelper::get('telegram_bot_token')->value ] ]);
Notification::route(TelegramChannel::class, SettingsHelper::get('telegram_chat_id')->value)
->notify(new SpeedtestPercentageThresholdTelegram($errors));
} catch(Exception $e) {
Log::notice('Your telegram settings are invalid');
Log::notice($e);
}
}
}
}
if((bool)SettingsHelper::get('threshold_alert_absolute_notifications')->value == true) {
$data = $event->speedtest;
$errors = SpeedtestHelper::testIsLowerThanThreshold('absolute', $data);
if(sizeof($errors) > 0) {
if(SettingsHelper::get('slack_webhook')->value) {
try {
Notification::route('slack', SettingsHelper::get('slack_webhook')->value)
->notify(new SpeedtestAbsoluteThresholdNotificationSlack($errors));
} catch(Exception $e) {
Log::notice('Your sleck webhook is invalid');
Log::notice($e);
}
}
if(SettingsHelper::get('telegram_bot_token')->value == true && SettingsHelper::get('telegram_chat_id')->value == true) {
try {
config([ 'services.telegram-bot-api' => [ 'token' => SettingsHelper::get('telegram_bot_token')->value ] ]);
Notification::route(TelegramChannel::class, SettingsHelper::get('telegram_chat_id')->value)
->notify(new SpeedtestAbsoluteThresholdTelegram($errors));
} catch(Exception $e) {
Log::notice('Your telegram settings are invalid');
Log::notice($e);
}
}
}
}
if(SettingsHelper::get('speedtest_notifications')->value == true) {
$data = $event->speedtest;
if(SettingsHelper::get('slack_webhook')) {
if(SettingsHelper::get('slack_webhook')->value) {
try {
Notification::route('slack', SettingsHelper::get('slack_webhook')->value)
->notify(new SpeedtestCompleteSlack($data));

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Notifications;
use App\Helpers\NotificationsHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
class SpeedtestAbsoluteThresholdNotificationSlack extends Notification
{
use Queueable;
protected $errors;
/**
* Create a new notification instance.
*
* @param array $errors
* @return void
*/
public function __construct(array $errors)
{
$this->errors = $errors;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['slack'];
}
/**
* Format slack notification
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
$msg = NotificationsHelper::formatAbsoluteThresholdMessage($this->errors);
return (new SlackMessage)
->warning()
->attachment(function ($attachment) use ($msg) {
$attachment->title('Speedtest absolute threshold error')
->content($msg);
});
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Notifications;
use App\Helpers\NotificationsHelper;
use App\Helpers\SettingsHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use NotificationChannels\Telegram\TelegramChannel;
use NotificationChannels\Telegram\TelegramMessage;
class SpeedtestAbsoluteThresholdTelegram extends Notification
{
use Queueable;
private $errors;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($errors)
{
$this->errors = $errors;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return [
TelegramChannel::class
];
}
/**
* Format telegram notification
*
* @param mixed $notifiable
* @return TelegramMessage
*/
public function toTelegram($notifiable)
{
$msg = NotificationsHelper::formatAbsoluteThresholdMessage($this->errors);
return TelegramMessage::create()
->to(SettingsHelper::get('telegram_chat_id')->value)
->content($msg)
->options(['parse_mode' => 'Markdown']);
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Notifications;
use App\Helpers\NotificationsHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
class SpeedtestPercentageThresholdNotificationSlack extends Notification
{
use Queueable;
protected $errors;
/**
* Create a new notification instance.
*
* @param array $errors
* @return void
*/
public function __construct(array $errors)
{
$this->errors = $errors;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['slack'];
}
/**
* Format slack notification
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
$msg = NotificationsHelper::formatPercentageThresholdMessage($this->errors);
return (new SlackMessage)
->warning()
->attachment(function ($attachment) use ($msg) {
$attachment->title('Speedtest percentage threshold error')
->content($msg);
});
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Notifications;
use App\Helpers\NotificationsHelper;
use App\Helpers\SettingsHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use NotificationChannels\Telegram\TelegramChannel;
use NotificationChannels\Telegram\TelegramMessage;
class SpeedtestPercentageThresholdTelegram extends Notification
{
use Queueable;
private $errors;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($errors)
{
$this->errors = $errors;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return [
TelegramChannel::class
];
}
/**
* Format telegram notification
*
* @param mixed $notifiable
* @return TelegramMessage
*/
public function toTelegram($notifiable)
{
$msg = NotificationsHelper::formatAbsoluteThresholdMessage($this->errors);
return TelegramMessage::create()
->to(SettingsHelper::get('telegram_chat_id')->value)
->content($msg)
->options(['parse_mode' => 'Markdown']);
}
}

View File

@@ -1,4 +1,16 @@
{
"1.9.2": [
{
"description": "Authentication bugfixes.",
"link": ""
}
],
"1.9.1": [
{
"description": "Added conditional notifications.",
"link": ""
}
],
"1.9.0": [
{
"description": "Added optional authentication.",

View File

@@ -7,7 +7,7 @@ return [
|--------------------------------------------------------------------------
*/
'version' => '1.9.0',
'version' => '1.9.2',
/*
|--------------------------------------------------------------------------

View File

@@ -0,0 +1,83 @@
<?php
use App\Helpers\SettingsHelper;
use App\Setting;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddConditionalNotificationsSettings extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if(!SettingsHelper::get('threshold_alert_percentage_notifications')) {
Setting::create([
'name' => 'threshold_alert_percentage_notifications',
'value' => false,
'description' => 'Enable/disable theshold percentage notifications'
]);
}
if(!SettingsHelper::get('threshold_alert_percentage')) {
Setting::create([
'name' => 'threshold_alert_percentage',
'value' => 15,
'description' => 'When any value of a speedtest is x percent lower than the average, a notification will be sent.'
]);
}
if(!SettingsHelper::get('threshold_alert_absolute_notifications')) {
Setting::create([
'name' => 'threshold_alert_absolute_notifications',
'value' => false,
'description' => 'Enable/disable absolute theshold notifications'
]);
}
if(!SettingsHelper::get('threshold_alert_absolute_download')) {
Setting::create([
'name' => 'threshold_alert_absolute_download',
'value' => '',
'description' => 'When the download is lower than this value, a notification will be sent. Leave blank to disable'
]);
}
if(!SettingsHelper::get('threshold_alert_absolute_upload')) {
Setting::create([
'name' => 'threshold_alert_absolute_upload',
'value' => '',
'description' => 'When the upload is lower than this value, a notification will be sent. Leave blank to disable'
]);
}
if(!SettingsHelper::get('threshold_alert_absolute_ping')) {
Setting::create([
'name' => 'threshold_alert_absolute_ping',
'value' => '',
'description' => 'When the ping is higher than this value, a notification will be sent. Leave blank to disable'
]);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Setting::whereIn('name', [
'threshold_alert_percentage',
'threshold_alert_absolute_download',
'threshold_alert_absolute_upload',
'threshold_alert_absolute_ping',
'threshold_alert_percentage_notifications',
'threshold_alert_absolute_notifications'
])->delete();
}
}

View File

@@ -0,0 +1,2 @@
bf633b79f9b8ae69f96da198af79c9e572b419bf {"key":"{\"terser\":\"4.6.10\",\"terser-webpack-plugin\":\"2.3.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":true,\"sourceMap\":true,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"compress\":{\"warnings\":false},\"output\":{\"comments\":false}}},\"nodeVersion\":\"v10.19.0\",\"filename\":\"\\u002Fjs\\u002Fapp.js\",\"contentHash\":\"4e2d51411e807c9d58ce\"}","integrity":"sha512-w6Fa4YzRScDEIsi4Ohew74OsE2cVtT0nxIh+alRA7YUhX70CQRoqED0jmoHfThcjVwa9b0tSBNIvRMC1gSUNGg==","time":1598049063999,"size":2657303}

View File

@@ -0,0 +1,2 @@
57951b777464220e35af48efda9b03597bb4b9a4 {"key":"{\"terser\":\"4.6.10\",\"terser-webpack-plugin\":\"2.3.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":true,\"sourceMap\":true,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"compress\":{\"warnings\":false},\"output\":{\"comments\":false}}},\"nodeVersion\":\"v10.19.0\",\"filename\":\"\\u002Fjs\\u002Fapp.js\",\"contentHash\":\"c68daa847e472d3c3b20\"}","integrity":"sha512-i0R1AkuN58D8l16kQZiirMcVs0fyWe1lyL0YDhr7CTHowonhVJym9N30EtdSTOEAj4dhpXSvLmye15we5IbgGQ==","time":1598049722693,"size":2657454}

View File

@@ -0,0 +1,2 @@
338ac790ce49de53a9e17d3bdb9313bc59be4875 {"key":"{\"terser\":\"4.6.10\",\"terser-webpack-plugin\":\"2.3.5\",\"terser-webpack-plugin-options\":{\"test\":new RegExp(\"\\\\.m?js(\\\\?.*)?$\", \"i\"),\"chunkFilter\":() => true,\"warningsFilter\":() => true,\"extractComments\":true,\"sourceMap\":true,\"cache\":true,\"cacheKeys\":defaultCacheKeys => defaultCacheKeys,\"parallel\":true,\"include\":undefined,\"exclude\":undefined,\"minify\":undefined,\"terserOptions\":{\"compress\":{\"warnings\":false},\"output\":{\"comments\":false}}},\"nodeVersion\":\"v10.19.0\",\"filename\":\"\\u002Fjs\\u002Fapp.js\",\"contentHash\":\"b9451e6ca8c999d50ea1\"}","integrity":"sha512-ZmvaGasT9yJRqf1B39Pl6in5OOpvERNPX7aQzGMXziri4dvTz0jDYe4r1TicPVLbFfJbQbbdpx2NPu39NaNU6g==","time":1598049529363,"size":2657394}

File diff suppressed because one or more lines are too long

View File

@@ -143,7 +143,7 @@ export default class Settings extends Component {
description: "After saving your updated notification settings, use this to check your settings are correct."
},
type: 'button-get',
url: 'api/settings/test-notification'
url: 'api/settings/test-notification?token=' + window.token
},
{
obj: e.speedtest_notifications,
@@ -158,6 +158,43 @@ export default class Settings extends Component {
type: 'number',
min: 0,
max: 23
},
{
obj: {
id: (Math.floor(Math.random() * 10000) + 1),
name: "Conditional Notifications",
description: ""
},
type: 'group',
children: [
]
},
{
obj: e.threshold_alert_percentage_notifications,
type: 'checkbox',
},
{
obj: e.threshold_alert_percentage,
type: 'number',
min: 0,
max: 100
},
{
obj: e.threshold_alert_absolute_notifications,
type: 'checkbox',
},
{
obj: e.threshold_alert_absolute_download,
type: 'number',
},
{
obj: e.threshold_alert_absolute_upload,
type: 'number',
},
{
obj: e.threshold_alert_absolute_ping,
type: 'number',
}
]} />
</Col>
@@ -181,21 +218,21 @@ export default class Settings extends Component {
children: [
{
type: 'button-get',
url: 'api/settings/test-healthchecks/start',
url: 'api/settings/test-healthchecks/start?token=' + window.token,
btnType: 'outline-success',
text: 'Start',
inline: true,
},
{
type: 'button-get',
url: 'api/settings/test-healthchecks/success',
url: 'api/settings/test-healthchecks/success?token=' + window.token,
btnType: 'success',
text: 'Success',
inline: true,
},
{
type: 'button-get',
url: 'api/settings/test-healthchecks/fail',
url: 'api/settings/test-healthchecks/fail?token=' + window.token,
btnType: 'danger',
text: 'Fail',
inline: true,

View File

@@ -30,6 +30,7 @@ return array(
'App\\Facades\\UpdaterFacade' => $baseDir . '/app/Facades/UpdaterFacade.php',
'App\\Helpers\\BackupHelper' => $baseDir . '/app/Helpers/BackupHelper.php',
'App\\Helpers\\EmailVerificationHelper' => $baseDir . '/app/Helpers/EmailVerificationHelper.php',
'App\\Helpers\\NotificationsHelper' => $baseDir . '/app/Helpers/NotificationsHelper.php',
'App\\Helpers\\SettingsHelper' => $baseDir . '/app/Helpers/SettingsHelper.php',
'App\\Helpers\\SpeedtestHelper' => $baseDir . '/app/Helpers/SpeedtestHelper.php',
'App\\Helpers\\UpdateHelper' => $baseDir . '/app/Helpers/UpdateHelper.php',
@@ -55,12 +56,16 @@ return array(
'App\\Listeners\\SpeedtestFailedListener' => $baseDir . '/app/Listeners/SpeedtestFailedListener.php',
'App\\Listeners\\SpeedtestOverviewListener' => $baseDir . '/app/Listeners/SpeedtestOverviewListener.php',
'App\\Listeners\\TestNotificationListener' => $baseDir . '/app/Listeners/TestNotificationListener.php',
'App\\Notifications\\SpeedtestAbsoluteThresholdNotificationSlack' => $baseDir . '/app/Notifications/SpeedtestAbsoluteThresholdNotificationSlack.php',
'App\\Notifications\\SpeedtestAbsoluteThresholdTelegram' => $baseDir . '/app/Notifications/SpeedtestAbsoluteThresholdTelegram.php',
'App\\Notifications\\SpeedtestCompleteSlack' => $baseDir . '/app/Notifications/SpeedtestCompleteSlack.php',
'App\\Notifications\\SpeedtestCompleteTelegram' => $baseDir . '/app/Notifications/SpeedtestCompleteTelegram.php',
'App\\Notifications\\SpeedtestFailedSlack' => $baseDir . '/app/Notifications/SpeedtestFailedSlack.php',
'App\\Notifications\\SpeedtestFailedTelegram' => $baseDir . '/app/Notifications/SpeedtestFailedTelegram.php',
'App\\Notifications\\SpeedtestOverviewSlack' => $baseDir . '/app/Notifications/SpeedtestOverviewSlack.php',
'App\\Notifications\\SpeedtestOverviewTelegram' => $baseDir . '/app/Notifications/SpeedtestOverviewTelegram.php',
'App\\Notifications\\SpeedtestPercentageThresholdNotificationSlack' => $baseDir . '/app/Notifications/SpeedtestPercentageThresholdNotificationSlack.php',
'App\\Notifications\\SpeedtestPercentageThresholdTelegram' => $baseDir . '/app/Notifications/SpeedtestPercentageThresholdTelegram.php',
'App\\Notifications\\TestSlackNotification' => $baseDir . '/app/Notifications/TestSlackNotification.php',
'App\\Notifications\\TestTelegramNotification' => $baseDir . '/app/Notifications/TestTelegramNotification.php',
'App\\Providers\\AppServiceProvider' => $baseDir . '/app/Providers/AppServiceProvider.php',

View File

@@ -655,6 +655,7 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8
'App\\Facades\\UpdaterFacade' => __DIR__ . '/../..' . '/app/Facades/UpdaterFacade.php',
'App\\Helpers\\BackupHelper' => __DIR__ . '/../..' . '/app/Helpers/BackupHelper.php',
'App\\Helpers\\EmailVerificationHelper' => __DIR__ . '/../..' . '/app/Helpers/EmailVerificationHelper.php',
'App\\Helpers\\NotificationsHelper' => __DIR__ . '/../..' . '/app/Helpers/NotificationsHelper.php',
'App\\Helpers\\SettingsHelper' => __DIR__ . '/../..' . '/app/Helpers/SettingsHelper.php',
'App\\Helpers\\SpeedtestHelper' => __DIR__ . '/../..' . '/app/Helpers/SpeedtestHelper.php',
'App\\Helpers\\UpdateHelper' => __DIR__ . '/../..' . '/app/Helpers/UpdateHelper.php',
@@ -680,12 +681,16 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8
'App\\Listeners\\SpeedtestFailedListener' => __DIR__ . '/../..' . '/app/Listeners/SpeedtestFailedListener.php',
'App\\Listeners\\SpeedtestOverviewListener' => __DIR__ . '/../..' . '/app/Listeners/SpeedtestOverviewListener.php',
'App\\Listeners\\TestNotificationListener' => __DIR__ . '/../..' . '/app/Listeners/TestNotificationListener.php',
'App\\Notifications\\SpeedtestAbsoluteThresholdNotificationSlack' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestAbsoluteThresholdNotificationSlack.php',
'App\\Notifications\\SpeedtestAbsoluteThresholdTelegram' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestAbsoluteThresholdTelegram.php',
'App\\Notifications\\SpeedtestCompleteSlack' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestCompleteSlack.php',
'App\\Notifications\\SpeedtestCompleteTelegram' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestCompleteTelegram.php',
'App\\Notifications\\SpeedtestFailedSlack' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestFailedSlack.php',
'App\\Notifications\\SpeedtestFailedTelegram' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestFailedTelegram.php',
'App\\Notifications\\SpeedtestOverviewSlack' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestOverviewSlack.php',
'App\\Notifications\\SpeedtestOverviewTelegram' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestOverviewTelegram.php',
'App\\Notifications\\SpeedtestPercentageThresholdNotificationSlack' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestPercentageThresholdNotificationSlack.php',
'App\\Notifications\\SpeedtestPercentageThresholdTelegram' => __DIR__ . '/../..' . '/app/Notifications/SpeedtestPercentageThresholdTelegram.php',
'App\\Notifications\\TestSlackNotification' => __DIR__ . '/../..' . '/app/Notifications/TestSlackNotification.php',
'App\\Notifications\\TestTelegramNotification' => __DIR__ . '/../..' . '/app/Notifications/TestTelegramNotification.php',
'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php',