From 6eeb5a57cd014238b5ddc3908c3d4dcf6d6f38e9 Mon Sep 17 00:00:00 2001 From: ayflying Date: Tue, 4 Mar 2025 17:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BB=E9=92=89=E9=92=89=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=88=B0=E9=80=9A=E7=9F=A5=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/logic/systemCron/listener.go | 11 +++++-- package/message/consts.go | 11 +++++++ package/message/drive/dingtalk.go | 43 +++++++++++++++++++++++++++ package/message/message.go | 16 ++++++++++ service/system_cron.go | 1 + 5 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 package/message/consts.go create mode 100644 package/message/drive/dingtalk.go create mode 100644 package/message/message.go diff --git a/internal/logic/systemCron/listener.go b/internal/logic/systemCron/listener.go index 04d148d..cebcf1d 100644 --- a/internal/logic/systemCron/listener.go +++ b/internal/logic/systemCron/listener.go @@ -3,6 +3,7 @@ package systemCron import ( "encoding/json" "fmt" + "github.com/ayflying/utility_go/package/message" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/gclient" "github.com/gogf/gf/v2/os/gtime" @@ -28,14 +29,14 @@ func (s *sSystemCron) Guardian(DingTalkWebHook string) { defer get.Close() if err != nil { - s.DingTalk(DingTalkWebHook, fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),err=%v", v.Name, err)) + message.New(message.DingTalk, DingTalkWebHook).Send(fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),err=%v", v.Name, err)) } else if get.StatusCode != 200 { - s.DingTalk(DingTalkWebHook, fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),code=%v,err=%v", v.Name, get.StatusCode, err)) + message.New(message.DingTalk, DingTalkWebHook).Send(fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),code=%v,err=%v", v.Name, get.StatusCode, err)) } else { var ststus Status err = json.Unmarshal(get.ReadAll(), &ststus) if ststus.Code != 0 { - s.DingTalk(DingTalkWebHook, fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),msg=%v", v.Name, ststus.Message)) + message.New(message.DingTalk, DingTalkWebHook).Send(fmt.Sprintf("监控报警:服务端访问失败 (%v 服务器),msg=%v", v.Name, ststus.Message)) } } } @@ -46,7 +47,11 @@ func (s *sSystemCron) Guardian(DingTalkWebHook string) { // @Description: 向指定的钉钉机器人发送消息。 // @receiver s: 系统定时任务结构体指针。 // @param value: 要发送的消息内容。 +// Deprecated: Use message.New(message.DingTalk, DingTalkWebHook).Send(value) func (s *sSystemCron) DingTalk(DingTalkWebHook string, value string) (res *gclient.Response) { + message.New(message.DingTalk, DingTalkWebHook).Send(value) + return + // 从配置中获取发送者名称 name, _ := g.Cfg().Get(ctx, "name") diff --git a/package/message/consts.go b/package/message/consts.go new file mode 100644 index 0000000..4d34aa4 --- /dev/null +++ b/package/message/consts.go @@ -0,0 +1,11 @@ +package message + +type MessageType int32 + +const ( + DingTalk MessageType = iota + Wechat + Email + Sms + Voice +) diff --git a/package/message/drive/dingtalk.go b/package/message/drive/dingtalk.go new file mode 100644 index 0000000..0f5be71 --- /dev/null +++ b/package/message/drive/dingtalk.go @@ -0,0 +1,43 @@ +package drive + +import ( + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gctx" + "github.com/gogf/gf/v2/os/gtime" +) + +type Mod struct { + DingTalkWebHook string +} + +func Load(webHook string) *Mod { + return &Mod{ + DingTalkWebHook: webHook, + } +} + +func (m Mod) Send(value string) { + ctx := gctx.New() + // 从配置中获取发送者名称 + name, _ := g.Cfg().Get(ctx, "name") + + // 定义钉钉机器人发送消息的URL,其中access_token为固定值 + url := m.DingTalkWebHook + url += "×tamp=" + gtime.Now().TimestampMilliStr() + // 使用goroutine异步发送消息 + + var post = g.Map{ + "msgtype": "text", + "text": g.Map{ + "content": "通知姬 " + name.String() + ":\n" + value + "\n" + gtime.Now().String(), + }, + } + + // 构建发送的消息体,包含消息类型和内容 + _, err := g.Client().Discovery(nil).ContentJson().Post(ctx, url, post) + if err != nil { + g.Log().Info(ctx, err) + } + + return +} diff --git a/package/message/message.go b/package/message/message.go new file mode 100644 index 0000000..1cfa8a6 --- /dev/null +++ b/package/message/message.go @@ -0,0 +1,16 @@ +package message + +import "github.com/ayflying/utility_go/package/message/drive" + +type MessageV1 interface { + Send(value string) +} + +func New(typ MessageType, host string) MessageV1 { + switch typ { + case DingTalk: + return drive.Load(host) + + } + return nil +} diff --git a/service/system_cron.go b/service/system_cron.go index ce798a5..41ffb58 100644 --- a/service/system_cron.go +++ b/service/system_cron.go @@ -18,6 +18,7 @@ type ( // @Description: 向指定的钉钉机器人发送消息。 // @receiver s: 系统定时任务结构体指针。 // @param value: 要发送的消息内容。 + // Deprecated: Use message.New(message.DingTalk, DingTalkWebHook).Send(value) DingTalk(DingTalkWebHook string, value string) (res *gclient.Response) ReadLog() // AddCron 添加一个定时任务到相应的调度列表中。