diff --git a/api/prometheus/v1/api.go b/api/prometheus/v1/api.go index 77e7348..c081bc8 100644 --- a/api/prometheus/v1/api.go +++ b/api/prometheus/v1/api.go @@ -237,7 +237,7 @@ type API interface { // QueryRange performs a query for the given range. QueryRange(ctx context.Context, query string, r Range) (model.Value, api.Warnings, error) // Series finds series by label matchers. - Series(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) ([]model.LabelSet, error) + Series(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) ([]model.LabelSet, api.Warnings, error) // Snapshot creates a snapshot of all current data into snapshots/- // under the TSDB's data directory and returns the directory as response. Snapshot(ctx context.Context, skipHead bool) (SnapshotResult, error) @@ -696,7 +696,7 @@ func (h *httpAPI) QueryRange(ctx context.Context, query string, r Range) (model. return model.Value(qres.v), warnings, json.Unmarshal(body, &qres) } -func (h *httpAPI) Series(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) ([]model.LabelSet, error) { +func (h *httpAPI) Series(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) ([]model.LabelSet, api.Warnings, error) { u := h.client.URL(epSeries, nil) q := u.Query() @@ -711,16 +711,16 @@ func (h *httpAPI) Series(ctx context.Context, matches []string, startTime time.T req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { - return nil, err + return nil, nil, err } - _, body, _, err := h.client.Do(ctx, req) + _, body, warnings, err := h.client.Do(ctx, req) if err != nil { - return nil, err + return nil, warnings, err } var mset []model.LabelSet - return mset, json.Unmarshal(body, &mset) + return mset, warnings, json.Unmarshal(body, &mset) } func (h *httpAPI) Snapshot(ctx context.Context, skipHead bool) (SnapshotResult, error) { diff --git a/api/prometheus/v1/api_test.go b/api/prometheus/v1/api_test.go index f6b4897..28e7214 100644 --- a/api/prometheus/v1/api_test.go +++ b/api/prometheus/v1/api_test.go @@ -163,8 +163,7 @@ func TestAPIs(t *testing.T) { doSeries := func(matcher string, startTime time.Time, endTime time.Time) func() (interface{}, api.Warnings, error) { return func() (interface{}, api.Warnings, error) { - v, err := promAPI.Series(context.Background(), []string{matcher}, startTime, endTime) - return v, nil, err + return promAPI.Series(context.Background(), []string{matcher}, startTime, endTime) } } @@ -386,6 +385,32 @@ func TestAPIs(t *testing.T) { }, }, }, + // Series with data + warning. + { + do: doSeries("up", testTime.Add(-time.Minute), testTime), + inRes: []map[string]string{ + { + "__name__": "up", + "job": "prometheus", + "instance": "localhost:9090"}, + }, + inWarnings: []string{"a"}, + reqMethod: "GET", + reqPath: "/api/v1/series", + reqParam: url.Values{ + "match": []string{"up"}, + "start": []string{testTime.Add(-time.Minute).Format(time.RFC3339Nano)}, + "end": []string{testTime.Format(time.RFC3339Nano)}, + }, + res: []model.LabelSet{ + { + "__name__": "up", + "job": "prometheus", + "instance": "localhost:9090", + }, + }, + warnings: []string{"a"}, + }, { do: doSeries("up", testTime.Add(-time.Minute), testTime), @@ -399,6 +424,21 @@ func TestAPIs(t *testing.T) { }, err: fmt.Errorf("some error"), }, + // Series with error and warning. + { + do: doSeries("up", testTime.Add(-time.Minute), testTime), + inErr: fmt.Errorf("some error"), + inWarnings: []string{"a"}, + reqMethod: "GET", + reqPath: "/api/v1/series", + reqParam: url.Values{ + "match": []string{"up"}, + "start": []string{testTime.Add(-time.Minute).Format(time.RFC3339Nano)}, + "end": []string{testTime.Format(time.RFC3339Nano)}, + }, + err: fmt.Errorf("some error"), + warnings: []string{"a"}, + }, { do: doSnapshot(true),