grafana/pkg/services/provisioning/alerting/mute_times_provisioner.go
2022-08-01 14:19:33 -04:00

74 lines
2.2 KiB
Go

package alerting
import (
"context"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/ngalert/provisioning"
)
type MuteTimesProvisioner interface {
Provision(ctx context.Context, files []*AlertingFile) error
Unprovision(ctx context.Context, files []*AlertingFile) error
}
type defaultMuteTimesProvisioner struct {
logger log.Logger
muteTimingService provisioning.MuteTimingService
}
func NewMuteTimesProvisioner(logger log.Logger,
muteTimingService provisioning.MuteTimingService) MuteTimesProvisioner {
return &defaultMuteTimesProvisioner{
logger: logger,
muteTimingService: muteTimingService,
}
}
func (c *defaultMuteTimesProvisioner) Provision(ctx context.Context,
files []*AlertingFile) error {
cache := map[int64]map[string]definitions.MuteTimeInterval{}
for _, file := range files {
for _, muteTiming := range file.MuteTimes {
if _, exists := cache[muteTiming.OrgID]; !exists {
intervals, err := c.muteTimingService.GetMuteTimings(ctx, muteTiming.OrgID)
if err != nil {
return err
}
cache[muteTiming.OrgID] = make(map[string]definitions.MuteTimeInterval, len(intervals))
for _, interval := range intervals {
cache[muteTiming.OrgID][interval.Name] = interval
}
}
muteTiming.MuteTime.Provenance = models.ProvenanceFile
if _, exists := cache[muteTiming.OrgID][muteTiming.MuteTime.Name]; exists {
_, err := c.muteTimingService.UpdateMuteTiming(ctx, muteTiming.MuteTime, muteTiming.OrgID)
if err != nil {
return err
}
continue
}
_, err := c.muteTimingService.CreateMuteTiming(ctx, muteTiming.MuteTime, muteTiming.OrgID)
if err != nil {
return err
}
}
}
return nil
}
func (c *defaultMuteTimesProvisioner) Unprovision(ctx context.Context,
files []*AlertingFile) error {
for _, file := range files {
for _, deleteMuteTime := range file.DeleteMuteTimes {
err := c.muteTimingService.DeleteMuteTiming(ctx, deleteMuteTime.Name, deleteMuteTime.OrgID)
if err != nil {
return err
}
}
}
return nil
}