Skip to content

Commit

Permalink
feat: use traceparent header from incoming shape requests to set pare…
Browse files Browse the repository at this point in the history
…nt span (#2000)

Fix #1914

- open-telemetry/opentelemetry-erlang#518

---------

Co-authored-by: Ilia Borovitinov <[email protected]>
  • Loading branch information
KyleAMathews and icehaunter authored Nov 21, 2024
1 parent 68540c8 commit 584c4f5
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/odd-walls-walk.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@core/sync-service": patch
---

use traceparent header from incoming shape requests to set parent span
1 change: 1 addition & 0 deletions packages/sync-service/lib/electric/plug/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ defmodule Electric.Plug.Router do
plug Plug.Head
plug :match
plug Electric.Plug.LabelProcessPlug
plug Electric.Plug.TraceContextPlug
plug Plug.Telemetry, event_prefix: [:electric, :routing]
plug Plug.Logger
plug :put_cors_headers
Expand Down
28 changes: 28 additions & 0 deletions packages/sync-service/lib/electric/plug/trace_context_plug.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
defmodule Electric.Plug.TraceContextPlug do
@moduledoc """
A plug that extracts trace context from incoming HTTP headers and sets it as the parent span.
"""
@behaviour Plug

require Logger

def init(opts), do: opts

def call(%Plug.Conn{req_headers: headers} = conn, _opts) do
# Extract function expects a list of headers as tuples and knows
# the expected header keys, so we don't have to prefilter.
ctx = :otel_propagator_text_map.extract_to(:otel_ctx.new(), headers)

# Get the span context from the extracted context
case :otel_tracer.current_span_ctx(ctx) do
:undefined ->
# No parent, continue as-is
conn

span_ctx ->
# Parent found, set as current span
:otel_tracer.set_current_span(span_ctx)
conn
end
end
end

0 comments on commit 584c4f5

Please sign in to comment.