Yearning外置工单通知实现思路

news/2025/3/12 13:38:50/文章来源:https://www.cnblogs.com/cheyunhua/p/18236547

背景概述

上篇我们讲解了一下Yearning如何使用飞书发送工单通知,但是我最初的想法不仅仅是飞书、钉钉这些媒介,更多的是希望可以自定义集成渠道,因此想到了PrometheusAlert,这样我们就不用重新造轮子了。

大致配置

图片image-20240606110115965

我们拿到Yearning发送的数据,当然这个数据需要我们修改一下代码哦,当我们有源数据了,那么我们就可以自定义通知渠道了,如果还不会可以扫描下方二维码一起学习交流。

环境准备

Go版本:1.20

开发工具:Goland

数据库:mysql

源代码:

https://github.com/cookieY/gemini-next.git

https://github.com/cookieY/Yearning.git

大致实现

修改代码

src/lib/ding.go

func dingMsgTplHandler(state string, generic interface{}) string {
 var order imCryGeneric
 // 新增
 type SendOrder struct {
  Order  imCryGeneric
  Status string `json:"status"`
 }
 switch v := generic.(type) {
 case model.CoreSqlOrder:
  order = imCryGeneric{
   Assigned: v.Assigned,
   WorkId:   v.WorkId,
   Source:   v.Source,
   Username: v.Username,
   Text:     v.Text,
  }
 case model.CoreQueryOrder:
  order = imCryGeneric{
   Assigned: v.Assigned,
   WorkId:   v.WorkId + i18n.DefaultLang.Load(i18n.INFO_QUERY),
   Source:   i18n.DefaultLang.Load(i18n.ER_QUERY_NO_DATA_SOURCE),
   Username: v.Username,
   Text:     v.Text,
  }
 }

 if !stateHandler(state) {
  order.Assigned = "无"
 }
 msg := SendOrder{
  Order:  order,
  Status: state,
 }

 jsonData, _ := json.Marshal(msg)
 return string(jsonData)
}

src/handler/order/audit/impl.go

func ExecuteOrder(u *Confirm, user string) common.Resp {
 var order model.CoreSqlOrder
 var source model.CoreDataSource
 model.DB().Where("work_id =?", u.WorkId).First(&order)

 if order.Status != 2 && order.Status != 5 {
  return common.ERR_COMMON_TEXT_MESSAGE(i18n.DefaultLang.Load(i18n.ORDER_NOT_SEARCH))
 }
 order.Assigned = user

 model.DB().Model(model.CoreDataSource{}).Where("source_id =?", order.SourceId).First(&source)
 rule, err := lib.CheckDataSourceRule(source.RuleId)
 if err != nil {
  logger.DefaultLogger.Error(err)
 }

 var isCall bool
 if client := lib.NewRpc(); client != nil {
  if err := client.Call("Engine.Exec", &ExecArgs{
   Order:    &order,
   Rules:    *rule,
   IP:       source.IP,
   Port:     source.Port,
   Username: source.Username,
   Password: lib.Decrypt(model.JWT, source.Password),
   CA:       source.CAFile,
   Cert:     source.Cert,
   Key:      source.KeyFile,
   //Message:  model.GloMessage,
  }, &isCall); err != nil {
   return common.ERR_RPC
  }
  model.DB().Create(&model.CoreWorkflowDetail{
   WorkId:   u.WorkId,
   Username: user,
   Time:     time.Now().Format("2006-01-02 15:04"),
   Action:   i18n.DefaultLang.Load(i18n.ORDER_EXECUTE_STATE),
  })
  // 新增
  lib.MessagePush(u.WorkId, 1, "")
  return common.SuccessPayLoadToMessage(i18n.DefaultLang.Load(i18n.ORDER_EXECUTE_STATE))
 }
 return common.ERR_RPC

}

