哮天犬告警通知SDK
Данный SDK представляет собой реализацию PHP-интерфейса для системы мониторинга и оповещения «Воющий пёс». Он обеспечивает удобный способ использования, который позволяет сразу приступить к работе после установки.
Особенности:
Установка:
composer require alarm-dog/alarm
Использование:
composer require hyperf/guzzle
$ php bin/hyperf.php vendor:publish alarm-dog/alarm
Scanning app ...
Scan app completed, took 171.40197753906 milliseconds.
Detected an available cache, skip the vendor scan process.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Paginator\Listener\PageResolverListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Di\Listener\BootApplicationListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.
[alarm-dog/alarm] publishes [config] successfully.
Конфигурационный файл находится в config/autoload/dog.php
. Подробности конфигурации см. в разделе «Конфигурация» ниже.
use Dog\Alarm\Alarm;
use Dog\Alarm\Exception\AlarmException;
$content = [
'errno' => 10086,
'error' => '您的余额已不足',
];
/**
* Метод 1: прямое создание экземпляра
*/
$alarm = new Alarm();
try {
/**
* Alarm::report метод возвращает объект \Psr\Http\Message\ResponseInterface
* @var \Psr\Http\Message\ResponseInterface $response
*/
$response = $alarm->report($content);
$array = $alarm->resolveResponse($response);
/**
Структура массива $array выглядит следующим образом:
array(3) {
["data"]=>
array(2) {
["uuid"]=>
string(36) "74bfd2d8-a1c9-434b-9098-50efc0f08ee2"
["report_time"]=>
string(19) "2020-06-26 20:50:19"
}
["msg"]=>
string(7) "success"
["code"]=>
int(0)
}
*/
// Если нужно сделать всё за один раз, можно использовать
$array = $alarm->resolveResponse($alarm->report($content));
} catch (AlarmException $e) {
// При сбое отправки уведомления будет выброшено это исключение
}
// Указание времени уведомления:
$alarm->report($content, time());
// Указание уровня уведомления
$alarm->report($content, null, Alarm::LEVEL_ERROR);
// Определение списка получателей уведомления
$alarmGroups = [1, 2];
$channelDingGroup = new DingGroup([
['webhook' => 'webhook1', 'secret' => 'secret1'],
['webhook' => 'webhook2', 'secret' => 'secret2'],
]);
$channelYachGroup = new YachGroup();
$channelYachGroup->addRobot('webhook1', 'secret1')->addRobot('webhook2', 'secret2')
->addRobots([
['webhook' => 'webhook3', 'secret' => 'secret3'],
['webhook' => 'webhook4', 'secret' => 'secret4'],
]); // Второй параметр true означает полную замену, перезапись предыдущего значения, по умолчанию false
$channelDingWorker = new DingWorker([98664, 98665]);
$channelEmail = new Email();
$channelEmail->addUid(98664)->addUid(98665)->addUids([98666, 98667]);
$channels = [$channelDingGroup, $channelYachGroup];
$receiver = new Receiver($alarmGroups, $channels);
// Или $receiver = new Receiver([], $channels);
// Или $receiver = new Receiver($alarmGroups);
// Или $receiver = new Receiver();
$receiver->addAlarmGroup(1)
->addAlarmGroup(3)
->addAlarmGroups([1, 5], true) // Второй параметр true означает полную замену, перезапись предыдущего значения, по умолчанию false
->addChannel($channelDingWorker)
->addChannel(new DingWorker([1]))
->addChannels($channels);
// Вышеприведённый код предназначен только для демонстрации всех доступных методов SDK
// Назначение временного получателя уведомления
$alarm->report($content, null, null, $receiver);
/**
* Способ 2: использование make
*/
// Оставшаяся часть кода аналогична способу 1
$alarm = make(Alarm::class);
/**
* Способ 3: использование аннотации @Inject, рекомендуется
*/
/**
* Обратите внимание на импорт пространства имён для Inject
* @Inject
* @var Alarm
*/
protected $alarm;
// Оставшаяся часть кода аналогична способу 1
$this->alarm->report($content);
/**
* Способ 4: использование контейнера Container, рекомендуется
*/
// Оставшаяся часть кода аналогична способу 1
$alarm = ApplicationContext::getContainer()->get(Alarm::class);
// или
$alarm = $container->get(Alarm::class);
// или
$alarm = $this->container->get(Alarm::class);
/**
* Тестирование отправки уведомлений
* Используется для проверки законности taskid и token, без реальной отправки уведомлений
*/
try {
$result = $alarm->test();
// Тестирование успешно
} catch (Throwable $e) {
// Тестирование неудачно
$errMsg = $e->getMessage();
}
$ php artisan vendor:publish --provider="Dog\Alarm\Provider\LaravelServiceProvider"
Copied File [/alarm-dog-php-sdk/config/dog.php] To [/config/dog.php]
Publishing
``` Конфигурационный файл находится в `config/dog.php`, описание конфигурации см. в следующем разделе [«Описание конфигурации»](#описание-конфигурации).
### Отправка оповещений
```php
/**
* Метод один: прямая инстанциация
*/
// См. прямую инстанциацию в Hyperf
/**
* Метод два: использование вспомогательной функции app(), рекомендуется
*/
// Использовать так же, как и в Hyperf для оставшейся части метода один
$alarm = app(Alarm::class);
/**
* Метод три: использование фасада (Facade), рекомендуется
*/
use Dog\Alarm\Provider\Laravel\AlarmFacade;
$response = AlarmFacade::report($content);
$array = AlarmFacade::resolveResponse($response);
$array = AlarmFacade::resolveResponse(AlarmFacade::report($content));
// Можно видеть, что использование AlarmFacade аналогично использованию new Alarm(), но Facade предоставляет статический доступ к методам. Для оставшейся части использовать так же, как в Hyperf метод один.
Lumen не поддерживает автоматическую публикацию конфигурационных файлов, необходимо настроить $app->register(Dog\Alarm\Provider\LumenServiceProvider::class);
в bootstrap/app.php
:
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Здесь мы регистрируем все сервисные провайдеры приложения, которые
| используются для привязки сервисов к контейнеру. Сервисные провайдеры
| полностью необязательны, поэтому вам не нужно раскомментировать эту строку.
|
*/
// $app->register(App\Providers\AppServiceProvider::class);
// $app->register(App\Providers\AuthServiceProvider::class);
// $app->register(App\Providers\EventServiceProvider::class);
$app->register(Dog\Alarm\Provider\LumenServiceProvider::class);
/*
|--------------------------------------------------------------------------
| Load The Application Routes
|--------------------------------------------------------------------------
|
| Далее мы включим файл маршрутов, чтобы они могли быть добавлены в
| приложение. Это обеспечит все URL, на которые может ответить приложение,
| а также контроллеры, которые могут их обрабатывать.
|
*/
mkdir config && cp vendor/alarm-dog/alarm/config/dog.php config/
Конфигурационный файл находится в config/dog.php
, описание конфигурации см. в следующем разделе «Описание конфигурации»
/**
* Метод один: прямая инстанциация
*/
// См. прямую инстанциацию в Hyperf
/**
* Метод два: использование вспомогательной функции app(), рекомендуется
*/
// Использовать так же, как и в Hyperf для оставшейся части метода один
$alarm = app(Alarm::class);
/**
* Метод три: использование фасада (Facade), необходимо, чтобы Lumen поддерживал фасады, рекомендуется
*/
use Dog\Alarm\Provider\Laravel\AlarmFacade;
$response = AlarmFacade::report($content);
$array = AlarmFacade::resolveResponse($response);
$array = AlarmFacade::resolveResponse(AlarmFacade::report($content));
// Можно видеть, что использование AlarmFacade аналогично использованию new Alarm(), но Facade предоставляет статический доступ к методам. Для оставшейся части использовать так же, как в Hyperf метод один.
Если фреймворк не входит в список поддерживаемых, можно напрямую инстанцировать объект, а затем настроить вручную, например:
$alarm = new Alarm();
$alarm->setTaskid(1);
$alarm->setToken('token');
// Если необходимо изменить вызываемый домен, можно вызвать $alarm->setBaseUri('http://alarm-dog-service.domain.com/alarm/report');
// Если необходимо настроить guzzle, можно вызвать $alarm->setGuzzleConfig($guzzleConfig); формат конфигурации см. в массиве guzzle в config/dog.php
// Для оставшейся части использовать так же, как в Hyperf метод один
$response = $alarm->report($content);
В конфигурационном файле по умолчанию используется функция env
, которая доступна не во всех фреймворках. В Hyperf/Laravel/Lumen можно настроить правильные DOG_TASKID
и DOG_TOKEN
непосредственно в файле .env
.
<?php
use GuzzleHttp\MessageFormatter;
use GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
* Конфигурационный файл «Воющего пса»
*/
return [
// Идентификатор задачи оповещения
'taskid' => (int) env('DOG_TASKID'),
// Токен задачи оповещения
// Метод получения см.: https://tal-tech.github.io/alarm-dog-docs/quick-start/alarm.html#step4%EF%BC%9A%E5%91%8A%E8%AD%A6%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95
'token' => env('DOG_TOKEN'),
// Адрес оповещения, по умолчанию: http://alarm-dog-service.domain.com
// См. документацию по среде: https://tal-tech.github.io/alarm-dog-docs/alarm/alarm-api.html
'base_uri' => env('DOG_BASE_URI'),
/**
* Конфигурация GuzzleHttp
*/
'guzzle' => [
// Параметры конфигурации GuzzleHttp, см. документацию: https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html
'options' => [
'http_errors' => false,
'connect_timeout' => 0,
'timeout' => 0,
// Интеграция Guzzle с swoole в Hyperf, параметры конфигурации swoole
'swoole' => [
'timeout' => 10,
'socket_buffer_size' => 1024 * 1024 * 2,
],
],
// Конфигурация промежуточного программного обеспечения Guzzle, см. документацию: https://guzzle-cn.readthedocs.io/zh_CN/latest/handlers-and-middleware.html
'middlewares' => [
// Промежуточное программное обеспечение для повторной попытки после сбоя
'retry'
``` => function ($container = null) {
return Middleware::retry(function ($retries, RequestInterface $request, ResponseInterface $response = null) {
if (
(! $response || $response->getStatusCode() >= 500) &&
$retries < 1
) {
return true;
}
return false;
}, function () {
return 10;
});
},
// // 请求日志记录中间件
// 'logger' => function ($container = null) {
// // $format中{response}调用$response->getBody()会导致没有结果输出
// $format = ">>>>>>>>\n{request}\n<<<<<<<<\n{res_headers}\n--------\n{error}";
// $formatter = new MessageFormatter($format);
// // 在其他框架将$logger进行正确替换即可
// // hyperf框架请使用下发方式获得Logger
// // $logger = \Hyperf\Utils\ApplicationContext::getContainer()
// // ->get(\Hyperf\Logger\LoggerFactory::class)
// // ->get('influx-guzzle');
// // laravel框架请使用下发方式获得Logger
// // $logger = \Illuminate\Support\Facades\Log::getLogger();
// return Middleware::log($logger, $formatter, 'debug');
// },
'pool' => [
'option' => [
'max_connections' => 200,
]
]
],
];
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )