PHPackages                             alarm-dog/alarm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. alarm-dog/alarm

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

alarm-dog/alarm
===============

哮天犬告警平台告警SDK

v1.0.0(5y ago)73.6k7PHPPHP &gt;=5.5

Since Oct 27Pushed 5y ago9 watchersCompare

[ Source](https://github.com/tal-tech/alarm-dog-php-sdk)[ Packagist](https://packagist.org/packages/alarm-dog/alarm)[ RSS](/packages/alarm-dog-alarm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

哮天犬告警通知SDK
==========

[](#哮天犬告警通知sdk)

该SDK为哮天犬监控告警平台告警接口的PHP实现，增加了非常友好的方式使用，开箱即用。

特性
==

[](#特性)

- 支持协程/非协程模式自动切换
- 支持 Laravel5 ~ Laravel7 开箱即用
- 支持 Lumen5 ~ Lumen7 开箱即用
- 支持 Hyperf 开箱即用
- 支持任意场景、框架使用
- 支持告警请求发送失败重试
- 支持记录请求日志

安装
==

[](#安装)

composer require alarm-dog/alarm

使用
==

[](#使用)

Hyperf
------

[](#hyperf)

### 协程版Guzzle依赖安装

[](#协程版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`，配置说明请参考下面章节 [配置项说明](#%E9%85%8D%E7%BD%AE%E9%A1%B9%E8%AF%B4%E6%98%8E)

### 告警发送

[](#告警发送)

```
use Dog\Alarm\Alarm;
use Dog\Alarm\Exception\AlarmException;

$content = [
    'errno' => 10086,
    'error' => '您的余额已不足',
];

/**
 * 方法一：直接实例化
 */
$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);

/**
 * 方法二：使用make
 */
// 剩下使用方法同方法一
$alarm = make(Alarm::class);

/**
 * 方法三：使用@Inject注解，推荐
 */

/**
 * 注意Inject的命名空间引入
 * @Inject
 * @var Alarm
 */
protected $alarm;
// 剩下使用方法同方法一
$this->alarm->report($content);

/**
 * 方法四：使用容器Container，推荐
 */
// 剩下使用方法同方法一
$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
-------

[](#laravel)

### 配置文件发布

[](#配置文件发布-1)

```
$ php artisan vendor:publish --provider="Dog\Alarm\Provider\LaravelServiceProvider"

Copied File [/alarm-dog-php-sdk/config/dog.php] To [/config/dog.php]
Publishing complete.

```

配置文件在 `config/dog.php`，配置说明请参考下面章节 [配置项说明](#%E9%85%8D%E7%BD%AE%E9%A1%B9%E8%AF%B4%E6%98%8E)

### 告警发送

[](#告警发送-1)

```
/**
 * 方法一：直接实例化
 */
// 请参考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)

### 配置文件发布

[](#配置文件发布-2)

Lumen框架不支持配置文件自动发布，需要在 `bootstrap/app.php` 中配置 `$app->register(Dog\Alarm\Provider\LumenServiceProvider::class);`，例如：

```
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/

// $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
|--------------------------------------------------------------------------
|
| Next we will include the routes file so that they can all be added to
| the application. This will provide all of the URLs the application
| can respond to, as well as the controllers that may handle them.
|
*/
```

mkdir config &amp;&amp; cp vendor/alarm-dog/alarm/config/dog.php config/

配置文件在 `config/dog.php`，配置说明请参考下面章节 [配置项说明](#%E9%85%8D%E7%BD%AE%E9%A1%B9%E8%AF%B4%E6%98%8E)

### 告警发送

[](#告警发送-2)

```
/**
 * 方法一：直接实例化
 */
// 请参考Hyperf中直接实例化

/**
 * 方法二：使用app()助手函数，推荐
 */
// 剩下使用方法同Hyperf章节中的方法一
$alarm = app(Alarm::class);

/**
 * 方法三：使用门面Facade，必须Lumen开启了对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章节中的方法一
```

无框架或者其他框架
---------

[](#无框架或者其他框架)

不在自动支持的框架范围内，可以直接实例化，然后手动配置，例如：

```
$alarm = new Alarm();
$alarm->setTaskid(1);
$alarm->setToken('token');
// 如果需要修改调用域名，可以调用 $alarm->setBaseUri('http://alarm-dog-service.domain.com/alarm/report');
// 如果需要配置guzzle，可以调用 $alarm->setGuzzleConfig($guzzleConfig); 配置格式请参考config/dog.php中guzzle下面的数组

// 剩下使用方法同Hyperf章节中的方法一
$response = $alarm->report($content);
```

配置项说明
=====

[](#配置项说明)

默认配置文件使用了 `env` 函数，不是所有的框架都有该函数，请根据情况修改。

在 Hyperf/Laravel/Lumen 框架中，直接在 `.env` 文件中配置正确的 `DOG_TASKID`、`DOG_TOKEN` 即可直接开始使用告警功能。

```
