MCPcopy Index your code
hub / github.com/cortexproject/cortex / PrometheusAlerts

Method PrometheusAlerts

pkg/ruler/api.go:335–394  ·  view source on GitHub ↗
(w http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

333}
334
335func (a *API) PrometheusAlerts(w http.ResponseWriter, req *http.Request) {
336 logger := util_log.WithContext(req.Context(), a.logger)
337 userID, err := users.TenantID(req.Context())
338 if err != nil || userID == "" {
339 level.Error(logger).Log("msg", "error extracting org id from context", "err", err)
340 util_api.RespondError(logger, w, v1.ErrBadData, "no valid org id found", http.StatusBadRequest)
341 return
342 }
343
344 w.Header().Set("Content-Type", "application/json")
345 rulesRequest := RulesRequest{
346 Type: alertingRuleFilter,
347 MaxRuleGroups: -1,
348 }
349 rulesResponse, err := a.ruler.GetRules(req.Context(), rulesRequest)
350
351 if err != nil {
352 util_api.RespondError(logger, w, v1.ErrServer, err.Error(), http.StatusInternalServerError)
353 return
354 }
355
356 rgs := rulesResponse.Groups
357
358 alerts := []*Alert{}
359
360 for _, g := range rgs {
361 for _, rl := range g.ActiveRules {
362 if rl.Rule.Alert != "" {
363 for _, a := range rl.Alerts {
364 alert := &Alert{
365 Labels: cortexpb.FromLabelAdaptersToLabels(a.Labels),
366 Annotations: cortexpb.FromLabelAdaptersToLabels(a.Annotations),
367 State: a.GetState(),
368 ActiveAt: &a.ActiveAt,
369 Value: strconv.FormatFloat(a.Value, 'e', -1, 64),
370 }
371 if !a.KeepFiringSince.IsZero() {
372 alert.KeepFiringSince = &a.KeepFiringSince
373 }
374 alerts = append(alerts, alert)
375 }
376 }
377 }
378 }
379
380 b, err := json.Marshal(&util_api.Response{
381 Status: "success",
382 Data: &AlertDiscovery{Alerts: alerts},
383 })
384 if err != nil {
385 level.Error(logger).Log("msg", "error marshaling json response", "err", err)
386 util_api.RespondError(logger, w, v1.ErrServer, "unable to marshal the requested data", http.StatusInternalServerError)
387 return
388 }
389 w.Header().Set("Content-Type", "application/json")
390 w.WriteHeader(http.StatusOK)
391 if n, err := w.Write(b); err != nil {
392 level.Error(logger).Log("msg", "error writing response", "bytesWritten", n, "err", err)

Callers 1

TestRuler_alertsFunction · 0.95

Calls 11

TenantIDFunction · 0.92
SetMethod · 0.65
GetRulesMethod · 0.65
ContextMethod · 0.45
LogMethod · 0.45
ErrorMethod · 0.45
HeaderMethod · 0.45
GetStateMethod · 0.45
MarshalMethod · 0.45
WriteMethod · 0.45

Tested by 1

TestRuler_alertsFunction · 0.76