mirror of
https://github.com/henrywhitaker3/Speedtest-Tracker.git
synced 2025-12-27 15:41:39 +01:00
Merge pull request #271 from henrywhitaker3/alpha-docker
Updated to v1.9.2
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Speedtest Tracker
|
||||
|
||||
[](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](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/actions) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](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 [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.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Speedtest Tracker
|
||||
|
||||
[](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](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/actions) [](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [](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.
|
||||
|
||||
|
||||
67
conf/site/app/Helpers/NotificationsHelper.php
Normal file
67
conf/site/app/Helpers/NotificationsHelper.php
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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']);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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']);
|
||||
}
|
||||
}
|
||||
@@ -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.",
|
||||
|
||||
@@ -7,7 +7,7 @@ return [
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'version' => '1.9.0',
|
||||
'version' => '1.9.2',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
BIN
conf/site/node_modules/.cache/babel-loader/0b95f1a4a327788a0c88638113224c15.json.gz
generated
vendored
Normal file
BIN
conf/site/node_modules/.cache/babel-loader/0b95f1a4a327788a0c88638113224c15.json.gz
generated
vendored
Normal file
Binary file not shown.
BIN
conf/site/node_modules/.cache/babel-loader/31fe0d16513f2583831b5c4fa076481f.json.gz
generated
vendored
Normal file
BIN
conf/site/node_modules/.cache/babel-loader/31fe0d16513f2583831b5c4fa076481f.json.gz
generated
vendored
Normal file
Binary file not shown.
BIN
conf/site/node_modules/.cache/babel-loader/8c047a216547bfd9210a7e3826de5031.json.gz
generated
vendored
Normal file
BIN
conf/site/node_modules/.cache/babel-loader/8c047a216547bfd9210a7e3826de5031.json.gz
generated
vendored
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/16/ab/e84abd95f13711f8ce96c6a1391d2686cfa284d17152c7a0ef9103e6b117
generated
vendored
Normal file
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/16/ab/e84abd95f13711f8ce96c6a1391d2686cfa284d17152c7a0ef9103e6b117
generated
vendored
Normal 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}
|
||||
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/39/6c/68563f1f316ce44002fbee43e33355ab0feeac66e2fda5294fa279f7d632
generated
vendored
Normal file
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/39/6c/68563f1f316ce44002fbee43e33355ab0feeac66e2fda5294fa279f7d632
generated
vendored
Normal 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}
|
||||
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/e3/89/fc27811e031a515564c957d3b7da13cc36e84039ada417a234163d2b1a8f
generated
vendored
Normal file
2
conf/site/node_modules/.cache/terser-webpack-plugin/index-v5/e3/89/fc27811e031a515564c957d3b7da13cc36e84039ada417a234163d2b1a8f
generated
vendored
Normal 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}
|
||||
2
conf/site/public/js/app.js
vendored
2
conf/site/public/js/app.js
vendored
File diff suppressed because one or more lines are too long
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user