php对接钉钉_php实现钉钉业务报警机器人

使用场景,服务器报异常错误,想要及时收到报警信息并处理

环境介绍,本博使用yaf框架+php,仅仅提供思路,参考,具体根据自己实际情况进行编写

1,每十分钟执行一次任务脚本

# 每10分钟执行一次的任务

if [ "0" -eq "$(($minute % 10))" ]; then

php -f ${pathRoot}public/index.php 'request_uri=/error/dingdingLog'

fi

/**

* error action

*

* @return bool

* @throws Exception

*/

public function errorAction()

{

$req = $this->getRequest();

$exception = $req->getException();

//来自接口的错误

if ($exception instanceof ApiException) {

return $this->json($exception->getCode(), $exception->getMessage());

}

//其它异常

if ($this->yafAutoRender) {

$exceptions = [];

if (! $exception instanceof Exception) {

$exception = new Yaf\Exception\LoadFailed('no exception');

}

//add exception

$exceptions[] = $exception;

//show trace

$this->getView()->exceptions = $exceptions;

Yaf\Dispatcher::getInstance()->autoRender(true);

} else {

if ($exception instanceof Yaf\Exception\LoadFailed) { //接口不存在

$this->log($exception, ApiException::NOT_EXISTS);

return $this->json(ApiException::NOT_EXISTS, $exception->getMessage());

}

$this->log($exception);

return $this->json(ApiException::FATAL, $exception->getMessage());

}

}

5,修改框架错误日志log写入方法

/**

* error log

*

* @param Exception $exception

* @param int $error_code 0-正常报错

*/

private function log($exception, $error_code = 0)

{

//log exception

$msg = sprintf("%s:%s. in %s on line %s, trace:%s",

get_class($exception),

$exception->getMessage(),

$exception->getFile(),

$exception->getLine(),

$exception->getTraceAsString()

);

// 排除 404 的报错才推送

// there is not method / not such file or diractory

if ($error_code != ApiException::NOT_EXISTS) {

$this->saveLog($exception->getMessage());

}

LK::log()->error($msg);

}

如上所示,我将一部分日志写入redis

6,保存日志

public function saveLog($msg)

{

$redis = LK::redis('log');

$key = md5($msg);

$saved = $redis->sadd('error_log', $key);

if ($saved) {

$redis->setex($key, 1100, $msg);

}

return $saved;

}

7,读取redis消息,给钉钉推送错误消息

public function dingdingLogAction()

{

$redis = LK::redis('log');

$keys = $redis->sMembers('error_log');

if (count($keys)) {

foreach ($keys as $key) {

if (false != ($msg = $redis->get($key))) {

Func::dingdingLog($msg);

}

}

$redis->del('error_log');

}

}

8,curl上面那个地址,具体信息自行修改

/**

* 钉钉消息推送

* 推到钉钉 php+web 群

* @return bool

*/

public static function dingdingLog($msg)

{

$url = 'https://oapi.dingtalk.com/robot/send?access_token=XXXXXX';

$env = \Yaf\Application::app()->environ();

$fix = 'somi';

$time = date('Y-m-d H:i:s');

$data = [

'msgtype' => 'text',

'text' => [

'content' => "[{$fix}:{$env}:{$time}]:{$msg}",

]

];

$data_string = json_encode($data);

$resp = \Frame\Core\Tools::curl($url, 'POST', $data_string, ['Content-Type: application/json;charset=utf-8']);

$resp = json_decode($resp, true);

if ($resp['errorcode']) {

return false;

}

return true;

}

9,如图是我的报警信息示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】30 岁前实现财务自由的人,都做对了哪些事?

不光是30岁,凡是能实现财务自由的,都有一个特点,这个特点叫做: 做庄思维。 在出现近现代法制社会之前,财富的原始积累最快的方式总结起来说到底都是“抢”和“骗”,然后既得利益者为了保护自己的胜利果实…

protobuf2和3同时安装_在 Ubuntu 上安装 Protobuf 3 的教程详解

什么时候需要安装如果使用 protoc 命令,遇到 Protoc not found,表示未安装。或者,执行时出现错误:This parser only recognizes "proto2",则表示不是3.0版。安装过程及可能遇到的问题安装指令详细介绍请参考…

【转】WPF中关于样式和模板的区别

1.WPF样式 类似于Web应用程序中的CSS&#xff0c;在WPF中可以为控件定义统一的样式(Style)。样式属于资源的一种&#xff0c;例如为Button定义统一的背景颜色和字体&#xff1a; <Window.Resources> <Style TargetType"Button"> <Setter Property&quo…

Qt实现多屏幕多分辨率自适应

这里仅大概描述一下实现思路。 运行条件 两个屏幕&#xff0c;分辨率不同。Qt软件 问题提出 前段时间写了一个软件&#xff0c;窗口内有自绘内容。 自绘内容里面用的长度单位都是像素。可想而知&#xff0c;在开发者的电脑屏幕上大小都是符合要求的。到这一步都没问题。 软…

您需要来自pc的权限才能_微信电脑版还是鸡肋吗?微信PC版3.0内测体验

[PConline 应用]微信PC版3.0来了&#xff01;这到底是个怎样的版本&#xff1f;先说结果吧&#xff0c;好消息是微信PC端新版很快就要上线了&#xff0c;坏消息是这一回采用是邀请内测制&#xff0c;注定了很多人只能等到正式上线后&#xff0c;才能见到新版本&#xff01;目前…

【转】【MySQL】事务与锁(四):行锁到底锁住的是什么?记录?字段?索引?

