grafana/pkg/services/provisioning/alerting/notification_policy_provisioner.go
2022-08-01 19:14:57 +02:00

56 lines
1.6 KiB
Go

package alerting
import (
"context"
"fmt"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/ngalert/provisioning"
)
type NotificationPolicyProvisioner interface {
Provision(ctx context.Context, files []*AlertingFile) error
Unprovision(ctx context.Context, files []*AlertingFile) error
}
type defaultNotificationPolicyProvisioner struct {
logger log.Logger
notificationPolicyService provisioning.NotificationPolicyService
}
func NewNotificationPolicyProvisoner(logger log.Logger,
notificationPolicyService provisioning.NotificationPolicyService) NotificationPolicyProvisioner {
return &defaultNotificationPolicyProvisioner{
logger: logger,
notificationPolicyService: notificationPolicyService,
}
}
func (c *defaultNotificationPolicyProvisioner) Provision(ctx context.Context,
files []*AlertingFile) error {
for _, file := range files {
for _, np := range file.Policies {
err := c.notificationPolicyService.UpdatePolicyTree(ctx, np.OrgID,
np.Policy, models.ProvenanceFile)
if err != nil {
return fmt.Errorf("%s: %w", file.Filename, err)
}
}
}
return nil
}
func (c *defaultNotificationPolicyProvisioner) Unprovision(ctx context.Context,
files []*AlertingFile) error {
for _, file := range files {
for _, orgID := range file.ResetPolicies {
_, err := c.notificationPolicyService.ResetPolicyTree(ctx, int64(orgID))
if err != nil {
return fmt.Errorf("%s: %w", file.Filename, err)
}
}
}
return nil
}