Line data Source code
1 : // Copyright The OpenTelemetry Authors
2 : // SPDX-License-Identifier: Apache-2.0
3 :
4 : import 'package:dartastic_opentelemetry_api/dartastic_opentelemetry_api.dart';
5 :
6 : /// An ExemplarFilter evaluates a measurement to determine if an Exemplar should
7 : /// be sampled.
8 : abstract class ExemplarFilter {
9 : /// Evaluates whether an exemplar should be sampled for the given measurement.
10 : ///
11 : /// @param value The value of the measurement.
12 : /// @param attributes The attributes associated with the measurement.
13 : /// @param context The Context associated with the measurement.
14 : /// @return true if the measurement should be sampled as an exemplar, false otherwise.
15 : bool shouldSample(num value, Attributes attributes, Context context);
16 : }
17 :
18 : /// An ExemplarFilter which samples all measurements.
19 : class AlwaysOnExemplarFilter implements ExemplarFilter {
20 172 : const AlwaysOnExemplarFilter();
21 :
22 0 : @override
23 : bool shouldSample(num value, Attributes attributes, Context context) {
24 : return true;
25 : }
26 : }
27 :
28 : /// An ExemplarFilter which samples no measurements.
29 : class AlwaysOffExemplarFilter implements ExemplarFilter {
30 172 : const AlwaysOffExemplarFilter();
31 :
32 1 : @override
33 : bool shouldSample(num value, Attributes attributes, Context context) {
34 : return false;
35 : }
36 : }
37 :
38 : /// An ExemplarFilter which makes its sampling decisions based on the trace context.
39 : ///
40 : /// It only samples measurements if the context contains a sampled trace.
41 : class TraceBasedExemplarFilter implements ExemplarFilter {
42 172 : const TraceBasedExemplarFilter();
43 :
44 32 : @override
45 : bool shouldSample(num value, Attributes attributes, Context context) {
46 32 : final spanContext = context.spanContext;
47 : return spanContext != null &&
48 2 : spanContext.isValid &&
49 4 : spanContext.traceFlags.isSampled;
50 : }
51 : }
|