Nano Hash - криптовалюты, майнинг, программирование

Уведомление об исключении Laravel по электронной почте для каждого типа исключения

Кто-нибудь знает способ ограничить уведомления по электронной почте для определенного исключения в Laravel?

Я заставил свое приложение отправлять мне электронное письмо, когда возникает ошибка БД, проверяя QueryException. Это грубый пример того, что я сделал в обработчике исключений в Laravel:

class Handler{

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $e)
    {
        if($e instanceof QueryException){

            if( App::environment(['production']) ){
                Notification::route('mail', '[email protected]')
                            ->notify(new DbErrorNotification($e));
            }
        }

        parent::report($e);
    }

}

За исключением отслеживания в БД, есть ли способ ограничить ошибки БД по типу исключения, чтобы я не получал тысячи писем, если есть постоянная ошибка БД.

Я просмотрел плагины Swift Mailer для защиты от наводнения и регулирования, но они влияют система глобально, чего я не хочу делать.

заранее спасибо



Ответы:


1

Есть несколько способов добиться этого. Непосредственно перед отправкой работы вы можете добавить к ней delay. Пример:

use App\Http\Request;
use App\Jobs\SendEmail;
use App\Mail\VerifyEmail;
use Carbon\Carbon;

/**
 * Store a newly created resource in storage.
 *
 * @param Request $request
 * @return \Illuminate\Http\RedirectResponse
 * @throws \Symfony\Component\HttpKernel\Exception\HttpException
 */
public function store(Request $request)
{
    $baseDelay = json_encode(now());

    $getDelay = json_encode(
        cache('jobs.' . SendEmail::class, $baseDelay)
    );

    $setDelay = Carbon::parse(
        $getDelay->date
    )->addSeconds(10);

    cache([
        'jobs.' . SendEmail::class => json_encode($setDelay)
    ], 5);
    SendEmail::dispatch($user, new VerifyEmail($user))
         ->delay($setDelayTime);
}

Или, если вам не нравится идея о работе, вы также можете отложить ее через Mail. Пример:

Mail::to($user)->later($setDelayTime);

И, наконец, через Redis Rate Limiting. Пример:

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    Redis::throttle('SendEmail')
        ->allow(1)
        ->every(10)
        ->then(function () {
            Mail::to($this->user)->send($this->mail);
        }, function () {
            return $this->release(10);
        });
}

Разрешение отправки одного электронного письма каждые десять секунд. Строка SendEmail, переданная методу throttle (), представляет собой имя, однозначно идентифицирующее тип задания с ограничением по скорости. Вы можете установить все, что захотите.

Метод release () является унаследованным членом вашего класса задания и инструктирует Laravel вернуть задание в очередь с необязательной задержкой в ​​секундах, если блокировка не может быть получена. Когда задание отправляется в очередь, Redis получает указание запускать только одно задание SendEmail каждые десять секунд.

Имейте в виду, что для всего этого вам понадобится Redis

Источник: https://medium.com/@bastones/a-simple-guide-to-queuing-mail-in-laravel-f4ff94cdaa59

10.08.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..