add alerting template variable min, max
This commit is contained in:
parent
fa02c089d9
commit
60210619ca
|
@ -53,6 +53,8 @@ type QueryResult struct {
|
||||||
Raw string `json:"raw"`
|
Raw string `json:"raw"`
|
||||||
MetricData []MetricData `json:"metric_data"`
|
MetricData []MetricData `json:"metric_data"`
|
||||||
Nodata bool `json:"nodata"`
|
Nodata bool `json:"nodata"`
|
||||||
|
Min interface{} `json:"-"`
|
||||||
|
Max interface{} `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MetricData struct {
|
type MetricData struct {
|
||||||
|
|
|
@ -276,7 +276,7 @@ func (engine *Engine) ConvertFilterQueryToDsl(fq *alerting.FilterQuery) (map[str
|
||||||
return resultQuery, nil
|
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 (
|
var (
|
||||||
timeStart interface{}
|
timeStart interface{}
|
||||||
timeEnd 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)
|
timeStart = time.Now().Add(-duration).UnixMilli() //.Format(time.RFC3339Nano)
|
||||||
timeEnd = time.Now().UnixMilli()
|
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{
|
timeQuery := util.MapStr{
|
||||||
"range": util.MapStr{
|
"range": util.MapStr{
|
||||||
rule.Resource.TimeField: util.MapStr{
|
rule.Resource.TimeField: util.MapStr{
|
||||||
|
@ -387,6 +391,10 @@ func (engine *Engine) ExecuteQuery(rule *alerting.Rule, filterParam *alerting.Fi
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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)
|
queryDslBytes, err := util.ToJSONBytes(queryDsl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -922,6 +930,14 @@ func newParameterCtx(rule *alerting.Rule, checkResults *alerting.ConditionResult
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("get env variables error: %v", err)
|
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{
|
paramsCtx := util.MapStr{
|
||||||
alerting2.ParamRuleID: rule.ID,
|
alerting2.ParamRuleID: rule.ID,
|
||||||
alerting2.ParamResourceID: rule.Resource.ID,
|
alerting2.ParamResourceID: rule.Resource.ID,
|
||||||
|
@ -932,6 +948,8 @@ func newParameterCtx(rule *alerting.Rule, checkResults *alerting.ConditionResult
|
||||||
"first_threshold": firstThreshold,
|
"first_threshold": firstThreshold,
|
||||||
"rule_name": rule.Name,
|
"rule_name": rule.Name,
|
||||||
"priority": priority,
|
"priority": priority,
|
||||||
|
"min": min,
|
||||||
|
"max": max,
|
||||||
"env": envVariables,
|
"env": envVariables,
|
||||||
}
|
}
|
||||||
err = util.MergeFields(paramsCtx, extraParams, true)
|
err = util.MergeFields(paramsCtx, extraParams, true)
|
||||||
|
|
|
@ -34,6 +34,9 @@ func _dateInZone(fmt string, date interface{}, zone string) string {
|
||||||
case *time.Time:
|
case *time.Time:
|
||||||
t = *date
|
t = *date
|
||||||
case int64:
|
case int64:
|
||||||
|
if date > 1e12 {
|
||||||
|
date = date/1000
|
||||||
|
}
|
||||||
t = time.Unix(date, 0)
|
t = time.Unix(date, 0)
|
||||||
case int:
|
case int:
|
||||||
t = time.Unix(int64(date), 0)
|
t = time.Unix(int64(date), 0)
|
||||||
|
|
Loading…
Reference in New Issue