View Source Datadog.DataStreams.Propagator (Data Streams Ex v1.2.2)
Handles propagating Datadog.DataStreams.Pathway
via encoding and adding
to message headers.
Summary
Functions
Tries to decode a value into a pathway.
Decodes a pathway from a list or map of headers. If no matching header, or
if the header is invalid, nil
is returned.
Tries to decode a Base64 encoded value into a pathway.
Decodes a pathway binary time from zigzag encoding.
Encodes a pathway to a string able to be placed in a header.
Encodes a pathway into a list or map of headers.
Encodes a pathway to a string able to be placed in a header.
Encodes a pathway time using zigzag encoding.
Returns the well known header key for propagating encoded pathway data.
Returns the well known base64 encoded header key for propagating encoded pathway data.
Functions
@spec decode(binary()) :: Datadog.DataStreams.Pathway.t() | nil
Tries to decode a value into a pathway.
Examples
# Verified from golang implementation
iex> Propagator.decode(<<174, 208, 17, 141, 62, 199, 215, 238, 224, 159, 240, 170, 211, 97, 224, 159, 240, 170, 211, 97>>)
%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000}
iex> Propagator.decode("invalid")
nil
@spec decode_header([{binary(), binary()}] | %{required(binary()) => binary()} | nil) :: Datadog.DataStreams.Pathway.t() | nil
Decodes a pathway from a list or map of headers. If no matching header, or
if the header is invalid, nil
is returned.
Examples
iex> Propagator.decode_header([{"dd-pathway-ctx-base64", "rtARjT7H1+7gn/Cq02Hgn/Cq02E="}])
%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000}
iex> Propagator.decode_header(%{"dd-pathway-ctx" => <<174, 208, 17, 141, 62, 199, 215, 238, 224, 159, 240, 170, 211, 97, 224, 159, 240, 170, 211, 97>>})
%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000}
iex> Propagator.decode_header(%{"content-type" => "application-json"})
nil
@spec decode_str(String.t()) :: Datadog.DataStreams.Pathway.t() | nil
Tries to decode a Base64 encoded value into a pathway.
Examples
# Verified from golang implementation
iex> Propagator.decode_str("rtARjT7H1+7gn/Cq02Hgn/Cq02E=")
%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000}
iex> Propagator.decode_str("invalid")
nil
@spec decode_time(binary()) :: non_neg_integer() | nil
Decodes a pathway binary time from zigzag encoding.
Examples
# Verified from golang implementation
iex> Propagator.decode_time(<<224, 159, 240, 170, 211, 97>>)
1677632342000000000
iex> Propagator.decode_time(<<1, 2, 3, 4>>)
nil
@spec encode(Datadog.DataStreams.Pathway.t()) :: binary()
Encodes a pathway to a string able to be placed in a header.
Examples
# Verified from golang implementation
iex> Propagator.encode(%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000})
<<174, 208, 17, 141, 62, 199, 215, 238, 224, 159, 240, 170, 211, 97, 224, 159, 240, 170, 211, 97>>
# Verified from golang implementation
iex> Propagator.encode(%Pathway{hash: 2003974475228685984, pathway_start: 1677628446000000000, edge_start: 1677628446000000000})
<<160, 166, 244, 238, 42, 140, 207, 27, 224, 212, 148, 167, 211, 97, 224, 212, 148, 167, 211, 97>>
@spec encode_header(headers, Datadog.DataStreams.Pathway.t()) :: headers when headers: [{binary(), binary()}] | %{required(binary()) => binary()} | nil
Encodes a pathway into a list or map of headers.
Examples
iex> Propagator.encode_header([], %Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000})
[{"dd-pathway-ctx", <<174, 208, 17, 141, 62, 199, 215, 238, 224, 159, 240, 170, 211, 97, 224, 159, 240, 170, 211, 97>>}]
iex> Propagator.encode_header(%{}, %Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000})
%{"dd-pathway-ctx" => <<174, 208, 17, 141, 62, 199, 215, 238, 224, 159, 240, 170, 211, 97, 224, 159, 240, 170, 211, 97>>}
@spec encode_str(Datadog.DataStreams.Pathway.t()) :: String.t()
Encodes a pathway to a string able to be placed in a header.
Examples
# Verified from golang implementation
iex> Propagator.encode_str(%Pathway{hash: 17210443572488294574, pathway_start: 1677632342000000000, edge_start: 1677632342000000000})
"rtARjT7H1+7gn/Cq02Hgn/Cq02E="
# Verified from golang implementation
iex> Propagator.encode_str(%Pathway{hash: 2003974475228685984, pathway_start: 1677628446000000000, edge_start: 1677628446000000000})
"oKb07iqMzxvg1JSn02Hg1JSn02E="
@spec encode_time(non_neg_integer()) :: binary()
Encodes a pathway time using zigzag encoding.
Examples
# Verified from golang implementation
iex> Propagator.encode_time(1677632342000000000)
<<224, 159, 240, 170, 211, 97>>
@spec propagation_key() :: String.t()
Returns the well known header key for propagating encoded pathway data.
Examples
iex> Propagator.propagation_key()
"dd-pathway-ctx"
@spec propagation_key_base64() :: String.t()
Returns the well known base64 encoded header key for propagating encoded pathway data.
Examples
iex> Propagator.propagation_key_base64()
"dd-pathway-ctx-base64"