<?php namespace App\Notifications\Emails; use Carbon\Carbon; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Log; use App\Models\Address; class NodeMarkedDown extends Notification //implements ShouldQueue { use Queueable; private const LOGKEY = 'NEM'; /** * Create a new notification instance. */ public function __construct(private Address $ao) { } /** * Get the notification's delivery channels. * * @return array<int, string> */ public function via(object $notifiable): array { return ['mail']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { Log::info(sprintf('%s:+ Sending a NODE MARKED DOWN EMAIL for address [%s]',self::LOGKEY,$this->ao->ftn)); $now = Carbon::now(); return (new MailMessage) ->cc(our_address($this->ao)->system->users->first()->email) ->subject(sprintf('ACTION REQUIRED: Your system will be delisted on %s',$now->format('Y-m-d'))) ->line(sprintf('Your system has been marked **DOWN**, because it hasnt polled **%s** with address %s since **%s** (%d days).', $this->ao->zone->domain->name, $this->ao->ftn4d, $this->ao->system->last_seen?->format('Y-m-d') ?: 'Not seen', $this->ao->system->last_seen?->diffInDays($now))) ->line('') ->line('You have (waiting for collection):') ->line(sprintf('* %s Netmails',number_format($this->ao->netmailWaiting()->count()))) ->line(sprintf('* %s Echomails',number_format($this->ao->echomailWaiting()->count()))) ->line(sprintf('* %s Files',number_format($this->ao->filesWaiting()->count()))) ->line('') ->line(sprintf('Your system will automatically be **DE-LISTED** if your system hasnt polled to collected your mail/file(s) by **%s**',$now->addDays(7)->format('Y-m-d'))) ->line('If you think you\'ve received this email by mistake or need help, please let me know.'); } }