Skip to content

Commit 79434ab

Browse files
authored
Pass start and end timeframe for labels, values, and profile types (#446)
1 parent c16e036 commit 79434ab

File tree

3 files changed

+103
-82
lines changed

3 files changed

+103
-82
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ go 1.24.0
55
toolchain go1.25.3
66

77
require (
8-
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20250716091922-79400b5144e4.2
9-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20250716091922-79400b5144e4.1
8+
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20251021111352-8328e0e94621.2
9+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20251021111352-8328e0e94621.1
1010
connectrpc.com/connect v1.19.1
1111
github.com/cenkalti/backoff/v4 v4.3.0
1212
github.com/hashicorp/vault/api v1.22.0

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20250716091922-79400b5144e4.2 h1:mETAkfSodS1A1Og5in2a9Cw/+onldflO4pFUzU9DCUE=
2-
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20250716091922-79400b5144e4.2/go.mod h1:8OjHGiXKzTEyjNj7K608zlSGBE1E30rgT/znEOxzmJg=
3-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20250716091922-79400b5144e4.1 h1:gkuajXsobV40mI1Sp5m1fSkps473S4R46bpSi0OUY2U=
4-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20250716091922-79400b5144e4.1/go.mod h1:5enZD+ezsVK1m/ZM9AMEUxQMxsKGWc5MJx0gt9ho+tc=
1+
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20251021111352-8328e0e94621.2 h1:/I/99swn2eTCOysciz6dqfBSP0PdefKJ7cUkMVtY6IY=
2+
buf.build/gen/go/parca-dev/parca/connectrpc/go v1.19.1-20251021111352-8328e0e94621.2/go.mod h1:hf8SY/W7IKtH4jrPyokIfWb379Ag7k0pLi26cYYmKLA=
3+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20251021111352-8328e0e94621.1 h1:e14Gfkc3g4pOBfydTgLN6woCWpXdD9etjNQ+zV+a6b4=
4+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.10-20251021111352-8328e0e94621.1/go.mod h1:5enZD+ezsVK1m/ZM9AMEUxQMxsKGWc5MJx0gt9ho+tc=
55
connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14=
66
connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w=
77
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=

querier.go

Lines changed: 97 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -170,30 +170,38 @@ func (q *Querier) Stop() {
170170
}
171171

172172
func (q *Querier) queryLabels(ctx context.Context, interval time.Duration) {
173-
var resp *connect.Response[queryv1alpha1.LabelsResponse]
174-
var count int
175-
operation := func() (err error) {
176-
defer func() { count++ }()
173+
for _, tr := range q.queryTimeRanges {
174+
rangeEnd := time.Now()
175+
rangeStart := rangeEnd.Add(-1 * tr)
177176

178-
queryStart := time.Now()
179-
resp, err = q.client.Labels(ctx, connect.NewRequest(&queryv1alpha1.LabelsRequest{}))
180-
latency := time.Since(queryStart)
181-
if err != nil {
182-
q.metrics.labelsHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
183-
log.Println("labels: failed to make request", count, err)
184-
return
185-
}
186-
q.metrics.labelsHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
187-
q.labels = append(q.labels[:0], resp.Msg.LabelNames...)
188-
log.Printf("labels: took %v and got %d results\n", latency, len(resp.Msg.LabelNames))
177+
var resp *connect.Response[queryv1alpha1.LabelsResponse]
178+
var count int
179+
operation := func() (err error) {
180+
defer func() { count++ }()
189181

190-
return nil
191-
}
182+
queryStart := time.Now()
183+
resp, err = q.client.Labels(ctx, connect.NewRequest(&queryv1alpha1.LabelsRequest{
184+
Start: timestamppb.New(rangeStart),
185+
End: timestamppb.New(rangeEnd),
186+
}))
187+
latency := time.Since(queryStart)
188+
if err != nil {
189+
q.metrics.labelsHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
190+
log.Printf("labels(over=%s): failed to make request %d: %v\n", tr, count, err)
191+
return
192+
}
193+
q.metrics.labelsHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
194+
q.labels = append(q.labels[:0], resp.Msg.LabelNames...)
195+
log.Printf("labels(over=%s): took %v and got %d results\n", tr, latency, len(resp.Msg.LabelNames))
192196

193-
exp := backoff.NewExponentialBackOff()
194-
exp.MaxElapsedTime = interval
195-
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
196-
return
197+
return nil
198+
}
199+
200+
exp := backoff.NewExponentialBackOff()
201+
exp.MaxElapsedTime = interval
202+
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
203+
continue
204+
}
197205
}
198206
}
199207

@@ -204,73 +212,86 @@ func (q *Querier) queryValues(ctx context.Context, interval time.Duration) {
204212
}
205213
label := q.labels[q.rng.Intn(len(q.labels))]
206214

207-
var resp *connect.Response[queryv1alpha1.ValuesResponse]
208-
var count int
209-
operation := func() (err error) {
210-
defer func() { count++ }()
211-
queryStart := time.Now()
212-
resp, err = q.client.Values(ctx, connect.NewRequest(&queryv1alpha1.ValuesRequest{
213-
LabelName: label,
214-
Match: nil,
215-
Start: timestamppb.New(time.Now().Add(-1 * time.Hour)),
216-
End: timestamppb.New(time.Now()),
217-
}))
218-
latency := time.Since(queryStart)
219-
if err != nil {
220-
q.metrics.valuesHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
221-
log.Printf("values(label=%s): failed to make request %d: %v\n", label, count, err)
222-
return
223-
}
224-
q.metrics.valuesHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
225-
log.Printf("values(label=%s): took %v and got %d results\n", label, latency, len(resp.Msg.LabelValues))
215+
for _, tr := range q.queryTimeRanges {
216+
rangeEnd := time.Now()
217+
rangeStart := rangeEnd.Add(-1 * tr)
226218

227-
return nil
228-
}
219+
var resp *connect.Response[queryv1alpha1.ValuesResponse]
220+
var count int
221+
operation := func() (err error) {
222+
defer func() { count++ }()
223+
queryStart := time.Now()
224+
resp, err = q.client.Values(ctx, connect.NewRequest(&queryv1alpha1.ValuesRequest{
225+
LabelName: label,
226+
Match: nil,
227+
Start: timestamppb.New(rangeStart),
228+
End: timestamppb.New(rangeEnd),
229+
}))
230+
latency := time.Since(queryStart)
231+
if err != nil {
232+
q.metrics.valuesHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
233+
log.Printf("values(label=%s,over=%s): failed to make request %d: %v\n", label, tr, count, err)
234+
return
235+
}
236+
q.metrics.valuesHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
237+
log.Printf("values(label=%s,over=%s): took %v and got %d results\n", label, tr, latency, len(resp.Msg.LabelValues))
229238

230-
exp := backoff.NewExponentialBackOff()
231-
exp.MaxElapsedTime = interval
232-
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
233-
return
239+
return nil
240+
}
241+
242+
exp := backoff.NewExponentialBackOff()
243+
exp.MaxElapsedTime = interval
244+
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
245+
continue
246+
}
234247
}
235248
}
236249

