mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
* chore: added custom distpatcher * feat(notification-grouping): added notification grouping * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): linting and test cases * feat(notification-grouping): linting and test cases * feat(notification-grouping): linting and test cases * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): debug log lines * feat(notification-grouping): debug log lines * feat(notification-grouping): debug log lines * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): added structure changes * feat(notification-grouping): added structure changes * feat(notification-routing): added notification routing * chore(notification-grouping): added notificaiton grouping * Update pkg/alertmanager/nfmanager/rulebasednotification/provider.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-grouping): added renotification interval * fix(notification-grouping): added fix for renotification * chore(notificaiton-grouping): added no data renotify * chore(notificaiton-grouping): added no data renotify * chore(notificaiton-grouping): added no data renotify * chore(notification-grouping): added no data renotify interval * chore(notification-grouping): removed errors package from dispatcher * chore(notification-grouping): removed errors package from dispatcher * chore(notification-grouping): removed unwanted tests * chore(notification-grouping): removed unwanted pkg name * chore(notification-grouping): added delete notification setting * chore(notification-grouping): added delete notification setting * Update pkg/alertmanager/nfmanager/nfmanagertest/provider.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-grouping): removed nfmanager config| notification settings in postable rule * chore(notification-grouping): removed nfmanager config| notification settings in postable rule * chore(notification-grouping): added test for dispatcher * chore(notification-grouping): added test for dispatcher * chore(notification-grouping): go linting errors * chore(notification-grouping): added test cases for aggGroupPerRoute * chore(notification-grouping): added test cases for aggGroupPerRoute * chore(notification-grouping): corrected get notification config logic * Update pkg/alertmanager/nfmanager/rulebasednotification/provider_test.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): added notification routing policies * feat(notification-routing): added test cases for dispatcher * chore(notification-routing): added notification routing policies * chore(notification-routing): added notification routing policies * Apply suggestions from code review Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): added notification routing policies * chore(notification-routing): added notification routing policies * Update pkg/alertmanager/alertmanagerserver/distpatcher_test.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): sorted imports * chore(notification-routing): minor edit |pr resolve comments * chore(notification-grouping): corrected dispatcher test cases * chore(notification-routing): added notification routing policies * chore(notification-routing): corrected race condition in test * chore: resolved pr comments * chore: passing threshold value to tempalte * chore: completed delete rule functionality * chore: added grouping disabled functionality * chore: added grouping disabled functionality * chore(notification-routing): resolved pr comments * chore(notification-routing): resolved pr comments * chore(notification-routing): resolved pr comments * chore(notification-routing): sorted imports * chore(notification-routing): fix linting errors * chore(notification-routing): removed enabled flags * fix: test rule multiple threhsold (#9224) * chore: corrected linting errors * chore: corrected linting errors * chore: corrected linting errors * chore: corrected linting errors * chore: corrected migration errors * chore: corrected migration errors * chore: corrected migration errors * chore: corrected migration errors * Update pkg/sqlmigration/049_add_route_policy.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore: added org_is as foreign key * chore: resolved pr comments * chore: removed route store unused --------- Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com> Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package rules
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/SigNoz/signoz/pkg/query-service/model"
|
|
"github.com/SigNoz/signoz/pkg/query-service/utils/labels"
|
|
ruletypes "github.com/SigNoz/signoz/pkg/types/ruletypes"
|
|
"github.com/google/uuid"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// TestNotification prepares a dummy rule for given rule parameters and
|
|
// sends a test notification. returns alert count and error (if any)
|
|
func defaultTestNotification(opts PrepareTestRuleOptions) (int, *model.ApiError) {
|
|
ctx := context.Background()
|
|
|
|
if opts.Rule == nil {
|
|
return 0, model.BadRequest(fmt.Errorf("rule is required"))
|
|
}
|
|
|
|
parsedRule := opts.Rule
|
|
var alertname = parsedRule.AlertName
|
|
if alertname == "" {
|
|
// alertname is not mandatory for testing, so picking
|
|
// a random string here
|
|
alertname = uuid.New().String()
|
|
}
|
|
|
|
// append name to indicate this is test alert
|
|
parsedRule.AlertName = fmt.Sprintf("%s%s", alertname, ruletypes.TestAlertPostFix)
|
|
|
|
var rule Rule
|
|
var err error
|
|
|
|
if parsedRule.RuleType == ruletypes.RuleTypeThreshold {
|
|
|
|
// add special labels for test alerts
|
|
parsedRule.Labels[labels.RuleSourceLabel] = ""
|
|
parsedRule.Labels[labels.AlertRuleIdLabel] = ""
|
|
|
|
// create a threshold rule
|
|
rule, err = NewThresholdRule(
|
|
alertname,
|
|
opts.OrgID,
|
|
parsedRule,
|
|
opts.Reader,
|
|
opts.Querier,
|
|
opts.SLogger,
|
|
WithSendAlways(),
|
|
WithSendUnmatched(),
|
|
WithSQLStore(opts.SQLStore),
|
|
)
|
|
|
|
if err != nil {
|
|
zap.L().Error("failed to prepare a new threshold rule for test", zap.Error(err))
|
|
return 0, model.BadRequest(err)
|
|
}
|
|
|
|
} else if parsedRule.RuleType == ruletypes.RuleTypeProm {
|
|
|
|
// create promql rule
|
|
rule, err = NewPromRule(
|
|
alertname,
|
|
opts.OrgID,
|
|
parsedRule,
|
|
opts.SLogger,
|
|
opts.Reader,
|
|
opts.ManagerOpts.Prometheus,
|
|
WithSendAlways(),
|
|
WithSendUnmatched(),
|
|
WithSQLStore(opts.SQLStore),
|
|
)
|
|
|
|
if err != nil {
|
|
zap.L().Error("failed to prepare a new promql rule for test", zap.Error(err))
|
|
return 0, model.BadRequest(err)
|
|
}
|
|
} else {
|
|
return 0, model.BadRequest(fmt.Errorf("failed to derive ruletype with given information"))
|
|
}
|
|
|
|
// set timestamp to current utc time
|
|
ts := time.Now().UTC()
|
|
|
|
count, err := rule.Eval(ctx, ts)
|
|
if err != nil {
|
|
zap.L().Error("evaluating rule failed", zap.String("rule", rule.Name()), zap.Error(err))
|
|
return 0, model.InternalError(fmt.Errorf("rule evaluation failed"))
|
|
}
|
|
alertsFound, ok := count.(int)
|
|
if !ok {
|
|
return 0, model.InternalError(fmt.Errorf("something went wrong"))
|
|
}
|
|
rule.SendAlerts(ctx, ts, 0, time.Duration(1*time.Minute), opts.NotifyFunc)
|
|
|
|
return alertsFound, nil
|
|
}
|