diff --git a/documentation/examples/remote_storage/example_write_adapter/server.go b/documentation/examples/remote_storage/example_write_adapter/server.go index f33a1de6c3c45824b9d8acab0ece7527ac787cfd..b94ef8fc25cc02e3796534409678d5ac07b71854 100644 --- a/documentation/examples/remote_storage/example_write_adapter/server.go +++ b/documentation/examples/remote_storage/example_write_adapter/server.go @@ -16,6 +16,7 @@ package main import ( "fmt" "io/ioutil" + "log" "net/http" "github.com/gogo/protobuf/proto" @@ -58,5 +59,5 @@ func main() { } }) - http.ListenAndServe(":1234", nil) + log.Fatal(http.ListenAndServe(":1234", nil)) } diff --git a/documentation/examples/remote_storage/remote_storage_adapter/main.go b/documentation/examples/remote_storage/remote_storage_adapter/main.go index d2c83d5b9a93bb3feb165326c9bd1f843581c6f9..8a48cf87776fdf239cefb8180686fb424ef638b3 100644 --- a/documentation/examples/remote_storage/remote_storage_adapter/main.go +++ b/documentation/examples/remote_storage/remote_storage_adapter/main.go @@ -100,11 +100,16 @@ func main() { http.Handle(cfg.telemetryPath, prometheus.Handler()) logLevel := promlog.AllowedLevel{} - logLevel.Set(cfg.logLevel) + if err := logLevel.Set(cfg.logLevel); err != nil { + panic(fmt.Sprintf("Error setting log level: %v", err)) + } logger := promlog.New(logLevel) writers, readers := buildClients(logger, cfg) - serve(logger, cfg.listenAddr, writers, readers) + if err := serve(logger, cfg.listenAddr, writers, readers); err != nil { + level.Error(logger).Log("msg", "Failed to listen", "addr", cfg.listenAddr, "err", err) + os.Exit(1) + } } func parseFlags() *config { diff --git a/promql/test.go b/promql/test.go index 14a5f399f490690466737067ebe7f8ef0cfa7980..f903e86e217ef82ca208ca17779c48125289e43d 100644 --- a/promql/test.go +++ b/promql/test.go @@ -433,7 +433,10 @@ func (t *Test) exec(tc testCommand) error { } case *evalCmd: - q, _ := t.queryEngine.NewInstantQuery(t.storage, cmd.expr, cmd.start) + q, err := t.queryEngine.NewInstantQuery(t.storage, cmd.expr, cmd.start) + if err != nil { + return err + } res := q.Exec(t.context) if res.Err != nil { if cmd.fail { @@ -446,14 +449,17 @@ func (t *Test) exec(tc testCommand) error { return fmt.Errorf("expected error evaluating query %q (line %d) but got none", cmd.expr, cmd.line) } - err := cmd.compareResult(res.Value) + err = cmd.compareResult(res.Value) if err != nil { return fmt.Errorf("error in %s %s: %s", cmd, cmd.expr, err) } // Check query returns same result in range mode, /// by checking against the middle step. - q, _ = t.queryEngine.NewRangeQuery(t.storage, cmd.expr, cmd.start.Add(-time.Minute), cmd.start.Add(time.Minute), time.Minute) + q, err = t.queryEngine.NewRangeQuery(t.storage, cmd.expr, cmd.start.Add(-time.Minute), cmd.start.Add(time.Minute), time.Minute) + if err != nil { + return err + } rangeRes := q.Exec(t.context) if rangeRes.Err != nil { return fmt.Errorf("error evaluating query %q (line %d) in range mode: %s", cmd.expr, cmd.line, rangeRes.Err) diff --git a/rules/manager.go b/rules/manager.go index c40ff2bfc547a32b7005459a9218648d830ea4c7..eb49a9c4b7f459a1b0a6d952d47fa81ee46f475a 100644 --- a/rules/manager.go +++ b/rules/manager.go @@ -485,7 +485,10 @@ func (g *Group) RestoreForState(ts time.Time) { smpl := alertRule.forStateSample(a, time.Now(), 0) var matchers []*labels.Matcher for _, l := range smpl.Metric { - mt, _ := labels.NewMatcher(labels.MatchEqual, l.Name, l.Value) + mt, err := labels.NewMatcher(labels.MatchEqual, l.Name, l.Value) + if err != nil { + panic(err) + } matchers = append(matchers, mt) } diff --git a/scrape/scrape.go b/scrape/scrape.go index 1712407136ce75bf925a9b8d4a1c296c52379e6d..1d29ee5ca2a9214b7f2c41f39f19c75a36bc5e67 100644 --- a/scrape/scrape.go +++ b/scrape/scrape.go @@ -482,7 +482,9 @@ func (s *targetScraper) scrape(ctx context.Context, w io.Writer) error { } } else { s.buf.Reset(resp.Body) - s.gzipr.Reset(s.buf) + if err = s.gzipr.Reset(s.buf); err != nil { + return err + } } _, err = io.Copy(w, s.gzipr) @@ -813,7 +815,9 @@ mainLoop: scrapeErr = appErr } - sl.report(start, time.Since(start), total, added, scrapeErr) + if err := sl.report(start, time.Since(start), total, added, scrapeErr); err != nil { + level.Warn(sl.l).Log("msg", "appending scrape report failed", "err", err) + } last = start select { diff --git a/storage/remote/write.go b/storage/remote/write.go index 7427b3bbb8490b28872d57cea80ceb48b90f7bc7..93beca2f5b9f2871ebd048e7014a4dddf87fcccf 100644 --- a/storage/remote/write.go +++ b/storage/remote/write.go @@ -29,11 +29,13 @@ func (s *Storage) Add(l labels.Labels, t int64, v float64) (uint64, error) { s.mtx.RLock() defer s.mtx.RUnlock() for _, q := range s.queues { - q.Append(&model.Sample{ + if err := q.Append(&model.Sample{ Metric: labelsToMetric(l), Timestamp: model.Time(t), Value: model.SampleValue(v), - }) + }); err != nil { + panic(err) // QueueManager.Append() should always return nil as per doc string. + } } return 0, nil } diff --git a/web/api/v1/api.go b/web/api/v1/api.go index f9be522d8ada8698170080c0a200b0ace88f2657..3ffbc99645bc72fc96d1a824d1afc98b4c93a80a 100644 --- a/web/api/v1/api.go +++ b/web/api/v1/api.go @@ -380,7 +380,9 @@ var ( ) func (api *API) series(r *http.Request) (interface{}, *apiError, func()) { - r.ParseForm() + if err := r.ParseForm(); err != nil { + return nil, &apiError{errorBadData, fmt.Errorf("error parsing form values: %v", err)}, nil + } if len(r.Form["match[]"]) == 0 { return nil, &apiError{errorBadData, fmt.Errorf("no match[] parameter provided")}, nil } @@ -816,7 +818,9 @@ func (api *API) deleteSeries(r *http.Request) (interface{}, *apiError, func()) { return nil, &apiError{errorUnavailable, errors.New("TSDB not ready")}, nil } - r.ParseForm() + if err := r.ParseForm(); err != nil { + return nil, &apiError{errorBadData, fmt.Errorf("error parsing form values: %v", err)}, nil + } if len(r.Form["match[]"]) == 0 { return nil, &apiError{errorBadData, fmt.Errorf("no match[] parameter provided")}, nil } @@ -866,7 +870,10 @@ func (api *API) snapshot(r *http.Request) (interface{}, *apiError, func()) { if !api.enableAdmin { return nil, &apiError{errorUnavailable, errors.New("Admin APIs disabled")}, nil } - skipHead, _ := strconv.ParseBool(r.FormValue("skip_head")) + skipHead, err := strconv.ParseBool(r.FormValue("skip_head")) + if err != nil { + return nil, &apiError{errorUnavailable, fmt.Errorf("unable to parse boolean 'skip_head' argument: %v", err)}, nil + } db := api.db() if db == nil { diff --git a/web/federate.go b/web/federate.go index ac500fb61f8908e9ffffcb5a8b66948994a13085..121e0327152cc84320d9788be6876bda0c9b0518 100644 --- a/web/federate.go +++ b/web/federate.go @@ -14,6 +14,7 @@ package web import ( + "fmt" "net/http" "sort" @@ -42,7 +43,10 @@ func (h *Handler) federation(w http.ResponseWriter, req *http.Request) { h.mtx.RLock() defer h.mtx.RUnlock() - req.ParseForm() + if err := req.ParseForm(); err != nil { + http.Error(w, fmt.Sprintf("error parsing form values: %v", err), http.StatusBadRequest) + return + } var matcherSets [][]*labels.Matcher for _, s := range req.Form["match[]"] {