mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 17:43:35 -06:00
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package provisioning
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
|
"github.com/grafana/grafana/pkg/services/ngalert/models"
|
|
)
|
|
|
|
func deserializeAlertmanagerConfig(config []byte) (*definitions.PostableUserConfig, error) {
|
|
result := definitions.PostableUserConfig{}
|
|
if err := json.Unmarshal(config, &result); err != nil {
|
|
return nil, fmt.Errorf("failed to deserialize alertmanager configuration: %w", err)
|
|
}
|
|
return &result, nil
|
|
}
|
|
|
|
func serializeAlertmanagerConfig(config definitions.PostableUserConfig) ([]byte, error) {
|
|
return json.Marshal(config)
|
|
}
|
|
|
|
type cfgRevision struct {
|
|
cfg *definitions.PostableUserConfig
|
|
concurrencyToken string
|
|
version string
|
|
}
|
|
|
|
func getLastConfiguration(ctx context.Context, orgID int64, store AMConfigStore) (*cfgRevision, error) {
|
|
q := models.GetLatestAlertmanagerConfigurationQuery{
|
|
OrgID: orgID,
|
|
}
|
|
alertManagerConfig, err := store.GetLatestAlertmanagerConfiguration(ctx, &q)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if alertManagerConfig == nil {
|
|
return nil, fmt.Errorf("no alertmanager configuration present in this org")
|
|
}
|
|
|
|
concurrencyToken := alertManagerConfig.ConfigurationHash
|
|
cfg, err := deserializeAlertmanagerConfig([]byte(alertManagerConfig.AlertmanagerConfiguration))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &cfgRevision{
|
|
cfg: cfg,
|
|
concurrencyToken: concurrencyToken,
|
|
version: alertManagerConfig.ConfigurationVersion,
|
|
}, nil
|
|
}
|