package api import ( "github.com/grafana/grafana/pkg/api/response" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/datasources" apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" ) type PrometheusApiHandler struct { ProxySvc *LotexProm GrafanaSvc *PrometheusSrv DatasourceCache datasources.CacheService } // NewForkingProm implements a set of routes that proxy to various Prometheus-compatible backends. func NewForkingProm(datasourceCache datasources.CacheService, proxy *LotexProm, grafana *PrometheusSrv) *PrometheusApiHandler { return &PrometheusApiHandler{ ProxySvc: proxy, GrafanaSvc: grafana, DatasourceCache: datasourceCache, } } func (f *PrometheusApiHandler) handleRouteGetAlertStatuses(ctx *models.ReqContext, dsUID string) response.Response { t, err := f.getService(ctx) if err != nil { return errorToResponse(err) } return t.RouteGetAlertStatuses(ctx) } func (f *PrometheusApiHandler) handleRouteGetRuleStatuses(ctx *models.ReqContext, dsUID string) response.Response { t, err := f.getService(ctx) if err != nil { return errorToResponse(err) } return t.RouteGetRuleStatuses(ctx) } func (f *PrometheusApiHandler) handleRouteGetGrafanaAlertStatuses(ctx *models.ReqContext) response.Response { return f.GrafanaSvc.RouteGetAlertStatuses(ctx) } func (f *PrometheusApiHandler) handleRouteGetGrafanaRuleStatuses(ctx *models.ReqContext) response.Response { return f.GrafanaSvc.RouteGetRuleStatuses(ctx) } func (f *PrometheusApiHandler) getService(ctx *models.ReqContext) (*LotexProm, error) { _, err := getDatasourceByUID(ctx, f.DatasourceCache, apimodels.LoTexRulerBackend) if err != nil { return nil, err } return f.ProxySvc, nil }