Alerting: Add GetTemplate to template service and update tests (#91854)

* add GetTemplate to template service
* refactor GetTemplates to fetch all provenances at once
* refactor tests
This commit is contained in:
Yuri Tseretyan 2024-08-15 09:17:48 -04:00 committed by GitHub
parent 868f9320e9
commit 5834981f86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 680 additions and 525 deletions

View File

@ -45,6 +45,7 @@ type ContactPointService interface {
type TemplateService interface { type TemplateService interface {
GetTemplates(ctx context.Context, orgID int64) ([]definitions.NotificationTemplate, error) GetTemplates(ctx context.Context, orgID int64) ([]definitions.NotificationTemplate, error)
GetTemplate(ctx context.Context, orgID int64, name string) (definitions.NotificationTemplate, error)
SetTemplate(ctx context.Context, orgID int64, tmpl definitions.NotificationTemplate) (definitions.NotificationTemplate, error) SetTemplate(ctx context.Context, orgID int64, tmpl definitions.NotificationTemplate) (definitions.NotificationTemplate, error)
DeleteTemplate(ctx context.Context, orgID int64, name string, provenance definitions.Provenance, version string) error DeleteTemplate(ctx context.Context, orgID int64, name string, provenance definitions.Provenance, version string) error
} }

View File

@ -271,7 +271,7 @@ func createTestRoutingTree() definitions.Route {
} }
func createTestAlertingConfig() *definitions.PostableUserConfig { func createTestAlertingConfig() *definitions.PostableUserConfig {
cfg, _ := legacy_storage.DeserializeAlertmanagerConfig([]byte(defaultConfig)) cfg, _ := legacy_storage.DeserializeAlertmanagerConfig([]byte(setting.GetAlertmanagerDefaultConfiguration()))
cfg.AlertmanagerConfig.Receivers = append(cfg.AlertmanagerConfig.Receivers, cfg.AlertmanagerConfig.Receivers = append(cfg.AlertmanagerConfig.Receivers,
&definitions.PostableApiReceiver{ &definitions.PostableApiReceiver{
Receiver: config.Receiver{ Receiver: config.Receiver{

View File

@ -36,6 +36,15 @@ func (t *TemplateService) GetTemplates(ctx context.Context, orgID int64) ([]defi
return nil, err return nil, err
} }
if len(revision.Config.TemplateFiles) == 0 {
return nil, nil
}
provenances, err := t.provenanceStore.GetProvenances(ctx, orgID, (&definitions.NotificationTemplate{}).ResourceType())
if err != nil {
return nil, err
}
templates := make([]definitions.NotificationTemplate, 0, len(revision.Config.TemplateFiles)) templates := make([]definitions.NotificationTemplate, 0, len(revision.Config.TemplateFiles))
for name, tmpl := range revision.Config.TemplateFiles { for name, tmpl := range revision.Config.TemplateFiles {
tmpl := definitions.NotificationTemplate{ tmpl := definitions.NotificationTemplate{
@ -43,17 +52,41 @@ func (t *TemplateService) GetTemplates(ctx context.Context, orgID int64) ([]defi
Template: tmpl, Template: tmpl,
ResourceVersion: calculateTemplateFingerprint(tmpl), ResourceVersion: calculateTemplateFingerprint(tmpl),
} }
provenance, ok := provenances[tmpl.ResourceID()]
if !ok {
provenance = models.ProvenanceNone
}
tmpl.Provenance = definitions.Provenance(provenance)
templates = append(templates, tmpl)
}
return templates, nil
}
func (t *TemplateService) GetTemplate(ctx context.Context, orgID int64, name string) (definitions.NotificationTemplate, error) {
revision, err := t.configStore.Get(ctx, orgID)
if err != nil {
return definitions.NotificationTemplate{}, err
}
for tmplName, tmpl := range revision.Config.TemplateFiles {
if tmplName != name {
continue
}
tmpl := definitions.NotificationTemplate{
Name: name,
Template: tmpl,
ResourceVersion: calculateTemplateFingerprint(tmpl),
}
provenance, err := t.provenanceStore.GetProvenance(ctx, &tmpl, orgID) provenance, err := t.provenanceStore.GetProvenance(ctx, &tmpl, orgID)
if err != nil { if err != nil {
return nil, err return definitions.NotificationTemplate{}, err
} }
tmpl.Provenance = definitions.Provenance(provenance) tmpl.Provenance = definitions.Provenance(provenance)
return tmpl, nil
templates = append(templates, tmpl)
} }
return definitions.NotificationTemplate{}, ErrTemplateNotFound.Errorf("")
return templates, nil
} }
func (t *TemplateService) SetTemplate(ctx context.Context, orgID int64, tmpl definitions.NotificationTemplate) (definitions.NotificationTemplate, error) { func (t *TemplateService) SetTemplate(ctx context.Context, orgID int64, tmpl definitions.NotificationTemplate) (definitions.NotificationTemplate, error) {

File diff suppressed because it is too large Load Diff