|
|
@ -317,7 +317,7 @@ func (api *API) options(r *http.Request) apiFuncResult {
|
|
|
|
return apiFuncResult{nil, nil, nil, nil}
|
|
|
|
return apiFuncResult{nil, nil, nil, nil}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (api *API) query(r *http.Request) apiFuncResult {
|
|
|
|
func (api *API) query(r *http.Request) (result apiFuncResult) {
|
|
|
|
ts, err := parseTimeParam(r, "time", api.now())
|
|
|
|
ts, err := parseTimeParam(r, "time", api.now())
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
@ -340,6 +340,14 @@ func (api *API) query(r *http.Request) apiFuncResult {
|
|
|
|
err = errors.Wrapf(err, "invalid parameter 'query'")
|
|
|
|
err = errors.Wrapf(err, "invalid parameter 'query'")
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// From now on, we must only return with a finalizer in the result (to
|
|
|
|
|
|
|
|
// be called by the caller) or call qry.Close ourselves (which is
|
|
|
|
|
|
|
|
// required in the case of a panic).
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
|
|
if result.finalizer == nil {
|
|
|
|
|
|
|
|
qry.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
ctx = httputil.ContextFromRequest(ctx, r)
|
|
|
|
ctx = httputil.ContextFromRequest(ctx, r)
|
|
|
|
|
|
|
|
|
|
|
@ -361,7 +369,7 @@ func (api *API) query(r *http.Request) apiFuncResult {
|
|
|
|
}, nil, res.Warnings, qry.Close}
|
|
|
|
}, nil, res.Warnings, qry.Close}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (api *API) queryRange(r *http.Request) apiFuncResult {
|
|
|
|
func (api *API) queryRange(r *http.Request) (result apiFuncResult) {
|
|
|
|
start, err := parseTime(r.FormValue("start"))
|
|
|
|
start, err := parseTime(r.FormValue("start"))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
err = errors.Wrapf(err, "invalid parameter 'start'")
|
|
|
|
err = errors.Wrapf(err, "invalid parameter 'start'")
|
|
|
@ -412,6 +420,14 @@ func (api *API) queryRange(r *http.Request) apiFuncResult {
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
|
return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// From now on, we must only return with a finalizer in the result (to
|
|
|
|
|
|
|
|
// be called by the caller) or call qry.Close ourselves (which is
|
|
|
|
|
|
|
|
// required in the case of a panic).
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
|
|
if result.finalizer == nil {
|
|
|
|
|
|
|
|
qry.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
ctx = httputil.ContextFromRequest(ctx, r)
|
|
|
|
ctx = httputil.ContextFromRequest(ctx, r)
|
|
|
|
|
|
|
|
|
|
|
@ -464,7 +480,7 @@ func (api *API) labelNames(r *http.Request) apiFuncResult {
|
|
|
|
return apiFuncResult{names, nil, warnings, nil}
|
|
|
|
return apiFuncResult{names, nil, warnings, nil}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (api *API) labelValues(r *http.Request) apiFuncResult {
|
|
|
|
func (api *API) labelValues(r *http.Request) (result apiFuncResult) {
|
|
|
|
ctx := r.Context()
|
|
|
|
ctx := r.Context()
|
|
|
|
name := route.Param(ctx, "name")
|
|
|
|
name := route.Param(ctx, "name")
|
|
|
|
|
|
|
|
|
|
|
@ -475,7 +491,14 @@ func (api *API) labelValues(r *http.Request) apiFuncResult {
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return apiFuncResult{nil, &apiError{errorExec, err}, nil, nil}
|
|
|
|
return apiFuncResult{nil, &apiError{errorExec, err}, nil, nil}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// From now on, we must only return with a finalizer in the result (to
|
|
|
|
|
|
|
|
// be called by the caller) or call q.Close ourselves (which is required
|
|
|
|
|
|
|
|
// in the case of a panic).
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
|
|
if result.finalizer == nil {
|
|
|
|
|
|
|
|
q.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
closer := func() {
|
|
|
|
closer := func() {
|
|
|
|
q.Close()
|
|
|
|
q.Close()
|
|
|
|
}
|
|
|
|
}
|
|
|
|