@@ -3,50 +3,50 @@ package templates
33import (
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 处理告警推送的消息模版
1717func 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