机器人报警监控 go

业务开发工程中,我们会打印许多日志,如果我们能够将这些错误信息通过机器人发送到群中,那么我们将会很快速的发现问题,所以在这里开发了一个工具

  1. 我这里采用的是logrus 这个日志包,为了方便通知每一个开发者,这里可以自己new一个 log对象出来
  2. 通知群消息,我这里采用的是日志钩子,直接通过这个钩子将这个消息发送出去
  3. 这里的机器人采用的是接口方式,这样我们可以实现自定义的模板


机器人
package robot

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"io/ioutil"
	"net/http"
	"strings"
)

type Roboter interface {
	RobotMessage(log *logrus.Entry) string
	SendMessage(str string)
}
type Robot struct {
	//robot  webhook
	WebHook string
	User    string
}

// NewRobot  generate robot by webhook
func NewRobot(webhook string, user string) Robot {
	if user == "" {
		user = "all"
	}
	return Robot{WebHook: webhook, User: user}
}

// SendMessage robot send message
func (r *Robot) SendMessage(str string) {
	request, err := http.NewRequest("POST", r.WebHook, strings.NewReader(str))
	request.Header = map[string][]string{
		"Content-Type": {"application/json"},
	}
	client := http.DefaultClient
	do, err := client.Do(request)
	if err != nil {
		fmt.Println("sendMessage=", err)
	}
	defer do.Body.Close()
	all, err := ioutil.ReadAll(do.Body)
	if err != nil {
		fmt.Printf("reponse=%s , body = %s ", err, string(all))
	}
}

//RobotMessage rlog convert robot message
func (r *Robot) RobotMessage(log *logrus.Entry) string {
	str1 := `{
	"msg_type": "post",
	"content": {
		"post": {
			"zh_cn": {
				"title": "%s",
				"content": [
					[{
							"tag": "text",
							"text": "error message: %s \nerror line : %d \n"
						},
						{
							"tag": "at",
							"user_id": "%s"
						}]
					]
				}
			}
		}
	}`
	return fmt.Sprintf(str1, log.Message, log.Caller.File, log.Caller.Line, r.User)
}

这个机器人是可以自定义的,我们可以用飞书或者是企业微信

实现logrus的钩子

如果我们不只是给机器人发,可以在下面钩子事件中继续添加 ,也可以做成责任链模式

package rlog

import (
	"github.com/injuryzy/go-tool/robot"
	"github.com/sirupsen/logrus"
)

type RobotHook struct {
	LogLevels []logrus.Level
	Robot     robot.Roboter
}

//NewRobotHook generate hook add robot
func NewRobotHook(robot robot.Roboter, arg ...logrus.Level) *RobotHook {
	r := new(RobotHook)
	r.Robot = robot
	for _, level := range arg {
		r.LogLevels = append(r.LogLevels, level)
	}
	return r
}

func (r *RobotHook) Levels() []logrus.Level {
	return r.LogLevels
}

func (r *RobotHook) Fire(entry *logrus.Entry) error {
	r.Robot.SendMessage(r.Robot.RobotMessage(entry))
	return nil
}

添加robothook
func TestLog(t *testing.T) {
	log := NewLog()
	l := NewLog()

	newRobot := robot.NewRobot("", "")
	newRobot1 := robot.CRobot{robot.Robot{
		WebHook: "",
		User:    "",
	}}

	log.AddHook(NewRobotHook(&newRobot, logrus.ErrorLevel))
	l.AddHook(NewRobotHook(&newRobot1, logrus.ErrorLevel))

	log.Error(34214)
	l.Error("faeq")
}

在user里面填上需要@的人的id 就可以了 ,具体可以去参考 官方文档
提示https://github.com/injuryzy/go-tool.git 这个源码地址可以去参观一下 ,欢迎大家提issues,如果有问题大家也可以留言一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器人报警代码是指当机器人发生故障或是遇到异常情况时,通过报警代码来表示,并通知操作人员或相关人员进行处理。ABB(ABB Ltd)是一家全球领先的工业自动化和电力技术公司,其推出的机器人产品也具备报警功能。 以下是一种可能的ABB机器人报警代码示例: - 代码001:机器人电源异常。当机器人遇到电源供应方面的故障或是电源异常时,这个报警代码会被触发。操作人员应当检查机器人的电源连接情况,确保电源供应正常。 - 代码002:机器人驱动器故障。若机器人的驱动器出现故障,这个报警代码会被激活。操作人员应检查驱动器的运行状态,可能需要更换故障的驱动器部件。 - 代码003:机器人传感器异常。当机器人的传感器出现异常时,这个报警代码会被发出。在这种情况下,操作人员需要检查传感器的连接情况,或是校准传感器以解决问题。 - 代码004:机器人通信故障。此报警代码表示机器人与外部设备之间的通信发生故障。操作人员需要检查通信线路的连接状态以及通信协议设置是否正确。 - 代码005:机器人安全警告。当机器人的安全系统检测到潜在的安全风险时,这个报警代码会被触发。操作人员应立即采取相应措施,确保人员和设备的安全。 以上仅为一种示例,实际的ABB机器人报警代码会因不同的机型和产品而有所不同。机器人报警代码的目的是促使人员及时发现和处理机器人的故障或异常情况,以保障生产环境的安全和正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值