( ctx context.Context, w http.ResponseWriter, req *prompb.ReadRequest, externalLabels map[string]string, sortedExternalLabels []prompb.Label, )
| 114 | } |
| 115 | |
| 116 | func (h *readHandler) remoteReadSamples( |
| 117 | ctx context.Context, |
| 118 | w http.ResponseWriter, |
| 119 | req *prompb.ReadRequest, |
| 120 | externalLabels map[string]string, |
| 121 | sortedExternalLabels []prompb.Label, |
| 122 | ) { |
| 123 | w.Header().Set("Content-Type", "application/x-protobuf") |
| 124 | w.Header().Set("Content-Encoding", "snappy") |
| 125 | |
| 126 | resp := prompb.ReadResponse{ |
| 127 | Results: make([]*prompb.QueryResult, len(req.Queries)), |
| 128 | } |
| 129 | for i, query := range req.Queries { |
| 130 | if err := func() error { |
| 131 | filteredMatchers, err := filterExtLabelsFromMatchers(query.Matchers, externalLabels) |
| 132 | if err != nil { |
| 133 | return err |
| 134 | } |
| 135 | |
| 136 | querier, err := h.queryable.Querier(query.StartTimestampMs, query.EndTimestampMs) |
| 137 | if err != nil { |
| 138 | return err |
| 139 | } |
| 140 | defer func() { |
| 141 | if err := querier.Close(); err != nil { |
| 142 | h.logger.Warn("Error on querier close", "err", err.Error()) |
| 143 | } |
| 144 | }() |
| 145 | |
| 146 | var hints *storage.SelectHints |
| 147 | if query.Hints != nil { |
| 148 | hints = &storage.SelectHints{ |
| 149 | Start: query.Hints.StartMs, |
| 150 | End: query.Hints.EndMs, |
| 151 | Step: query.Hints.StepMs, |
| 152 | Func: query.Hints.Func, |
| 153 | Grouping: query.Hints.Grouping, |
| 154 | Range: query.Hints.RangeMs, |
| 155 | By: query.Hints.By, |
| 156 | } |
| 157 | } |
| 158 | |
| 159 | var ws annotations.Annotations |
| 160 | resp.Results[i], ws, err = ToQueryResult(querier.Select(ctx, false, hints, filteredMatchers...), h.remoteReadSampleLimit) |
| 161 | if err != nil { |
| 162 | return err |
| 163 | } |
| 164 | for _, w := range ws { |
| 165 | h.logger.Warn("Warnings on remote read query", "err", w.Error()) |
| 166 | } |
| 167 | for _, ts := range resp.Results[i].Timeseries { |
| 168 | ts.Labels = MergeLabels(ts.Labels, sortedExternalLabels) |
| 169 | } |
| 170 | return nil |
| 171 | }(); err != nil { |
| 172 | var httpErr HTTPError |
| 173 | if errors.As(err, &httpErr) { |
no test coverage detected