mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-21 12:44:25 +08:00
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package rules
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
baserules "go.signoz.io/signoz/pkg/query-service/rules"
|
|
)
|
|
|
|
func PrepareTaskFunc(opts baserules.PrepareTaskOptions) (baserules.Task, error) {
|
|
|
|
rules := make([]baserules.Rule, 0)
|
|
var task baserules.Task
|
|
|
|
ruleId := baserules.RuleIdFromTaskName(opts.TaskName)
|
|
if opts.Rule.RuleType == baserules.RuleTypeThreshold {
|
|
// create a threshold rule
|
|
tr, err := baserules.NewThresholdRule(
|
|
ruleId,
|
|
opts.Rule,
|
|
opts.FF,
|
|
opts.Reader,
|
|
opts.UseLogsNewSchema,
|
|
baserules.WithEvalDelay(opts.ManagerOpts.EvalDelay),
|
|
)
|
|
|
|
if err != nil {
|
|
return task, err
|
|
}
|
|
|
|
rules = append(rules, tr)
|
|
|
|
// create ch rule task for evalution
|
|
task = newTask(baserules.TaskTypeCh, opts.TaskName, time.Duration(opts.Rule.Frequency), rules, opts.ManagerOpts, opts.NotifyFunc, opts.RuleDB)
|
|
|
|
} else if opts.Rule.RuleType == baserules.RuleTypeProm {
|
|
|
|
// create promql rule
|
|
pr, err := baserules.NewPromRule(
|
|
ruleId,
|
|
opts.Rule,
|
|
opts.Logger,
|
|
opts.Reader,
|
|
opts.ManagerOpts.PqlEngine,
|
|
)
|
|
|
|
if err != nil {
|
|
return task, err
|
|
}
|
|
|
|
rules = append(rules, pr)
|
|
|
|
// create promql rule task for evalution
|
|
task = newTask(baserules.TaskTypeProm, opts.TaskName, time.Duration(opts.Rule.Frequency), rules, opts.ManagerOpts, opts.NotifyFunc, opts.RuleDB)
|
|
|
|
} else {
|
|
return nil, fmt.Errorf("unsupported rule type. Supported types: %s, %s", baserules.RuleTypeProm, baserules.RuleTypeThreshold)
|
|
}
|
|
|
|
return task, nil
|
|
}
|
|
|
|
// newTask returns an appropriate group for
|
|
// rule type
|
|
func newTask(taskType baserules.TaskType, name string, frequency time.Duration, rules []baserules.Rule, opts *baserules.ManagerOptions, notify baserules.NotifyFunc, ruleDB baserules.RuleDB) baserules.Task {
|
|
if taskType == baserules.TaskTypeCh {
|
|
return baserules.NewRuleTask(name, "", frequency, rules, opts, notify, ruleDB)
|
|
}
|
|
return baserules.NewPromRuleTask(name, "", frequency, rules, opts, notify, ruleDB)
|
|
}
|