* Alerting: Fix support for converted Prometheus rules in app-platform apis Retrieving converted Prometheus retrieval rules was not supported in the app-platform apis and was throwing a 500 error due to the provenance not being handled properly. Also adds a test to cover converted Prometheus rules when getting rules. Closes https://github.com/grafana/alerting-squad/issues/1200 * add test to confirm provenance compatibility
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package v0alpha1
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
prom_model "github.com/prometheus/common/model"
|
|
)
|
|
|
|
const (
|
|
InternalPrefix = "grafana.com/"
|
|
GroupLabelKey = InternalPrefix + "group"
|
|
GroupIndexLabelKey = GroupLabelKey + "-index"
|
|
ProvenanceStatusAnnotationKey = InternalPrefix + "provenance"
|
|
// Copy of the max title length used in legacy validation path
|
|
AlertRuleMaxTitleLength = 190
|
|
// Annotation key used to store the folder UID on resources
|
|
FolderAnnotationKey = "grafana.app/folder"
|
|
FolderLabelKey = FolderAnnotationKey
|
|
)
|
|
|
|
// NOTE: This is a copy of the constants from the alertrule package to avoid circular imports.
|
|
// Keep in sync with pkg/services/ngalert/models/provisioning.go
|
|
const (
|
|
ProvenanceStatusNone = ""
|
|
ProvenanceStatusAPI = "api"
|
|
ProvenanceStatusFile = "file"
|
|
ProvenanceStatusConvertedPrometheus = "converted_prometheus"
|
|
)
|
|
|
|
var (
|
|
AcceptedProvenanceStatuses = []string{ProvenanceStatusNone, ProvenanceStatusAPI, ProvenanceStatusFile, ProvenanceStatusConvertedPrometheus}
|
|
)
|
|
|
|
func ToDuration(s string) (time.Duration, error) {
|
|
promDuration, err := prom_model.ParseDuration(s)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("invalid duration format: %w", err)
|
|
}
|
|
return time.Duration(promDuration), nil
|
|
}
|
|
|
|
// Convert the string duration to the longest valid Prometheus duration format (e.g., "60s" -> "1m")
|
|
func ClampDuration(s string) (string, error) {
|
|
promDuration, err := prom_model.ParseDuration(s)
|
|
if err != nil {
|
|
return "", fmt.Errorf("invalid duration format: %w", err)
|
|
}
|
|
return promDuration.String(), nil
|
|
}
|