验证

  1. 提交工单

    图片image-20240606111001505图片image-20240606111021035
  2. 审核工单

    图片image-20240606111137782图片image-20240606111146046
  3. 执行工单

    图片图片

  4. 驳回工单

    图片image-20240606111802580

PrometheusAlert配置

模板内容

### Yearning工单通知
**工单编号:** {{.Order.WorkId}}

**提交人员:**  {{.Order.Username}}

**数据源:**  {{.Order.Source}}

**下一步操作人:**  {{.Order.Assigned}}

{{ if eq .Order.Assigned "执行成功" }}
**状态:** <font color="#1abefa"> {{.status}} </font>
{{ else }}
**状态:**  {{.status}}
{{ end }}
**工单说明:**
>  {{.Order.Text}}

消息协议JSON内容

{
    "Order": {
        "Assigned": "无",
        "WorkId": "1f452500-2e7f-445e-96a8-648205f20876",
        "Source": "test",
        "Username": "zxl",
        "Text": "123456"
    },
    "status": "执行成功"
}

我们可以根据消息JSON来自定义通知渠道,例如:钉钉、企业微信、飞书等等。

总结

承诺以上内容仅供学习。这样依赖我们就可以实现大部分渠道的通知了,即便prometheusAlert不涉及的渠道我们也可以自己写一个webhook来自定义通知。

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

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

相关文章

一加七Pro刷Lineageos21(kernelsu+MicroG)

前言 前几天我已经刷了Lineageos21(一加七Pro刷lineageos21(kernelsu+gapps)),但是体验下来有两个很严重的bug:无法接打电话,没有声音。 收短信倒是很正常,但电话打进来只会显示号码,不会显示接听界面(对方那边显示正在通话中,也就是挂断了),拨打电话会显示已结束。 测试…

教务管理系统

1 项目简介 教务管理系统主要模块: 邮箱注册:用户根据邮箱发送验证码注册用户信息 邮箱登录:用户根据注册的邮箱登录 教师管理:主要包含教师的全部查询,教师信息的修改,添加教师信息,删除教师信息,分页查询教师信息 多条件查询教师信息(教师编号,名称,性别,入职日期…

网络隔离后的跨网投递需求,要这样做才能让需求落地

为了保护企业的核心数字资产、隔离有害的网络安全威胁、保障数据信息在可信网络内进行安全交互,越来越多的企业在网络建设时,选择进行网络隔离。应用较为普遍的网络隔离手段包括物理隔离、协议隔离、应用隔离等,而常见的状态是企业进行内部网络和外部互联网隔离,或者企业内…

数据库系列16:MyISAM与InnoDB的索引对比

相关文章 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库系列:使用高区分度索引列提升性能 数据库系列:前缀索引和索引长…

《UML基础、案例与应用》习题记录-第8章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第8章 状态图 1.状态图 2.状态图 3.状态图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第9章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第9章 顺序图 9.10.2习题 1.类图 顺序图: 2.顺序图 3.顺序图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第6章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第6章 介绍用例 6.9.2习题 2.用例图3. 用例图 4.用例图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第4章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第4章 关系 4.10.2习题 1.类图 2. 类图 3. 类图4. 类图 5. 类图 6. 类图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第1章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第1章 UML简介 1.10.2习题 4. 类图 5. 组成结构图 6. 状态图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

微软RPA工具Power Automate Desktop

什么是RPA RPA(机器人流程自动化)系统是一种应用程序,它通过模仿用户在电脑上的操作方法, 实现自动化操作流程, 协助人在计算机、手机等计算设备中完成重复的工作流任务。 Power Automate Desktop 2021年3月2日,Microsoft终于宣布面向Windows10用户,免费开放Power Automat…

代码随想录算法训练营 第三天 链表 Leetcode203 移除链表元素 Leetcode707 设计链表 Leetcode 206 反转链表

Leetcode203 移除链表元素 题目链接 注意 为了使后续节点方式统一 要人为设置链表头节点 链表的处理 一定要明白如何找前置节点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int…