Skip to content

Commit 0d3cfbd

Browse files
author
Cairry
committed
🚀 refactor(templates): Optimized alarm notify render logic
1 parent ae3eaa7 commit 0d3cfbd

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

pkg/templates/parser.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,50 @@ package templates
33
import (
44
"bytes"
55
"context"
6-
"github.com/zeromicro/go-zero/core/logc"
6+
"fmt"
77
"text/template"
88
"time"
99
"watchAlert/internal/global"
1010
"watchAlert/internal/models"
1111
"watchAlert/pkg/tools"
12-
)
1312

14-
var tmpl *template.Template
13+
"github.com/zeromicro/go-zero/core/logc"
14+
)
1515

1616
// ParserTemplate 处理告警推送的消息模版
1717
func ParserTemplate(defineName string, alert models.AlertCurEvent, templateStr string) string {
18+
// 预处理时间格式化
19+
alert = prepareAlertData(alert)
1820

19-
firstTriggerTime := time.Unix(alert.FirstTriggerTime, 0).Format(global.Layout)
20-
recoverTime := time.Unix(alert.RecoverTime, 0).Format(global.Layout)
21-
alert.FirstTriggerTimeFormat = firstTriggerTime
22-
alert.RecoverTimeFormat = recoverTime
23-
24-
tmpl = template.Must(template.New("tmpl").Parse(templateStr))
25-
26-
var (
27-
buf bytes.Buffer
28-
err error
29-
)
30-
31-
if defineName == "Card" {
32-
err = tmpl.Execute(&buf, alert)
33-
// 当前告警的 json 反序列化成 map 对象, 用于解析报警事件详情中的 ${xx} 变量
34-
data := tools.ConvertEventToMap(alert)
35-
return tools.ParserVariables(buf.String(), data)
36-
}
37-
38-
err = tmpl.ExecuteTemplate(&buf, defineName, alert)
21+
// 解析模板
22+
tmpl, err := template.New("tmpl").Parse(templateStr)
3923
if err != nil {
40-
logc.Error(context.Background(), "告警模版执行失败 ->", err.Error())
24+
logc.Error(context.Background(), "模板解析失败", "error", err, "template", templateStr)
4125
return ""
4226
}
4327

44-
// 前面只会渲染出模版框架, 下面来渲染告警数据内容
45-
if defineName == "Event" {
46-
data := tools.ConvertEventToMap(alert)
47-
return tools.ParserVariables(buf.String(), data)
48-
}
28+
return renderNamedTemplate(tmpl, defineName, alert)
29+
}
4930

50-
return buf.String()
31+
// prepareAlertData 预处理告警数据,格式化时间字段
32+
func prepareAlertData(alert models.AlertCurEvent) models.AlertCurEvent {
33+
alert.FirstTriggerTimeFormat = time.Unix(alert.FirstTriggerTime, 0).Format(global.Layout)
34+
alert.RecoverTimeFormat = time.Unix(alert.RecoverTime, 0).Format(global.Layout)
35+
return alert
36+
}
37+
38+
// renderNamedTemplate 渲染模板
39+
func renderNamedTemplate(tmpl *template.Template, name string, alert models.AlertCurEvent) string {
40+
var buf bytes.Buffer
41+
if err := tmpl.ExecuteTemplate(&buf, name, alert); err != nil {
42+
// 如果命名模板不存在,尝试直接执行主模板
43+
if err := tmpl.Execute(&buf, alert); err != nil {
44+
logc.Error(context.Background(), fmt.Sprintf("%s模板执行失败", name), "error", err)
45+
return ""
46+
}
47+
}
5148

49+
// 解析变量并返回
50+
data := tools.ConvertEventToMap(alert)
51+
return tools.ParserVariables(buf.String(), data)
5252
}

0 commit comments

Comments
 (0)