Skip to content

Commit e616c21

Browse files
committed
Reuse sampling decision logic
1 parent bf32449 commit e616c21

File tree

1 file changed

+11
-27
lines changed

1 file changed

+11
-27
lines changed

lib/sentry/opentelemetry/sampler.ex

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ if Code.ensure_loaded?(:otel_sampler) do
5151
sampling_context =
5252
build_sampling_context(nil, span_name, span_kind, attributes, trace_id)
5353

54-
make_sampler_decision(traces_sampler, sampling_context, [])
54+
make_sampler_decision(traces_sampler, sampling_context)
5555
else
5656
make_sampling_decision(traces_sample_rate)
5757
end
@@ -147,41 +147,25 @@ if Code.ensure_loaded?(:otel_sampler) do
147147
sampling_context
148148
end
149149

150-
defp make_sampler_decision(traces_sampler, sampling_context, _existing_tracestate) do
150+
defp make_sampler_decision(traces_sampler, sampling_context) do
151151
try do
152152
result = call_traces_sampler(traces_sampler, sampling_context)
153153
sample_rate = normalize_sampler_result(result)
154154

155-
cond do
156-
sample_rate == 0.0 ->
157-
tracestate = build_tracestate(0.0, 1.0, false)
158-
159-
{:drop, [], tracestate}
160-
161-
sample_rate == 1.0 ->
162-
tracestate = build_tracestate(1.0, 0.0, true)
163-
164-
{:record_and_sample, [], tracestate}
165-
166-
is_float(sample_rate) and sample_rate > 0.0 and sample_rate < 1.0 ->
167-
random_value = :rand.uniform()
168-
sampled = random_value < sample_rate
169-
tracestate = build_tracestate(sample_rate, random_value, sampled)
170-
decision = if sampled, do: :record_and_sample, else: :drop
171-
172-
{decision, [], tracestate}
173-
174-
true ->
175-
tracestate = build_tracestate(0.0, 1.0, false)
155+
if is_float(sample_rate) and sample_rate >= 0.0 and sample_rate <= 1.0 do
156+
make_sampling_decision(sample_rate)
157+
else
158+
Logger.warning(
159+
"traces_sampler function returned an invalid sample rate: #{inspect(sample_rate)}"
160+
)
176161

177-
{:drop, [], tracestate}
162+
make_sampling_decision(0.0)
178163
end
179164
rescue
180165
error ->
181166
Logger.warning("traces_sampler function failed: #{inspect(error)}")
182167

183-
tracestate = build_tracestate(0.0, 1.0, false)
184-
{:drop, [], tracestate}
168+
make_sampling_decision(0.0)
185169
end
186170
end
187171

@@ -195,7 +179,7 @@ if Code.ensure_loaded?(:otel_sampler) do
195179

196180
defp normalize_sampler_result(true), do: 1.0
197181
defp normalize_sampler_result(false), do: 0.0
198-
defp normalize_sampler_result(rate) when is_float(rate), do: rate
182+
defp normalize_sampler_result(rate), do: rate
199183

200184
defp record_discarded_transaction() do
201185
ClientReport.Sender.record_discarded_events(:sample_rate, "transaction")

0 commit comments

Comments
 (0)