mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 20:24:18 -06:00
ee06970d72
* [Alerting]: Grafana managed ruler API impl * Apply suggestions from code review * fix lint * Add validation for ruleGroup name length * Fix MySQL migration Co-authored-by: kyle <kyle@grafana.com>
129 lines
3.8 KiB
Go
129 lines
3.8 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
apimodels "github.com/grafana/alerting-api/pkg/api"
|
|
"github.com/grafana/grafana/pkg/api/response"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/services/datasources"
|
|
)
|
|
|
|
// ForkedRuler will validate and proxy requests to the correct backend type depending on the datasource.
|
|
type ForkedRuler struct {
|
|
LotexRuler, GrafanaRuler RulerApiService
|
|
DatasourceCache datasources.CacheService
|
|
}
|
|
|
|
func NewForkedRuler(datasourceCache datasources.CacheService, lotex, grafana RulerApiService) *ForkedRuler {
|
|
return &ForkedRuler{
|
|
LotexRuler: lotex,
|
|
GrafanaRuler: grafana,
|
|
DatasourceCache: datasourceCache,
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RouteDeleteNamespaceRulesConfig(ctx *models.ReqContext) response.Response {
|
|
t, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
switch t {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RouteDeleteNamespaceRulesConfig(ctx)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RouteDeleteNamespaceRulesConfig(ctx)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", t), nil)
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RouteDeleteRuleGroupConfig(ctx *models.ReqContext) response.Response {
|
|
t, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
switch t {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RouteDeleteRuleGroupConfig(ctx)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RouteDeleteRuleGroupConfig(ctx)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", t), nil)
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RouteGetNamespaceRulesConfig(ctx *models.ReqContext) response.Response {
|
|
t, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
switch t {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RouteGetNamespaceRulesConfig(ctx)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RouteGetNamespaceRulesConfig(ctx)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", t), nil)
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RouteGetRulegGroupConfig(ctx *models.ReqContext) response.Response {
|
|
t, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
switch t {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RouteGetRulegGroupConfig(ctx)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RouteGetRulegGroupConfig(ctx)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", t), nil)
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RouteGetRulesConfig(ctx *models.ReqContext) response.Response {
|
|
t, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
switch t {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RouteGetRulesConfig(ctx)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RouteGetRulesConfig(ctx)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", t), nil)
|
|
}
|
|
}
|
|
|
|
func (r *ForkedRuler) RoutePostNameRulesConfig(ctx *models.ReqContext, conf apimodels.PostableRuleGroupConfig) response.Response {
|
|
backendType, err := backendType(ctx, r.DatasourceCache)
|
|
if err != nil {
|
|
return response.Error(400, err.Error(), nil)
|
|
}
|
|
payloadType := conf.Type()
|
|
|
|
if backendType != payloadType {
|
|
return response.Error(
|
|
400,
|
|
fmt.Sprintf(
|
|
"unexpected backend type (%v) vs payload type (%v)",
|
|
backendType,
|
|
payloadType,
|
|
),
|
|
nil,
|
|
)
|
|
}
|
|
|
|
switch backendType {
|
|
case apimodels.GrafanaBackend:
|
|
return r.GrafanaRuler.RoutePostNameRulesConfig(ctx, conf)
|
|
case apimodels.LoTexRulerBackend:
|
|
return r.LotexRuler.RoutePostNameRulesConfig(ctx, conf)
|
|
default:
|
|
return response.Error(400, fmt.Sprintf("unexpected backend type (%v)", backendType), nil)
|
|
}
|
|
}
|