首先我们有三张表t1,t2,t3&#xff0c;它们都是只有两个字段&#xff0c; int类型的id和varchar类型的name&#xff1b;区别是t1没有索引&#xff0c;t2有主键索引&#xff0c;t3有唯一索引。 再强调一次&#xff0c;在实验前必须提前关闭自动提交&#xff0c;set autocommitof…

【编译原理】理解BNF

BNF范式 下面来自百度百科&#xff1a; 巴科斯范式&#xff08;BNF&#xff09;所描述的语法是与上下文无关的。它具有语法简单&#xff0c;表示明确&#xff0c;便于语法分析和编译的特点。 源码解析使用的算法就是BNF或者其改进算法。 什么是上下文无关文法呢&#xff1f; …

gibmacos 网络加速_黑苹果教程续集,利用EFI在线安装MacOS

本内容来源于什么值得买APP&#xff0c;观点仅代表作者本人 &#xff5c;作者&#xff1a;qianseyue创作立场声明&#xff1a;本人非某领域/某品牌从业人员&#xff0c;有机会学到一些专业知识。然而每个人站在不同立场&#xff0c;内容就会有所偏重&#xff0c;客观与否还请大…

【转】1.1【MySQL】基本SQL语句大全

1.库操作 登录数据库&#xff08;-h -u -p -P都不需要空格&#xff09; mysql -h {ip} -u {username} -p{password} -P {port} # -h ip默认是 localhost # -p 指定密码时中间不要空格&#xff0c;比如 -p123456 # -P 端口默认是 3306 1.1 增 create database 库名1.2 删 dr…

【GUI开发】图像处理类软件的浏览功能实现模型

图像处理软件包括但不限于&#xff1a; 图片浏览器&#xff0c;2D地图浏览器、图片编辑器等软件。 为了处理大分辨率图片&#xff0c;一般采用GDAL加载图像&#xff0c;GDAL可以动态加载图像的一部分&#xff0c;可以建立图像金字塔&#xff0c;优化加载速度。 一般的图像处理…

自动事务_JDBC进阶(二)事务编程

一、事务简介事务是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。事务具有ACID特性&#xff1a;原子性&#xff08;Atomicity&#xff09; —— 原子性是指事务是一个不可分割的工作单位&#xff0c…

【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?

数据库锁 因为数据库要解决并发控制问题。在同一时刻&#xff0c;可能会有多个客户端对同一张表进行操作&#xff0c;比如有的在读取该行数据&#xff0c;其他的尝试去删除它。为了保证数据的一致性&#xff0c;数据库就要对这种并发操作进行控制&#xff0c;因此就有了锁的概…

【精华】详解Qt中的内存管理机制

前言 内存管理&#xff0c;是对软件中内存资源的分配与释放进行有效管理的方法和理论。 众所周知&#xff0c;内存管理是软件开发的一个重要的内容。软件规模越大&#xff0c;内存管理可能出现的问题越多。如果像C语言一样手动地管理内存&#xff0c;一会给开发人员带来巨大的…

a标签里面设置onclick_实现a标签中的各种点击(onclick)事件的方法

我们常用的在a标签中有点击事件&#xff1a;1. a href"javascript:js_method();"这是我们平台上常用的方法&#xff0c;但是这种方法在传递this等参数的时候很容易出问题&#xff0c;而且javascript:协议作为a的href属性的时候不仅会导致不必要的触发window.onbefore…

【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析

MySQL的发展历史和版本分支&#xff1a; 时间里程碑1996 年MySQL1.0 发布。它的历史可以追溯到 1979 年&#xff0c;作者 Monty 用 BASIC 设计的一个报表工具。1996 年 10 月3.11.1 发布。MySQL 没有 2.x 版本。2000 年ISAM 升级成 MyISAM 引擎。MySQL 开源。2003 年MySQL4.0 …

docker多个容器一起打包_如何链接多个Docker容器并封装结果?

在另一个容器中运行容器意味着在Docker容器中运行Docker引擎.这被称为Docker-in-Docker的dind,我强烈反对它.你可以在线搜索’dind’并发现为什么在大多数情况下这是一个坏主意,但由于它不是你问题的主要对象,我不会进一步扩展这个主题.在同一容器中运行node.js进程和neo4j进程…

【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析

前一篇讲完了查询流程&#xff0c;我们是不是再讲讲更新流程、插入流程和删除流程&#xff1f;在数据库里面&#xff0c;我们说的update操作其实包括了更新、插入和删除。如果大家有看过MyBatis的源码&#xff0c;应该知道Executor里面也只有doQuery()和doUpdate()的方法&#…

单片机ch2o程序_基于单片机的室内甲醛浓度检测系统

基于单片机的室内甲醛浓度检测系统田秀荣【期刊名称】《山西电子技术》【年(卷),期】2014(000)003【摘要】Aseveryoneknows,theharmfulgasremainedbyhousedecorationandinferiorfurnitureismainlyformaldehydewhichhasgreat harm to human body health , many diseases is rele…

【转】MySQL中select * for update锁表的问题

MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock&#xff0c;所以只有「明确」的指定主键&#xff0c;MySQL才会执行Row lock (只锁住被选取的资料例) &#xff0c;否则MySQL将会执行Table Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单produc…

apqp过程流程图范本_APQP项目资料清单excel格式(全套)

APQP项目开发全套资料明细表设施要求新增刀具验收报告 量具、试验装备 要求 量具试验装备清单 新增量具试验装备计划技术/生产 技术/质保 采购▲ ★ ▲ ▲2.162.17项目组 新设备、工装和 A-3新设备、工装、刀具和试验 试验装置评审 装置检查清单 财务/技术2.18 新产品成本预算 …