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

Method setConfig

pkg/configs/api/api.go:151–204  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

149}
150
151func (a *API) setConfig(w http.ResponseWriter, r *http.Request) {
152 userID, _, err := users.ExtractTenantIDFromHTTPRequest(r)
153 if err != nil {
154 http.Error(w, err.Error(), http.StatusUnauthorized)
155 return
156 }
157 logger := util_log.WithContext(r.Context(), util_log.Logger)
158
159 var cfg userconfig.Config
160 switch parseConfigFormat(r.Header.Get("Content-Type"), FormatJSON) {
161 case FormatJSON:
162 if err := json.NewDecoder(r.Body).Decode(&cfg); err != nil {
163 // XXX: Untested
164 level.Error(logger).Log("msg", "error decoding json body", "err", err)
165 http.Error(w, err.Error(), http.StatusBadRequest)
166 return
167 }
168 case FormatYAML:
169 if err := yaml.NewDecoder(r.Body).Decode(&cfg); err != nil {
170 // XXX: Untested
171 level.Error(logger).Log("msg", "error decoding yaml body", "err", err)
172 http.Error(w, err.Error(), http.StatusBadRequest)
173 return
174 }
175 default:
176 // should never reach this point
177 level.Error(logger).Log("msg", "unexpected error detecting the config format")
178 http.Error(w, err.Error(), http.StatusInternalServerError)
179 return
180 }
181
182 if err := validateAlertmanagerConfig(cfg.AlertmanagerConfig, a.cfg.Notifications); err != nil && cfg.AlertmanagerConfig != "" {
183 level.Error(logger).Log("msg", "invalid Alertmanager config", "err", err)
184 http.Error(w, fmt.Sprintf("Invalid Alertmanager config: %v", err), http.StatusBadRequest)
185 return
186 }
187 if err := validateRulesFiles(cfg, a.cfg.NameValidationScheme); err != nil {
188 level.Error(logger).Log("msg", "invalid rules", "err", err)
189 http.Error(w, fmt.Sprintf("Invalid rules: %v", err), http.StatusBadRequest)
190 return
191 }
192 if err := validateTemplateFiles(cfg); err != nil {
193 level.Error(logger).Log("msg", "invalid templates", "err", err)
194 http.Error(w, fmt.Sprintf("Invalid templates: %v", err), http.StatusBadRequest)
195 return
196 }
197 if err := a.db.SetConfig(r.Context(), userID, cfg); err != nil {
198 // XXX: Untested
199 level.Error(logger).Log("msg", "error storing config", "err", err)
200 http.Error(w, err.Error(), http.StatusInternalServerError)
201 return
202 }
203 w.WriteHeader(http.StatusNoContent)
204}
205
206func (a *API) validateAlertmanagerConfig(w http.ResponseWriter, r *http.Request) {
207 logger := util_log.WithContext(r.Context(), util_log.Logger)

Callers

nothing calls this directly

Calls 11

parseConfigFormatFunction · 0.85
validateRulesFilesFunction · 0.85
validateTemplateFilesFunction · 0.85
GetMethod · 0.65
DecodeMethod · 0.65
SetConfigMethod · 0.65
ErrorMethod · 0.45
ContextMethod · 0.45
LogMethod · 0.45

Tested by

no test coverage detected