diff --git a/.env.example b/.env.example index f58629b7..a99edd13 100644 --- a/.env.example +++ b/.env.example @@ -21,3 +21,5 @@ SPEEDTEST_PASSWORD= # Number of days you stay logged in for REMEMBER_DAYS=30 + +SLACK_WEBHOOK= diff --git a/app/Events/SpeedtestCompleteEvent.php b/app/Events/SpeedtestCompleteEvent.php new file mode 100644 index 00000000..bcda12c5 --- /dev/null +++ b/app/Events/SpeedtestCompleteEvent.php @@ -0,0 +1,37 @@ +speedtest = $speedtest; + } + + /** + * Get the channels the event should broadcast on. + * + * @return \Illuminate\Broadcasting\Channel|array + */ + public function broadcastOn() + { + return new PrivateChannel('channel-name'); + } +} diff --git a/app/Jobs/SpeedtestJob.php b/app/Jobs/SpeedtestJob.php index dd256bba..5eca3a0f 100644 --- a/app/Jobs/SpeedtestJob.php +++ b/app/Jobs/SpeedtestJob.php @@ -2,6 +2,7 @@ namespace App\Jobs; +use App\Events\SpeedtestCompleteEvent; use App\Helpers\SpeedtestHelper; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -31,7 +32,8 @@ class SpeedtestJob implements ShouldQueue public function handle() { $output = shell_exec('speedtest-cli'); - - return SpeedtestHelper::runSpeedtest($output); + $speedtest = SpeedtestHelper::runSpeedtest($output); + event(new SpeedtestCompleteEvent($speedtest)); + return $speedtest; } } diff --git a/app/Listeners/SpeedtestCompleteListener.php b/app/Listeners/SpeedtestCompleteListener.php new file mode 100644 index 00000000..fe7a1728 --- /dev/null +++ b/app/Listeners/SpeedtestCompleteListener.php @@ -0,0 +1,43 @@ +speedtest; + try { + Notification::route('slack', env('SLACK_WEBHOOK')) + ->notify(new SpeedtestComplete($data)); + } catch(Exception $e) { + Log::notice('Your sleck webhook is invalid'); + Log::notice($e); + } + } + } +} diff --git a/app/Notifications/SpeedtestComplete.php b/app/Notifications/SpeedtestComplete.php new file mode 100644 index 00000000..4771d35e --- /dev/null +++ b/app/Notifications/SpeedtestComplete.php @@ -0,0 +1,64 @@ +speedtest = $speedtest; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['slack']; + } + + public function toSlack($notifiable) + { + $speedtest = $this->speedtest; + return (new SlackMessage) + ->warning() + ->attachment(function ($attachment) use ($speedtest) { + $attachment->title('New speedtest') + ->fields([ + 'Ping' => number_format((float)$speedtest->ping, 1, '.', '') . ' ms', + 'Download' => number_format((float)$speedtest->download, 1, '.', '') . ' Mbit/s', + 'Upload' => number_format((float)$speedtest->upload, 1, '.', '') . ' Mbit/s', + ]); + }); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 723a290d..1c9592bf 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,6 +2,8 @@ namespace App\Providers; +use App\Events\SpeedtestCompleteEvent; +use App\Listeners\SpeedtestCompleteListener; use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -18,6 +20,9 @@ class EventServiceProvider extends ServiceProvider Registered::class => [ SendEmailVerificationNotification::class, ], + SpeedtestCompleteEvent::class => [ + SpeedtestCompleteListener::class, + ], ]; /** diff --git a/changelog.json b/changelog.json index 3167e2a4..d8baa5d5 100644 --- a/changelog.json +++ b/changelog.json @@ -1,4 +1,10 @@ { + "1.3.0": [ + { + "description": "Added discord notifications", + "link": "" + } + ], "1.2.9": [ { "description": "Updated laravel framework", diff --git a/composer.json b/composer.json index dc1c5a96..b273809e 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "fruitcake/laravel-cors": "^1.0", "guzzlehttp/guzzle": "^6.3", "laravel/framework": "^7.0", + "laravel/slack-notification-channel": "^2.0", "laravel/tinker": "^2.0", "laravel/ui": "^2.0", "tymon/jwt-auth": "^1.0" diff --git a/composer.lock b/composer.lock index f3a753d4..8ac156ee 100644 --- a/composer.lock +++ b/composer.lock @@ -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": "376dfceee60ad21d948e52a97a25faaf", + "content-hash": "7de35f5352b6b3050eb2e7cdf6fd1fec", "packages": [ { "name": "asm89/stack-cors", @@ -841,6 +841,63 @@ ], "time": "2020-04-24T17:21:56+00:00" }, + { + "name": "laravel/slack-notification-channel", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "ecc90a70791195d6f5e20b2732a5eb1eb9619d10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/ecc90a70791195d6f5e20b2732a5eb1eb9619d10", + "reference": "ecc90a70791195d6f5e20b2732a5eb1eb9619d10", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "illuminate/notifications": "~5.8.0|^6.0|^7.0", + "php": "^7.1.3" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0|^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2019-08-27T14:40:26+00:00" + }, { "name": "laravel/tinker", "version": "v2.4.0", diff --git a/config/speedtest.php b/config/speedtest.php index d91ad92e..4c37532c 100644 --- a/config/speedtest.php +++ b/config/speedtest.php @@ -7,7 +7,7 @@ return [ |-------------------------------------------------------------------------- */ - 'version' => '1.2.9', + 'version' => '1.3.0', /* |--------------------------------------------------------------------------