1
- package io .prometheus .client .exemplars . impl ;
1
+ package io .prometheus .client .exemplars ;
2
2
3
- import io .prometheus .client .exemplars .api . Exemplar ;
4
- import io .prometheus .client .exemplars .api . ExemplarSampler ;
5
- import io .prometheus .client .exemplars .api . Value ;
6
- import io .prometheus .client .exemplars .tracer .common .SpanContext ;
3
+ import io .prometheus .client .exemplars .Exemplar ;
4
+ import io .prometheus .client .exemplars .ExemplarSampler ;
5
+ import io .prometheus .client .exemplars .Value ;
6
+ import io .prometheus .client .exemplars .tracer .common .SpanContextSupplier ;
7
7
8
- import static io .prometheus .client .exemplars .api . Exemplar .SPAN_ID ;
9
- import static io .prometheus .client .exemplars .api . Exemplar .TRACE_ID ;
8
+ import static io .prometheus .client .exemplars .Exemplar .SPAN_ID ;
9
+ import static io .prometheus .client .exemplars .Exemplar .TRACE_ID ;
10
10
11
11
/**
12
12
* Default Exemplar sampler.
15
15
*/
16
16
public class DefaultExemplarSampler implements ExemplarSampler {
17
17
18
- private final SpanContext spanContext ;
18
+ private final SpanContextSupplier spanContextSupplier ;
19
19
// Choosing a prime number for the retention interval makes behavior more predictable,
20
20
// because it is unlikely that retention happens at the exact same time as a Prometheus scrape.
21
21
private final long minRetentionIntervalMs = 7109 ;
22
22
private final Clock clock ;
23
23
24
- public DefaultExemplarSampler (SpanContext spanContext ) {
25
- this .spanContext = spanContext ;
24
+ public DefaultExemplarSampler (SpanContextSupplier spanContextSupplier ) {
25
+ this .spanContextSupplier = spanContextSupplier ;
26
26
this .clock = new SystemClock ();
27
27
}
28
28
29
29
// for unit tests only
30
- DefaultExemplarSampler (SpanContext spanContext , Clock clock ) {
31
- this .spanContext = spanContext ;
30
+ DefaultExemplarSampler (SpanContextSupplier spanContextSupplier , Clock clock ) {
31
+ this .spanContextSupplier = spanContextSupplier ;
32
32
this .clock = clock ;
33
33
}
34
34
@@ -44,9 +44,10 @@ public Exemplar sample(double value, double bucketFrom, double bucketTo, Exempla
44
44
45
45
private Exemplar doSample (double value , Exemplar previous ) {
46
46
long timestampMs = clock .currentTimeMillis ();
47
- if (previous == null || timestampMs - previous .getTimestampMs () > minRetentionIntervalMs ) {
48
- String traceId = spanContext .getTraceId ();
49
- String spanId = spanContext .getSpanId ();
47
+ if (previous == null || previous .getTimestampMs () == null
48
+ || timestampMs - previous .getTimestampMs () > minRetentionIntervalMs ) {
49
+ String traceId = spanContextSupplier .getTraceId ();
50
+ String spanId = spanContextSupplier .getSpanId ();
50
51
if (traceId != null && spanId != null ) {
51
52
return new Exemplar (value , timestampMs , TRACE_ID , traceId , SPAN_ID , spanId );
52
53
}
0 commit comments