1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ta-tech-team-alarm-dog-php-sdk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

哮天犬告警通知SDK

Данный SDK представляет собой реализацию PHP-интерфейса для системы мониторинга и оповещения «Воющий пёс». Он обеспечивает удобный способ использования, который позволяет сразу приступить к работе после установки.

Особенности:

  • Поддержка автоматического переключения между режимами сопрограмм и не сопрограмм.
  • Поддержка Laravel 5–7 «из коробки».
  • Поддержка Lumen 5–7 «из коробки».
  • Поддержка Hyperf «из коробки».
  • Возможность использования в любых сценариях и фреймворках.
  • Повторные попытки отправки запроса при неудаче.
  • Ведение журнала запросов.

Установка:

composer require alarm-dog/alarm

Использование:

Hyperf

Зависимость Guzzle для сопрограмм
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();
}

Laravel

Публикация конфигурационного файла

$ 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

Публикация конфигурационного файла

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Воутинг дог комплайнс платформм PHP SDK. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/ta-tech-team-alarm-dog-php-sdk.git
git@api.gitlife.ru:oschina-mirror/ta-tech-team-alarm-dog-php-sdk.git
oschina-mirror
ta-tech-team-alarm-dog-php-sdk
ta-tech-team-alarm-dog-php-sdk
master