mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-05 16:02:34 +00:00
WIP notifications and other refactors (#88)
* WIP notifications and other refactors - refactor notification channels - send notifications on events related to the servers and sites - delete server log files on server deletion - add telegram notification channel - add new icons - cache configs and icons on installation and updates - new navbar for dark mode and settings * discord channel * build assets * pint
This commit is contained in:
36
app/Notifications/AbstractNotification.php
Normal file
36
app/Notifications/AbstractNotification.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification as NotificationInterface;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
abstract class AbstractNotification extends Notification implements NotificationInterface, ShouldQueue
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage())
|
||||
->line($this->rawText());
|
||||
}
|
||||
|
||||
public function toSlack(object $notifiable): string
|
||||
{
|
||||
return $this->rawText();
|
||||
}
|
||||
|
||||
public function toDiscord(object $notifiable): string
|
||||
{
|
||||
return $this->rawText();
|
||||
}
|
||||
|
||||
public function toTelegram(object $notifiable): string
|
||||
{
|
||||
return $this->rawText();
|
||||
}
|
||||
}
|
@ -2,12 +2,11 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class FailedToDeleteServerFromProvider implements Notification
|
||||
class FailedToDeleteServerFromProvider extends AbstractNotification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
@ -18,26 +17,18 @@ public function __construct(Server $server)
|
||||
$this->server = $server;
|
||||
}
|
||||
|
||||
public function subject(): string
|
||||
public function rawText(): string
|
||||
{
|
||||
return __('Failed to delete the server from the provider!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): mixed
|
||||
{
|
||||
if ($mail) {
|
||||
return $this->mail();
|
||||
}
|
||||
|
||||
return __("We couldn't delete [:server] \nfrom :provider \nPlease check your provider and delete it manually", [
|
||||
'server' => $this->server->name,
|
||||
'provider' => $this->server->provider,
|
||||
]);
|
||||
}
|
||||
|
||||
public function mail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Failed to delete the server from the provider!'))
|
||||
->line("We couldn't delete [".$this->server->name.'] from '.$this->server->provider)
|
||||
->line('Please check your provider and delete it manually');
|
||||
}
|
||||
|
@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Ssl;
|
||||
|
||||
class SSLExpirationAlert implements Notification
|
||||
{
|
||||
protected Ssl $ssl;
|
||||
|
||||
public function __construct(Ssl $ssl)
|
||||
{
|
||||
$this->ssl = $ssl;
|
||||
}
|
||||
|
||||
public function subject(): string
|
||||
{
|
||||
return __('SSL expiring soon!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): string
|
||||
{
|
||||
return $this->ssl->site->domain."'s ".__('SSL is expiring on').' '.$this->ssl->expires_at->format('Y-m-d');
|
||||
}
|
||||
}
|
@ -2,11 +2,10 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class ServerDisconnected implements Notification
|
||||
class ServerDisconnected extends AbstractNotification
|
||||
{
|
||||
protected Server $server;
|
||||
|
||||
@ -15,25 +14,17 @@ public function __construct(Server $server)
|
||||
$this->server = $server;
|
||||
}
|
||||
|
||||
public function subject(): string
|
||||
public function rawText(): string
|
||||
{
|
||||
return __('Server disconnected!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): mixed
|
||||
{
|
||||
if ($mail) {
|
||||
return $this->mail();
|
||||
}
|
||||
|
||||
return __("We've disconnected from your server [:server]", [
|
||||
'server' => $this->server->name,
|
||||
]);
|
||||
}
|
||||
|
||||
public function mail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server disconnected!'))
|
||||
->line("We've disconnected from your server [".$this->server->name.'].')
|
||||
->line('Please check your sever is online and make sure that has our public keys in it');
|
||||
}
|
||||
|
@ -2,11 +2,10 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class ServerInstallationFailed implements Notification
|
||||
class ServerInstallationFailed extends AbstractNotification
|
||||
{
|
||||
protected Server $server;
|
||||
|
||||
@ -15,26 +14,18 @@ public function __construct(Server $server)
|
||||
$this->server = $server;
|
||||
}
|
||||
|
||||
public function subject(): string
|
||||
public function rawText(): string
|
||||
{
|
||||
return __('Server installation failed!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): mixed
|
||||
{
|
||||
if ($mail) {
|
||||
return $this->mail();
|
||||
}
|
||||
|
||||
return __("Installation failed for server [:server] \nCheck your server's logs \n:logs", [
|
||||
'server' => $this->server->name,
|
||||
'logs' => url('/servers/'.$this->server->id.'/logs'),
|
||||
]);
|
||||
}
|
||||
|
||||
private function mail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server installation failed!'))
|
||||
->line('Your server ['.$this->server->name.'] installation has been failed.')
|
||||
->line('Check your server logs')
|
||||
->action('View Logs', url('/servers/'.$this->server->id.'/logs'));
|
||||
|
@ -2,11 +2,10 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class ServerInstallationStarted implements Notification
|
||||
class ServerInstallationStarted extends AbstractNotification
|
||||
{
|
||||
protected Server $server;
|
||||
|
||||
@ -15,26 +14,18 @@ public function __construct(Server $server)
|
||||
$this->server = $server;
|
||||
}
|
||||
|
||||
public function subject(): string
|
||||
public function rawText(): string
|
||||
{
|
||||
return __('Server installation started!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): mixed
|
||||
{
|
||||
if ($mail) {
|
||||
return $this->mail();
|
||||
}
|
||||
|
||||
return __("Installation started for server [:server]\nThis may take several minutes depending on many things like your server's internet speed.\nAs soon as it finishes, We will notify you through this channel.\nYou can check the progress live on your dashboard.\n:progress", [
|
||||
'server' => $this->server->name,
|
||||
'progress' => url('/servers/'.$this->server->id),
|
||||
]);
|
||||
}
|
||||
|
||||
public function mail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server installation started!'))
|
||||
->line('Your server\'s ['.$this->server->name.'] installation has been started.')
|
||||
->line("This may take several minutes depending on many things like your server's internet speed.")
|
||||
->line('As soon as it finishes, We will notify you through this channel.')
|
||||
|
@ -2,11 +2,10 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class ServerInstallationSucceed implements Notification
|
||||
class ServerInstallationSucceed extends AbstractNotification
|
||||
{
|
||||
protected Server $server;
|
||||
|
||||
@ -20,14 +19,10 @@ public function subject(): string
|
||||
return __('Server installation succeed!');
|
||||
}
|
||||
|
||||
public function message(bool $mail = false): mixed
|
||||
public function rawText(): string
|
||||
{
|
||||
$this->server->refresh();
|
||||
|
||||
if ($mail) {
|
||||
return $this->mail();
|
||||
}
|
||||
|
||||
return __("Installation succeed for server [:server] \nServer IP: :ip \nUser: :user\nPassword: :password\n:link", [
|
||||
'server' => $this->server->name,
|
||||
'ip' => $this->server->ip,
|
||||
@ -37,11 +32,12 @@ public function message(bool $mail = false): mixed
|
||||
]);
|
||||
}
|
||||
|
||||
public function mail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
$this->server->refresh();
|
||||
|
||||
return (new MailMessage)
|
||||
->subject(__('Server installation succeed!'))
|
||||
->line('Your server ['.$this->server->name.'] has been installed successfully.')
|
||||
->line('Server IP: '.$this->server->ip)
|
||||
->line('User: '.$this->server->authentication['user'])
|
||||
|
30
app/Notifications/SiteInstallationFailed.php
Normal file
30
app/Notifications/SiteInstallationFailed.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Models\Site;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class SiteInstallationFailed extends AbstractNotification
|
||||
{
|
||||
public function __construct(protected Site $site)
|
||||
{
|
||||
}
|
||||
|
||||
public function rawText(): string
|
||||
{
|
||||
return __("Installation failed for site [:site] \nCheck your server's logs \n:logs", [
|
||||
'site' => $this->site->domain,
|
||||
'logs' => url('/servers/'.$this->site->server_id.'/logs'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Site installation failed!'))
|
||||
->line('Your site\'s ['.$this->site->domain.'] installation has been failed.')
|
||||
->line('Check your server logs')
|
||||
->action('View Logs', url('/servers/'.$this->site->server_id.'/logs'));
|
||||
}
|
||||
}
|
29
app/Notifications/SiteInstallationSucceed.php
Normal file
29
app/Notifications/SiteInstallationSucceed.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Models\Site;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class SiteInstallationSucceed extends AbstractNotification
|
||||
{
|
||||
public function __construct(protected Site $site)
|
||||
{
|
||||
}
|
||||
|
||||
public function rawText(): string
|
||||
{
|
||||
return __('Installation succeed for site [:site]', [
|
||||
'site' => $this->site->domain,
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Site installation succeed!'))
|
||||
->line('Your site\'s ['.$this->site->domain.'] installation has been installed.')
|
||||
->line('Check your site')
|
||||
->action('View Site', url('/servers/'.$this->site->server_id.'/sites/'.$this->site->id));
|
||||
}
|
||||
}
|
@ -2,41 +2,26 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use App\Models\SourceControl;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class SourceControlDisconnected extends Notification implements ShouldQueue
|
||||
class SourceControlDisconnected extends AbstractNotification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
protected string $sourceControl;
|
||||
|
||||
public function __construct(string $sourceControl)
|
||||
public function __construct(protected SourceControl $sourceControl)
|
||||
{
|
||||
$this->sourceControl = $sourceControl;
|
||||
}
|
||||
|
||||
public function via(): array
|
||||
public function rawText(): string
|
||||
{
|
||||
return ['mail'];
|
||||
return __('Source control [:sourceControl] has been disconnected from Vito', [
|
||||
'sourceControl' => $this->sourceControl->profile,
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(): MailMessage
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject('Lost connection to your '.$this->sourceControl)
|
||||
->line("We've lost connection to your $this->sourceControl account.")
|
||||
->line("We'll not able to do any deployments until you reconnect.")
|
||||
->line("To reconnect your $this->sourceControl account please click on the bellow button.")
|
||||
->action('Reconnect', url('/source-controls'));
|
||||
}
|
||||
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
->subject(__('Source control disconnected!'))
|
||||
->line($this->rawText());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user