Packages
electric
1.0.3
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/telemetry/sampler.ex
use Electric.Telemetry
with_telemetry :otel_sampler do
defmodule Electric.Telemetry.Sampler do
@moduledoc """
Custom sampler that samples all spans except for specifically configured
spans for which a given ratio is sampled.
"""
require OpenTelemetry.Tracer, as: Tracer
@behaviour :otel_sampler
# Span names that are sampled probabilistically
@probabilistic_span_names [
"pg_txn.replication_client.process_x_log_data"
]
@impl :otel_sampler
def setup(%{ratio: ratio}) do
%{sampling_probability: ratio}
end
@impl :otel_sampler
def description(%{sampling_probability: sampling_probability}) do
"Custom sampler that samples all spans except for specifically configured spans for which #{sampling_probability * 100}% are sampled."
end
@impl true
def should_sample(ctx, _, _, span_name, _, _, state)
when span_name in @probabilistic_span_names do
if :rand.uniform() <= state.sampling_probability do
{:record_and_sample, [], tracestate(ctx)}
else
{:drop, [], tracestate(ctx)}
end
end
@impl true
def should_sample(ctx, _trace_id, _links, _span_name, _span_kind, _attributes, _) do
{:record_and_sample, [], tracestate(ctx)}
end
defp tracestate(ctx) do
ctx
|> Tracer.current_span_ctx()
|> OpenTelemetry.Span.tracestate()
end
end
end