哮天犬告警通知SDK

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

特性

支持协程/非协程模式自动切换

支持 Laravel5 ~ Laravel7 开箱即用

支持 Lumen5 ~ Lumen7 开箱即用

支持 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' => '您的余额已不足',

];

/**

* 方法一:直接实例化

*/

$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

配置文件发布

$ 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,配置说明请参考下面章节 配置项说明

告警发送

/**

* 方法一:直接实例化

*/

// 请参考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框架不支持配置文件自动发布,需要在 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 && cp vendor/alarm-dog/alarm/config/dog.php config/

配置文件在 config/dog.php,配置说明请参考下面章节 配置项说明

告警发送

/**

* 方法一:直接实例化

*/

// 请参考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 即可直接开始使用告警功能。

use GuzzleHttp\MessageFormatter;

use GuzzleHttp\Middleware;

use Psr\Http\Message\RequestInterface;

use Psr\Http\Message\ResponseInterface;

/**

* 哮天犬配置文件

*/

return [

// 告警任务ID

'taskid' => (int) env('DOG_TASKID'),

// 告警任务token

// 获取方法请参考: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' => [

// guzzle原生配置选项,请参考文档:https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html

'options' => [

'http_errors' => false,

'connect_timeout' => 0,

'timeout' => 0,

// hyperf集成guzzle的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<<<<<<<

// $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');

// }

],

// hyperf集成guzzle的连接池配置选项,非hyperf框架忽略

// 连接池可以参考hyperf官方的文档:https://hyperf.wiki/2.0/#/zh-cn/guzzle

'pool' => [

'option' => [

'max_connections' => 200,

]

]

],

];

php alarm,GitHub - tal-tech/alarm-dog-php-sdk: 哮天犬告警平台PHP SDK相关推荐

  1. linux alarm定时器,Linux 定时器alarm()(转)

    系统中的每个进程都有一个私有的闹钟.这个闹钟很像一个计时器,可以设置在一定秒数后闹钟.时间一到,时钟就发送一个信号SIGALRM到进程. 函数原型:unsigned int alarm(unsigne ...

  2. linux alarm 多个,linux alarm定时设置

    早就知道这个函数,但是学了不用还是不会,最近一个项目需要实现,触摸屏背光时间的功能,找遍了厂家提供的驱动接口, 都没有找到相关调用,回想有alarm函数,20多行代码就实现了这个功能. 使用alarm ...

  3. android系统的alarm机制,Android中Alarm的机制

    本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...

  4. linux内核alarm,linux C之alarm函数

    alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程.如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回.要注意 ...

  5. 超50万行代码、GitHub 4200星:腾讯重磅发布全栈机器学习平台Angel 3.0

    来源:新智元编辑部 [新智元导读]腾讯首个AI开源项目Angel,正式发布一个里程碑式的版本:Angel 3.0.这是一个全栈的机器学习平台,功能特性涵盖了机器学习的各个阶段,超过50万行代码,在 G ...

  6. GitHub 热榜:轻量级无 Agent 的自动化运维平台!

    大家好,我是 JackTian. 作为一名运维工程师,大家都知道.早在几年前,偏传统运维,以 cacti.nagios 为主流,到后来的 zabbix.Prometheus.Open-Falcon 等 ...

  7. php sdk微信,GitHub - swayer/wechat-php-sdk: 微信公众平台 PHP SDK

    微信公众平台 PHP SDK 介绍 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App .测试方法如下: Clone 或下载项目源码,上传至服务器. 进入微信公众 ...

  8. 微信公众号 php sdk,GitHub - yuanchenglu/wechat-php-sdk: 微信公众平台 PHP SDK

    微信公众平台 PHP SDK 介绍 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App .测试方法如下: Clone 或下载项目源码,上传至服务器. 进入微信公众 ...

  9. Hex Tech,一个带编程协同能力的 BI 平台的“危”与“机”

    数据从业者常在多种工具之间跳来跳去,这种碎片化导致了协作.共享和生产力方面的问题. 企业云数据量的增加以及数据转换.模型构建和可视化工具的出现,推动了现代数据堆栈的崛起.大部分公司都在加大对数据团队的 ...

最新文章

  1. 杭州网络推广带大家了解404页面的作用以及对网站优化的优势
  2. 实验1 Windows汇编语言开发环境
  3. 基于diff的文件同步算法(上)
  4. 微盟耗时 145 个小时弥补删库,血亏 1.5 亿元!
  5. redis-数据类型-列表list类型
  6. CF Educational Codeforces Round 57划水记
  7. 21 个必须知道的机器学习开源工具!
  8. ARP欺骗原理 [转]
  9. 干货满满,图文详解 HDFS 的 工作机制 及其原理
  10. java batik_batik详解1
  11. 7.4 倒向随机微分方程-Feynman-Kac公式
  12. 多元统计分析及R语言建模(王斌会)第五、六、七章答案
  13. 联通数据采集交换平台BDE的配置
  14. clonezilla(再生龙)克隆linux系统 操作指南
  15. html怎么控制行的字数,怎样控制Word文档一页的行数和每行的字数?
  16. docker命令大全英文版在线手册
  17. 张鑫旭html入门,HTML audio基础API完全使用指南
  18. 来自520的福利----视频直播平台性能测试
  19. 打怪升级之Windows程序基本观
  20. 5.1. Table Basics

热门文章

  1. 细说 python与其他编程语言区别
  2. 算法分析 | 动态规划 | 石子合并问题
  3. 【蓝桥杯2018Java】哪天返回、猴子分香蕉
  4. 事业单位计算机技术岗位中级职称,事业单位中级职称能聘任为中级岗位吗
  5. 零基础HTML入门教程(17)——表单的单选框和复选框
  6. [拜读系列]SEC'' 2018: ACM/IEEE Symposium on Edge Computing 总结(二)
  7. eve-ng登录没反应?
  8. 2021第三届传智杯决赛全题解
  9. 高光谱图像处理和分析
  10. mysql级联删除外键约束_MySQL外键设置 级联删除