add alerting template variable min, max

This commit is contained in:
liugq 2023-08-09 18:23:31 +08:00
parent fa02c089d9
commit 60210619ca
3 changed files with 24 additions and 1 deletions

View File

@ -53,6 +53,8 @@ type QueryResult struct {
Raw string `json:"raw"`
MetricData []MetricData `json:"metric_data"`
Nodata bool `json:"nodata"`
Min interface{} `json:"-"`
Max interface{} `json:"-"`
}
type MetricData struct {

View File

@ -276,7 +276,7 @@ func (engine *Engine) ConvertFilterQueryToDsl(fq *alerting.FilterQuery) (map[str
return resultQuery, nil
}
func (engine *Engine) generateTimeFilter(rule *alerting.Rule, filterParam *alerting.FilterParam) (map[string]interface{}, error){
func getQueryTimeRange(rule *alerting.Rule, filterParam *alerting.FilterParam) (start, end interface{}){
var (
timeStart interface{}
timeEnd interface{}
@ -316,7 +316,11 @@ func (engine *Engine) generateTimeFilter(rule *alerting.Rule, filterParam *alert
timeStart = time.Now().Add(-duration).UnixMilli() //.Format(time.RFC3339Nano)
timeEnd = time.Now().UnixMilli()
}
return timeStart, timeEnd
}
func (engine *Engine) generateTimeFilter(rule *alerting.Rule, filterParam *alerting.FilterParam) (map[string]interface{}, error){
timeStart, timeEnd := getQueryTimeRange(rule, filterParam)
timeQuery := util.MapStr{
"range": util.MapStr{
rule.Resource.TimeField: util.MapStr{
@ -387,6 +391,10 @@ func (engine *Engine) ExecuteQuery(rule *alerting.Rule, filterParam *alerting.Fi
if err != nil {
return nil, err
}
if vm, ok := queryDsl.(util.MapStr); ok {
queryResult.Min, err = vm.GetValue(fmt.Sprintf("query.range.%s.gte", rule.Resource.TimeField))
queryResult.Max, _ = vm.GetValue(fmt.Sprintf("query.range.%s.lte", rule.Resource.TimeField))
}
queryDslBytes, err := util.ToJSONBytes(queryDsl)
if err != nil {
return nil, err
@ -922,6 +930,14 @@ func newParameterCtx(rule *alerting.Rule, checkResults *alerting.ConditionResult
if err != nil {
log.Errorf("get env variables error: %v", err)
}
var (
min interface{}
max interface{}
)
if checkResults.QueryResult != nil {
min = checkResults.QueryResult.Min
max = checkResults.QueryResult.Max
}
paramsCtx := util.MapStr{
alerting2.ParamRuleID: rule.ID,
alerting2.ParamResourceID: rule.Resource.ID,
@ -932,6 +948,8 @@ func newParameterCtx(rule *alerting.Rule, checkResults *alerting.ConditionResult
"first_threshold": firstThreshold,
"rule_name": rule.Name,
"priority": priority,
"min": min,
"max": max,
"env": envVariables,
}
err = util.MergeFields(paramsCtx, extraParams, true)

View File

@ -34,6 +34,9 @@ func _dateInZone(fmt string, date interface{}, zone string) string {
case *time.Time:
t = *date
case int64:
if date > 1e12 {
date = date/1000
}
t = time.Unix(date, 0)
case int:
t = time.Unix(int64(date), 0)