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

Method PrometheusRules

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

Source from the content-addressed store, hash-verified

121}
122
123func (a *API) PrometheusRules(w http.ResponseWriter, req *http.Request) {
124 logger := util_log.WithContext(req.Context(), a.logger)
125 userID, err := users.TenantID(req.Context())
126 if err != nil || userID == "" {
127 level.Error(logger).Log("msg", "error extracting org id from context", "err", err)
128 util_api.RespondError(logger, w, v1.ErrBadData, "no valid org id found", http.StatusBadRequest)
129 return
130 }
131
132 if err := req.ParseForm(); err != nil {
133 level.Error(logger).Log("msg", "error parsing form/query params", "err", err)
134 util_api.RespondError(logger, w, v1.ErrBadData, "error parsing form/query params", http.StatusBadRequest)
135 return
136 }
137
138 typ := strings.ToLower(req.URL.Query().Get("type"))
139 if typ != "" && typ != alertingRuleFilter && typ != recordingRuleFilter {
140 util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("unsupported rule type %q", typ), http.StatusBadRequest)
141 return
142 }
143
144 state := strings.ToLower(req.URL.Query().Get("state"))
145 if state != "" && state != firingStateFilter && state != pendingStateFilter && state != inactiveStateFilter && state != unknownStateFilter {
146 util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("unsupported state value %q", state), http.StatusBadRequest)
147 return
148 }
149
150 health := strings.ToLower(req.URL.Query().Get("health"))
151 if health != "" && health != unknownHealthFilter && health != okHealthFilter && health != errHealthFilter {
152 util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("unsupported health value %q", health), http.StatusBadRequest)
153 return
154 }
155
156 _, err = parseMatchersParam(req.Form["match[]"])
157 if err != nil {
158 level.Error(logger).Log("msg", "error parsing match query params", "err", err)
159 util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("error parsing match params %s", err), http.StatusBadRequest)
160 return
161 }
162
163 excludeAlerts, err := parseExcludeAlerts(req)
164 if err != nil {
165 util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("invalid parameter %q: %s", "exclude_alerts", err.Error()), http.StatusBadRequest)
166 return
167 }
168
169 paginationRequest, err := parseListRulesPaginationRequest(req)
170 if err != nil {
171 util_api.RespondError(logger, w, v1.ErrBadData, err.Error(), http.StatusBadRequest)
172 return
173 }
174
175 rulesRequest := RulesRequest{
176 RuleNames: req.Form["rule_name[]"],
177 RuleGroupNames: req.Form["rule_group[]"],
178 Files: req.Form["file[]"],
179 Type: typ,
180 State: state,

Callers 3

TestRuler_rulesFunction · 0.95
TestRuler_rules_limitFunction · 0.95

Calls 15

TenantIDFunction · 0.92
parseMatchersParamFunction · 0.85
parseExcludeAlertsFunction · 0.85
GetAlertMethod · 0.80
GetExprMethod · 0.80
GetLastErrorMethod · 0.80
GetRecordMethod · 0.80
GetMethod · 0.65
QueryMethod · 0.65
SetMethod · 0.65

Tested by 3

TestRuler_rulesFunction · 0.76
TestRuler_rules_limitFunction · 0.76