(r *http.Request)
| 850 | } |
| 851 | |
| 852 | func (api *API) labelValues(r *http.Request) (result apiFuncResult) { |
| 853 | ctx := r.Context() |
| 854 | name := route.Param(ctx, "name") |
| 855 | |
| 856 | if strings.HasPrefix(name, "U__") { |
| 857 | name = model.UnescapeName(name, model.ValueEncodingEscaping) |
| 858 | } |
| 859 | |
| 860 | if !model.UTF8Validation.IsValidLabelName(name) { |
| 861 | return apiFuncResult{nil, &apiError{errorBadData, fmt.Errorf("invalid label name: %q", name)}, nil, nil} |
| 862 | } |
| 863 | |
| 864 | limit, err := parseLimitParam(r.FormValue("limit")) |
| 865 | if err != nil { |
| 866 | return invalidParamError(err, "limit") |
| 867 | } |
| 868 | |
| 869 | start, err := parseTimeParam(r, "start", MinTime) |
| 870 | if err != nil { |
| 871 | return invalidParamError(err, "start") |
| 872 | } |
| 873 | end, err := parseTimeParam(r, "end", MaxTime) |
| 874 | if err != nil { |
| 875 | return invalidParamError(err, "end") |
| 876 | } |
| 877 | |
| 878 | matcherSets, err := api.parseMatchersParam(r.Form["match[]"]) |
| 879 | if err != nil { |
| 880 | return apiFuncResult{nil, &apiError{errorBadData, err}, nil, nil} |
| 881 | } |
| 882 | |
| 883 | hints := &storage.LabelHints{ |
| 884 | Limit: toHintLimit(limit), |
| 885 | } |
| 886 | |
| 887 | q, err := api.Queryable.Querier(timestamp.FromTime(start), timestamp.FromTime(end)) |
| 888 | if err != nil { |
| 889 | return apiFuncResult{nil, &apiError{errorExec, err}, nil, nil} |
| 890 | } |
| 891 | // From now on, we must only return with a finalizer in the result (to |
| 892 | // be called by the caller) or call q.Close ourselves (which is required |
| 893 | // in the case of a panic). |
| 894 | defer func() { |
| 895 | if result.finalizer == nil { |
| 896 | q.Close() |
| 897 | } |
| 898 | }() |
| 899 | closer := func() { |
| 900 | q.Close() |
| 901 | } |
| 902 | |
| 903 | var ( |
| 904 | vals []string |
| 905 | warnings annotations.Annotations |
| 906 | ) |
| 907 | if len(matcherSets) > 1 { |
| 908 | var callWarnings annotations.Annotations |
| 909 | labelValuesSet := make(map[string]struct{}) |
nothing calls this directly
no test coverage detected