@@ -4,6 +4,7 @@ package alert
4
4
import (
5
5
"bytes"
6
6
"fmt"
7
+ "strconv"
7
8
"text/template"
8
9
"time"
9
10
@@ -27,11 +28,15 @@ type Alert struct {
27
28
Search search.Dict `yaml:"search"`
28
29
SearchQuery string `yaml:"search_query"`
29
30
Process luautil.LuaRunner `yaml:"process"`
31
+ ThrottlePeriodStr string `yaml:"throttle_period"`
32
+ Metadata map [string ]interface {} `yaml:"metadata"`
30
33
31
34
Jobber * jobber.FullTimeSpec
32
35
SearchIndexTPL * template.Template
33
36
SearchTypeTPL * template.Template
34
37
SearchTPL * template.Template
38
+ ThrottlePeriod uint
39
+ LastActionTime uint
35
40
}
36
41
37
42
func templatizeHelper (i interface {}, lastErr error ) (* template.Template , error ) {
@@ -73,10 +78,16 @@ func (a *Alert) Init() error {
73
78
}
74
79
a .Jobber = jb
75
80
81
+ a .LastActionTime = 0
82
+ a .ThrottlePeriod , err = parseThrottlePeriod (a .ThrottlePeriodStr )
83
+ if err != nil {
84
+ return err
85
+ }
86
+
76
87
return nil
77
88
}
78
89
79
- func (a Alert ) Run () {
90
+ func (a * Alert ) Run () {
80
91
kv := log.Fields {
81
92
"name" : a .Name ,
82
93
}
@@ -87,6 +98,7 @@ func (a Alert) Run() {
87
98
Name : a .Name ,
88
99
StartedTS : uint64 (now .Unix ()),
89
100
Time : now ,
101
+ Metadata : a .Metadata ,
90
102
}
91
103
92
104
searchIndex , searchType , searchQuery , err := a .CreateSearch (c )
@@ -139,6 +151,7 @@ func (a Alert) Run() {
139
151
return
140
152
}
141
153
}
154
+ a .LastActionTime = uint (now .Unix ())
142
155
}
143
156
144
157
func (a Alert ) CreateSearch (c context.Context ) (string , string , interface {}, error ) {
@@ -167,3 +180,23 @@ func (a Alert) CreateSearch(c context.Context) (string, string, interface{}, err
167
180
168
181
return searchIndex , searchType , search , nil
169
182
}
183
+
184
+ func parseThrottlePeriod (throttlePeriodStr string ) (uint , error ) {
185
+ var multi int
186
+ suffix := throttlePeriodStr [len (throttlePeriodStr )- 1 :]
187
+ switch suffix {
188
+ case "s" :
189
+ multi = 1
190
+ case "m" :
191
+ multi = 60
192
+ case "h" :
193
+ multi = 3600
194
+ default :
195
+ return 0 , fmt .Errorf ("only support int[s,m,h], now is %s" , throttlePeriodStr )
196
+ }
197
+ throttlePeriod , err := strconv .Atoi (throttlePeriodStr [:len (throttlePeriodStr )- 1 ])
198
+ if err != nil {
199
+ return 0 , err
200
+ }
201
+ return uint (throttlePeriod * multi ), nil
202
+ }
0 commit comments