237250
func (q *Querier) queryProfileTypes(ctx context.Context, interval time.Duration) {
238-
var resp *connect.Response[queryv1alpha1.ProfileTypesResponse]
239-
var count int
240-
operation := func() (err error) {
241-
defer func() { count++ }()
251+
for _, tr := range q.queryTimeRanges {
252+
rangeEnd := time.Now()
253+
rangeStart := rangeEnd.Add(-1 * tr)
242254

243-
queryStart := time.Now()
244-
resp, err = q.client.ProfileTypes(ctx, connect.NewRequest(&queryv1alpha1.ProfileTypesRequest{}))
245-
latency := time.Since(queryStart)
246-
if err != nil {
247-
q.metrics.profileTypesHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
248-
log.Println("profile types: failed to make request", count, err)
249-
return err
250-
}
251-
q.metrics.profileTypesHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
252-
log.Printf("profile types: took %v and got %d types\n", latency, len(resp.Msg.Types))
255+
var resp *connect.Response[queryv1alpha1.ProfileTypesResponse]
256+
var count int
257+
operation := func() (err error) {
258+
defer func() { count++ }()
253259

254-
return nil
255-
}
260+
queryStart := time.Now()
261+
resp, err = q.client.ProfileTypes(ctx, connect.NewRequest(&queryv1alpha1.ProfileTypesRequest{
262+
Start: timestamppb.New(rangeStart),
263+
End: timestamppb.New(rangeEnd),
264+
}))
265+
latency := time.Since(queryStart)
266+
if err != nil {
267+
q.metrics.profileTypesHistogram.WithLabelValues(connect.CodeOf(err).String()).Observe(latency.Seconds())
268+
log.Printf("profile types(over=%s): failed to make request %d: %v\n", tr, count, err)
269+
return err
270+
}
271+
q.metrics.profileTypesHistogram.WithLabelValues(grpcCodeOK).Observe(latency.Seconds())
272+
log.Printf("profile types(over=%s): took %v and got %d types\n", tr, latency, len(resp.Msg.Types))
256273

257-
exp := backoff.NewExponentialBackOff()
258-
exp.MaxElapsedTime = interval
259-
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
260-
return
261-
}
274+
return nil
275+
}
262276

263-
if len(resp.Msg.Types) == 0 {
264-
return
265-
}
277+
exp := backoff.NewExponentialBackOff()
278+
exp.MaxElapsedTime = interval
279+
if err := backoff.Retry(operation, backoff.WithContext(exp, ctx)); err != nil {
280+
continue
281+
}
266282

267-
q.profileTypes = q.profileTypes[:0]
268-
for _, pt := range resp.Msg.Types {
269-
key := fmt.Sprintf("%s:%s:%s:%s:%s", pt.Name, pt.SampleType, pt.SampleUnit, pt.PeriodType, pt.PeriodUnit)
270-
if pt.Delta {
271-
key += ":delta"
283+
if len(resp.Msg.Types) == 0 {
284+
continue
285+
}
286+
287+
q.profileTypes = q.profileTypes[:0]
288+
for _, pt := range resp.Msg.Types {
289+
key := fmt.Sprintf("%s:%s:%s:%s:%s", pt.Name, pt.SampleType, pt.SampleUnit, pt.PeriodType, pt.PeriodUnit)
290+
if pt.Delta {
291+
key += ":delta"
292+
}
293+
q.profileTypes = append(q.profileTypes, key)
272294
}
273-
q.profileTypes = append(q.profileTypes, key)
274295
}
275296
}
276297

0 commit comments

Comments
 (0)