Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kevincobain2000/laravel-alert-notifications
Send alert to email, microsoft teams from laravel app, when an exception occurs. Throttle is enabled by default.
https://github.com/kevincobain2000/laravel-alert-notifications
alerts email laravel microsoft-teams monitoring slack throttle
Last synced: 3 days ago
JSON representation
Send alert to email, microsoft teams from laravel app, when an exception occurs. Throttle is enabled by default.
- Host: GitHub
- URL: https://github.com/kevincobain2000/laravel-alert-notifications
- Owner: kevincobain2000
- License: mit
- Created: 2019-03-11T06:16:44.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-11-25T14:11:23.000Z (about 2 months ago)
- Last Synced: 2025-01-13T16:11:27.663Z (10 days ago)
- Topics: alerts, email, laravel, microsoft-teams, monitoring, slack, throttle
- Language: PHP
- Homepage:
- Size: 111 KB
- Stars: 26
- Watchers: 4
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Laravel Alert Notifcations
Send php exceptions to email, microsoft teams, slack.
Notifications are throttle enabled so devs don't get a lot of emails from one host
(or all hosts if cache driver is shared).[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)
| Channels | Progress |
| :------- | :--------- |
| Email | Supported |
| Microsoft Teams | Supported |
| Slack | Supported |
| Pager Duty | Open to pull requests |### Installation
```
composer require kevincobain2000/laravel-alert-notifications
```>If you're using Laravel 5.5+ let the package auto discovery make this for you.
```
'providers' => [
\Kevincobain2000\LaravelAlertNotifications\AlertNotificationsServiceProvider::class
]
```### Tests
```
composer install
composer run test
```### Publish (Laravel)
```
php artisan vendor:publish --provider="Kevincobain2000\LaravelAlertNotifications\AlertNotificationsServiceProvider"
php artisan config:cache
```### Publish (Lumen)
Since Lumen doesn't support auto-discovery, move config and view files to the destination directories manually
```shell
cp vendor/kevincobain2000/laravel-alert-notifications/src/config/laravel_alert_notifications.php config/laravel_alert_notifications.php
mkdir -p "resources/views/vendor/laravel_alert_notifications/" && cp vendor/kevincobain2000/laravel-alert-notifications/src/views/* resources/views/vendor/laravel_alert_notifications/
```and add the following to bootstrap/app.php:
```php
$app->register(Kevincobain2000\LaravelAlertNotifications\AlertNotificationsServiceProvider::class);
```### .env
```
ALERT_NOTIFICATION_MAIL_FROM_ADDRESS=
ALERT_NOTIFICATION_MAIL_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_NOTICE_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_WARNING_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_ERROR_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_CRITICAL_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_ALERT_TO_ADDRESS=
ALERT_NOTIFICATION_MAIL_EMERGENCY_TO_ADDRESS=
ALERT_NOTIFICATION_CACHE_DRIVER=file
ALERT_NOTIFICATION_MICROSOFT_TEAMS_WEBHOOK=
ALERT_NOTIFICATION_SLACK_WEBHOOK=
ALERT_NOTIFICATION_CURL_PROXY=
```### Usage
```php
new AlertDispatcher(
Exception $e
[, array $dontAlertExceptions = []] // Exceptions that shouldn't trigger notifications
[, array $notificationLevelsMapping = []] // [Exception class => Notification level] mapping
[, array $exceptionContext = []] // Array of context data
)
```In **app/Exceptions/Handler.php**. It is better to use a try catch to prevent loop.
```php
use Kevincobain2000\LaravelAlertNotifications\Dispatcher\AlertDispatcher;class Handler extends ExceptionHandler
{
private $exceptionLogLevels = [
DebugLevelException::class => LogLevel::DEBUG,
WarningLevelException::class => LogLevel::WARNING,
ErrorLevelException::class => LogLevel::ERROR,
];protected $dontReport = [
//
];public function report(Throwable $exception)
{
try {
$dontReport = array_merge($this->dontReport, $this->internalDontReport);
$alertDispatcher = new AlertDispatcher($exception, $dontReport, $this->exceptionLogLevels);
$alertDispatcher->notify();
} catch (Throwable $e) {
// log any unexpected exceptions or do nothing
}
parent::report($exception);
}
}
```### Config
| config/env key | purpose |
| :---------- | :-------------- |
| throttle_enabled | (default true) If false then library will send alerts without any throttling |
| throttle_duration_minutes | (default 5 mins) If an exception has been notified |
| | This will next notify after 5 mins when same exception occurs |
| cache_prefix | This is a prefix for cache key. Your cache key will look like |
| | ``laravel-alert-notifications-ExceptionClass-ExceptionCode`` |
| ALERT_NOTIFICATION_CURL_PROXY | If your slack/MS teams require proxy, then set it up accordingly |
| default_notification_level | Default notification level |
| exclude_notification_levels | Do not send notification if it is of one of the listed level |
| mail | E-mail config array: |
| mail.enabled | (default true), false will not notify to email |
| mail.fromAddress | (default null), null will not notify to email |
| mail.toAddress | Default recipient e-mail address |
| mail.subject | Default e-mail subject. May contain placeholders replaced afterwards with |
| | correspondent exception data: |
| | ``%ExceptionMessage%`` => ``$e->getMessage()`` |
| | ``%ExceptionCode%`` => ``$e->getCode()`` |
| | ``%ExceptionType%`` => ``$e->getType()`` |
| | ``%ExceptionLevel%`` => ``current notification level`` |
| | ex. ``'subject' => 'Exception [%ExceptionType%] has ocurred``' | |
| mail.#level# | Configs for each notification level |
| | notification levels refer to those defined in ``\Psr\Log\LogLevel`` |
| mail.#level#.toAddress | (default mail.to_address), #level# notification recipient e-mail |
| mail.#level#.subject | #level# notification e-mail subject |
| microsoft_teams.enabled | (default true), false will not notify to teams |
| microsoft_teams.webhook | (default null), null will not notify to teams |
| slack.enabled | (default true), false will not notify to slack |
| slack.webhook | (default null), null will not notify to slack |### Samples
#### Teams
#### Slack
### References
1. https://qiita.com/kidatti/items/8732114ec4d1727844b8
2. https://laravel-news.com/email-on-error-exceptions## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Aaron Brigham
⚠️ 💻
Alexander Hupe
👀 ⚠️ 💻
Kit Loong
👀 ⚠️ 💻
Andrew Miller
👀 ⚠️ 💻
Pulkit Kathuria
👀 ⚠️ 💻
Masashi
⚠️
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!