Skip to content

Commit

Permalink
PMM-7207 Toggle Rule API (#588)
Browse files Browse the repository at this point in the history
* Toggle Rule API

* Check for empty list of IDs

* Add constraint

* Unexport method
  • Loading branch information
AlekSi committed Dec 21, 2020
1 parent 495f544 commit fdc9333
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
4 changes: 4 additions & 0 deletions models/channel_helpers.go
Expand Up @@ -129,6 +129,10 @@ func FindChannelByID(q *reform.Querier, id string) (*Channel, error) {

// FindChannelsByIDs finds channels by IDs.
func FindChannelsByIDs(q *reform.Querier, ids []string) ([]*Channel, error) {
if len(ids) == 0 {
return []*Channel{}, nil
}

p := strings.Join(q.Placeholders(1, len(ids)), ", ")
tail := fmt.Sprintf("WHERE id IN (%s) ORDER BY id", p) //nolint:gosec
args := make([]interface{}, len(ids))
Expand Down
3 changes: 2 additions & 1 deletion models/database.go
Expand Up @@ -410,7 +410,8 @@ var databaseSchema = [][]string{
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
PRIMARY KEY (id)
PRIMARY KEY (id),
FOREIGN KEY (template_name) REFERENCES ia_templates (name)
)`,
},
}
Expand Down
4 changes: 3 additions & 1 deletion services/management/ia/alerts_service.go
Expand Up @@ -151,7 +151,9 @@ func (s *AlertsService) ToggleAlert(ctx context.Context, req *iav1beta1.ToggleAl
return nil, status.Errorf(codes.FailedPrecondition, "%v.", services.ErrAlertingDisabled)
}

switch req.Silenced { //nolint:exhaustive
switch req.Silenced {
case iav1beta1.BooleanFlag_DO_NOT_CHANGE:
// nothing
case iav1beta1.BooleanFlag_TRUE:
err := s.alertManager.Silence(ctx, req.AlertId)
if err != nil {
Expand Down
34 changes: 30 additions & 4 deletions services/management/ia/rules_service.go
Expand Up @@ -58,15 +58,15 @@ func (s *RulesService) ListAlertRules(ctx context.Context, req *iav1beta1.ListAl
return nil, status.Errorf(codes.FailedPrecondition, "%v.", services.ErrAlertingDisabled)
}

res, err := s.GetAlertRules()
res, err := s.getAlertRules()
if err != nil {
return nil, err
}
return &iav1beta1.ListAlertRulesResponse{Rules: res}, nil
}

// GetAlertRules returns list of available alert rules.
func (s *RulesService) GetAlertRules() ([]*iav1beta1.Rule, error) {
// getAlertRules returns list of available alert rules.
func (s *RulesService) getAlertRules() ([]*iav1beta1.Rule, error) {
var rules []*models.Rule
var channels []*models.Channel
e := s.db.InTransaction(func(tx *reform.TX) error {
Expand Down Expand Up @@ -182,7 +182,33 @@ func (s *RulesService) UpdateAlertRule(ctx context.Context, req *iav1beta1.Updat

// ToggleAlertRule allows to switch between disabled and enabled states of an Alert Rule.
func (s *RulesService) ToggleAlertRule(ctx context.Context, req *iav1beta1.ToggleAlertRuleRequest) (*iav1beta1.ToggleAlertRuleResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ToggleAlertRule not implemented")
settings, err := models.GetSettings(s.db)
if err != nil {
return nil, err
}

if !settings.IntegratedAlerting.Enabled {
return nil, status.Errorf(codes.FailedPrecondition, "%v.", services.ErrAlertingDisabled)
}

var params models.ChangeRuleParams
switch req.Disabled {
case iav1beta1.BooleanFlag_DO_NOT_CHANGE:
return &iav1beta1.ToggleAlertRuleResponse{}, nil
case iav1beta1.BooleanFlag_TRUE:
params.Disabled = true
case iav1beta1.BooleanFlag_FALSE:
// nothing
}

e := s.db.InTransaction(func(tx *reform.TX) error {
_, err := models.ChangeRule(tx.Querier, req.RuleId, &params)
return err
})
if e != nil {
return nil, e
}
return &iav1beta1.ToggleAlertRuleResponse{}, nil
}

// DeleteAlertRule deletes Integrated Alerting rule.
Expand Down

0 comments on commit fdc9333

Please sign in to comment.