mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-02 08:31:11 -08:00
Support Custom Timeouts for Queries
This commit is contained in:
parent
6634984a38
commit
c6b329c55b
|
@ -169,12 +169,24 @@ func (api *API) query(r *http.Request) (interface{}, *apiError) {
|
||||||
ts = api.now()
|
ts = api.now()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx := api.context(r)
|
||||||
|
if to := r.FormValue("timeout"); to != "" {
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
timeout, err := parseDuration(to)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &apiError{errorBadData, err}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, cancel = context.WithTimeout(ctx, timeout)
|
||||||
|
defer cancel()
|
||||||
|
}
|
||||||
|
|
||||||
qry, err := api.QueryEngine.NewInstantQuery(r.FormValue("query"), ts)
|
qry, err := api.QueryEngine.NewInstantQuery(r.FormValue("query"), ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &apiError{errorBadData, err}
|
return nil, &apiError{errorBadData, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
res := qry.Exec(api.context(r))
|
res := qry.Exec(ctx)
|
||||||
if res.Err != nil {
|
if res.Err != nil {
|
||||||
switch res.Err.(type) {
|
switch res.Err.(type) {
|
||||||
case promql.ErrQueryCanceled:
|
case promql.ErrQueryCanceled:
|
||||||
|
@ -221,12 +233,24 @@ func (api *API) queryRange(r *http.Request) (interface{}, *apiError) {
|
||||||
return nil, &apiError{errorBadData, err}
|
return nil, &apiError{errorBadData, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx := api.context(r)
|
||||||
|
if to := r.FormValue("timeout"); to != "" {
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
timeout, err := parseDuration(to)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &apiError{errorBadData, err}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, cancel = context.WithTimeout(ctx, timeout)
|
||||||
|
defer cancel()
|
||||||
|
}
|
||||||
|
|
||||||
qry, err := api.QueryEngine.NewRangeQuery(r.FormValue("query"), start, end, step)
|
qry, err := api.QueryEngine.NewRangeQuery(r.FormValue("query"), start, end, step)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &apiError{errorBadData, err}
|
return nil, &apiError{errorBadData, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
res := qry.Exec(api.context(r))
|
res := qry.Exec(ctx)
|
||||||
if res.Err != nil {
|
if res.Err != nil {
|
||||||
switch res.Err.(type) {
|
switch res.Err.(type) {
|
||||||
case promql.ErrQueryCanceled:
|
case promql.ErrQueryCanceled:
|
||||||
|
|
Loading…
Reference in a new issue