Prometheus: Add support for cloud partners Prometheus data sources (#103482)
* wip * Add prom flavor support for data source variables and export/import dashboards (#103321) * add dashboard and data source var selection * use match plugin id instead * use updated matchpluginid * formatting * cleanup * regex anchor * update error msg * Alerting: Clean up prometheus-flavored types and functions (#103703) * clean up types and utility functions for dealing with prometheus-flavored data sources * Refactor alerting datasource types to use constants as source of truth * Alerting: Clean up prometheus-flavored types and functions on the bac… (#103716) Alerting: Clean up prometheus-flavored types and functions on the backend * add matchPluginId tests * Update matchPluginId func to bidirectional (#103746) * update matchpluginid func to bidirectional * lint * formatting * use actual isSupportedExternalRulesSourceType in test * add tests in datasource_srv * betterer * remove type assertion * remove unnecessary case * use satisifies to not have to convert tuple to an array of string * add prometheus_flavor test --------- Co-authored-by: Andrew Hackmann <5140848+bossinc@users.noreply.github.com> Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com> Co-authored-by: Alexander Akhmetov <me@alx.cx>
This commit is contained in:
co-authored by
Andrew Hackmann
Gilles De Mey
Alexander Akhmetov
parent
22a9e1b5ff
commit
fd6fd91115
@@ -31,7 +31,28 @@ const (
|
||||
groupQueryTag = "QUERY_GROUP"
|
||||
)
|
||||
|
||||
var searchRegex = regexp.MustCompile(`\{(\w+)\}`)
|
||||
var (
|
||||
searchRegex = regexp.MustCompile(`\{(\w+)\}`)
|
||||
|
||||
prometheusCompatibleDsTypes = []string{
|
||||
datasources.DS_PROMETHEUS,
|
||||
datasources.DS_AMAZON_PROMETHEUS,
|
||||
datasources.DS_AZURE_PROMETHEUS,
|
||||
}
|
||||
)
|
||||
|
||||
func isPrometheusCompatible(dsType string) bool {
|
||||
for _, t := range prometheusCompatibleDsTypes {
|
||||
if dsType == t {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func isLotexRulerCompatible(dsType string) bool {
|
||||
return dsType == datasources.DS_LOKI || isPrometheusCompatible(dsType)
|
||||
}
|
||||
|
||||
func toMacaronPath(path string) string {
|
||||
return string(searchRegex.ReplaceAllFunc([]byte(path), func(s []byte) []byte {
|
||||
@@ -52,8 +73,8 @@ func getDatasourceByUID(ctx *contextmodel.ReqContext, cache datasources.CacheSer
|
||||
return nil, unexpectedDatasourceTypeError(ds.Type, "alertmanager")
|
||||
}
|
||||
case apimodels.LoTexRulerBackend:
|
||||
if ds.Type != "loki" && ds.Type != "prometheus" {
|
||||
return nil, unexpectedDatasourceTypeError(ds.Type, "loki, prometheus")
|
||||
if !isLotexRulerCompatible(ds.Type) {
|
||||
return nil, unexpectedDatasourceTypeError(ds.Type, "loki, prometheus, amazon prometheus, azure prometheus")
|
||||
}
|
||||
default:
|
||||
return nil, unexpectedDatasourceTypeError(ds.Type, expectedType.String())
|
||||
|
||||
Reference in New Issue
Block a user