Skip to content

Commit

Permalink
use custom header for tracing
Browse files Browse the repository at this point in the history
  • Loading branch information
bellatoris committed Nov 1, 2024
1 parent 3a85072 commit fe88bd0
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 40 deletions.
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ workflows:
requires:
- build_arm64
- build_x64


executors:
arm64:
Expand Down Expand Up @@ -172,4 +172,4 @@ jobs:
- persist_to_workspace:
root: .
paths: release_archive
paths: release_archive
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ namespace OpenTelemetry {

class OpenTelemetryConstantValues {
public:
const Tracing::TraceContextHandler TRACE_PARENT{"traceparent"};
const Tracing::TraceContextHandler TRACE_STATE{"tracestate"};
const Tracing::TraceContextHandler TRACE_PARENT{"x-sendbird-traceparent"};
const Tracing::TraceContextHandler TRACE_STATE{"x-sendbird-tracestate"};
};

using OpenTelemetryConstants = ConstSingleton<OpenTelemetryConstantValues>;
Expand Down
4 changes: 2 additions & 2 deletions source/extensions/tracers/opentelemetry/tracer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ using opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest;
namespace {

const Tracing::TraceContextHandler& traceParentHeader() {
CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "traceparent");
CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "x-sendbird-traceparent");
}

const Tracing::TraceContextHandler& traceStateHeader() {
CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "tracestate");
CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "x-sendbird-tracestate");
}

void callSampler(SamplerSharedPtr sampler, const absl::optional<SpanContext> span_context,
Expand Down
4 changes: 2 additions & 2 deletions test/extensions/tracers/datadog/tracer_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -347,13 +347,13 @@ TEST_F(DatadogTracerTest, EnvoySamplingVersusExtractedSampling) {
if (test_case.extracted_sampling_priority) {
const int priority = *test_case.extracted_sampling_priority;
flags = priority <= 0 ? "00" : "01";
context.context_map_["tracestate"] = "dd=s:" + std::to_string(priority);
context.context_map_["x-sendbird-tracestate"] = "dd=s:" + std::to_string(priority);
} else {
// There's no such thing as the absence of a sampling decision with
// "traceparent," so default to "drop."
flags = "00";
}
context.context_map_["traceparent"] =
context.context_map_["x-sendbird-traceparent"] =
"00-0000000000000000000000000000007b-00000000000001c8-" + flags;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ INSTANTIATE_TEST_SUITE_P(IpVersions, AlwaysOnSamplerIntegrationTest,
TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentAndTracestate) {
Http::TestRequestHeaderMapImpl request_headers{
{":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"},
{":authority", "host"}, {"tracestate", "key=value"}, {"traceparent", TRACEPARENT_VALUE}};
{":authority", "host"}, {"x-sendbird-tracestate", "key=value"}, {"x-sendbird-traceparent", TRACEPARENT_VALUE}};

auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0);

Expand All @@ -71,14 +71,14 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentAndTracestate) {

// traceparent should be set: traceid should be re-used, span id should be different
absl::string_view traceparent_value = upstream_request_->headers()
.get(Http::LowerCaseString("traceparent"))[0]
.get(Http::LowerCaseString("x-sendbird-traceparent"))[0]
->value()
.getStringView();
EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START));
EXPECT_NE(TRACEPARENT_VALUE, traceparent_value);
// tracestate should be forwarded
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
EXPECT_EQ("key=value", tracestate_value);
Expand All @@ -90,7 +90,7 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentOnly) {
{":path", "/test/long/url"},
{":scheme", "http"},
{":authority", "host"},
{"traceparent", TRACEPARENT_VALUE}};
{"x-sendbird-traceparent", TRACEPARENT_VALUE}};
auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0);

ASSERT_TRUE(response->waitForEndStream());
Expand All @@ -99,14 +99,14 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentOnly) {

// traceparent should be set: traceid should be re-used, span id should be different
absl::string_view traceparent_value = upstream_request_->headers()
.get(Http::LowerCaseString("traceparent"))[0]
.get(Http::LowerCaseString("x-sendbird-traceparent"))[0]
->value()
.getStringView();
EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START));
EXPECT_NE(TRACEPARENT_VALUE, traceparent_value);
// OTLP tracer adds an empty tracestate
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
EXPECT_EQ("", tracestate_value);
Expand All @@ -125,11 +125,11 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithoutTraceparentAndTracestate) {

// traceparent will be added, trace_id and span_id will be generated, so there is nothing we can
// assert
EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("traceparent")).size(),
EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("x-sendbird-traceparent")).size(),
1);
// OTLP tracer adds an empty tracestate
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
EXPECT_EQ("", tracestate_value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentAndTracestate) {
// tracestate does not contain a Dynatrace tag
Http::TestRequestHeaderMapImpl request_headers{
{":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"},
{":authority", "host"}, {"tracestate", "key=value"}, {"traceparent", TRACEPARENT_VALUE}};
{":authority", "host"}, {"x-sendbird-tracestate", "key=value"}, {"x-sendbird-traceparent", TRACEPARENT_VALUE}};

auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0);

Expand All @@ -73,14 +73,14 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentAndTracestate) {

// traceparent should be set: traceid should be re-used, span id should be different
absl::string_view traceparent_value = upstream_request_->headers()
.get(Http::LowerCaseString("traceparent"))[0]
.get(Http::LowerCaseString("x-sendbird-traceparent"))[0]
->value()
.getStringView();
EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START));
EXPECT_NE(TRACEPARENT_VALUE, traceparent_value);
// Dynatrace tracestate should be added to existing tracestate
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
// use StartsWith because path-info (last element in trace state) contains a random value
Expand All @@ -96,7 +96,7 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentOnly) {
{":path", "/test/long/url"},
{":scheme", "http"},
{":authority", "host"},
{"traceparent", TRACEPARENT_VALUE}};
{"x-sendbird-traceparent", TRACEPARENT_VALUE}};
auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0);

ASSERT_TRUE(response->waitForEndStream());
Expand All @@ -105,14 +105,14 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentOnly) {

// traceparent should be set: traceid should be re-used, span id should be different
absl::string_view traceparent_value = upstream_request_->headers()
.get(Http::LowerCaseString("traceparent"))[0]
.get(Http::LowerCaseString("x-sendbird-traceparent"))[0]
->value()
.getStringView();
EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START));
EXPECT_NE(TRACEPARENT_VALUE, traceparent_value);
// Dynatrace tag should be added to tracestate
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
// use StartsWith because path-info (last element in trace state contains a random value)
Expand All @@ -133,11 +133,11 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithoutTraceparentAndTracestate) {

// traceparent will be added, trace_id and span_id will be generated, so there is nothing we can
// assert
EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("traceparent")).size(),
EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("x-sendbird-traceparent")).size(),
1);
// Dynatrace tag should be added to tracestate
absl::string_view tracestate_value = upstream_request_->headers()
.get(Http::LowerCaseString("tracestate"))[0]
.get(Http::LowerCaseString("x-sendbird-tracestate"))[0]
->value()
.getStringView();
EXPECT_TRUE(absl::StartsWith(tracestate_value, "5b3f9fed-980df25c@dt=fw4;0;0;0;0;0;0;"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ constexpr absl::string_view trace_flags = "01";

TEST(SpanContextExtractorTest, ExtractSpanContext) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
{"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};

SpanContextExtractor span_context_extractor(request_headers);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand All @@ -38,7 +38,7 @@ TEST(SpanContextExtractorTest, ExtractSpanContext) {
TEST(SpanContextExtractorTest, ExtractSpanContextNotSampled) {
const std::string trace_flags_unsampled{"00"};
Tracing::TestTraceContextImpl request_headers{
{"traceparent",
{"x-sendbird-traceparent",
fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags_unsampled)}};
SpanContextExtractor span_context_extractor(request_headers);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand All @@ -62,7 +62,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithoutHeader) {

TEST(SpanContextExtractorTest, ThrowsExceptionWithTooLongHeader) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("000{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
{"x-sendbird-traceparent", fmt::format("000{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand All @@ -73,7 +73,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithTooLongHeader) {

TEST(SpanContextExtractorTest, ThrowsExceptionWithTooShortHeader) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("{}-{}-{}", trace_id, parent_id, trace_flags)}};
{"x-sendbird-traceparent", fmt::format("{}-{}-{}", trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand All @@ -84,7 +84,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithTooShortHeader) {

TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHyphenation) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("{}{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
{"x-sendbird-traceparent", fmt::format("{}{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand All @@ -97,7 +97,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidSizes) {
const std::string invalid_version{"0"};
const std::string invalid_trace_flags{"001"};
Tracing::TestTraceContextImpl request_headers{
{"traceparent",
{"x-sendbird-traceparent",
fmt::format("{}-{}-{}-{}", invalid_version, trace_id, parent_id, invalid_trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

Expand All @@ -110,7 +110,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidSizes) {
TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHex) {
const std::string invalid_version{"ZZ"};
Tracing::TestTraceContextImpl request_headers{
{"traceparent",
{"x-sendbird-traceparent",
fmt::format("{}-{}-{}-{}", invalid_version, trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

Expand All @@ -123,7 +123,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHex) {
TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroTraceId) {
const std::string invalid_trace_id{"00000000000000000000000000000000"};
Tracing::TestTraceContextImpl request_headers{
{"traceparent",
{"x-sendbird-traceparent",
fmt::format("{}-{}-{}-{}", version, invalid_trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

Expand All @@ -136,7 +136,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroTraceId) {
TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroParentId) {
const std::string invalid_parent_id{"0000000000000000"};
Tracing::TestTraceContextImpl request_headers{
{"traceparent",
{"x-sendbird-traceparent",
fmt::format("{}-{}-{}-{}", version, trace_id, invalid_parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);

Expand All @@ -148,7 +148,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroParentId) {

TEST(SpanContextExtractorTest, ExtractSpanContextWithEmptyTracestate) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
{"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}};
SpanContextExtractor span_context_extractor(request_headers);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();

Expand All @@ -158,8 +158,8 @@ TEST(SpanContextExtractorTest, ExtractSpanContextWithEmptyTracestate) {

TEST(SpanContextExtractorTest, ExtractSpanContextWithTracestate) {
Tracing::TestTraceContextImpl request_headers{
{"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)},
{"tracestate", "sample-tracestate"}};
{"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)},
{"x-sendbird-tracestate", "sample-tracestate"}};
SpanContextExtractor span_context_extractor(request_headers);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();

Expand All @@ -168,7 +168,7 @@ TEST(SpanContextExtractorTest, ExtractSpanContextWithTracestate) {
}

TEST(SpanContextExtractorTest, IgnoreTracestateWithoutTraceparent) {
Tracing::TestTraceContextImpl request_headers{{"tracestate", "sample-tracestate"}};
Tracing::TestTraceContextImpl request_headers{{"x-sendbird-tracestate", "sample-tracestate"}};
SpanContextExtractor span_context_extractor(request_headers);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();

Expand All @@ -178,9 +178,9 @@ TEST(SpanContextExtractorTest, IgnoreTracestateWithoutTraceparent) {

TEST(SpanContextExtractorTest, ExtractSpanContextWithMultipleTracestateEntries) {
Http::TestRequestHeaderMapImpl request_headers{
{"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)},
{"tracestate", "sample-tracestate"},
{"tracestate", "sample-tracestate-2"}};
{"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)},
{"x-sendbird-tracestate", "sample-tracestate"},
{"x-sendbird-tracestate", "sample-tracestate-2"}};
Tracing::HttpTraceContext trace_context(request_headers);
SpanContextExtractor span_context_extractor(trace_context);
absl::StatusOr<SpanContext> span_context = span_context_extractor.extractSpanContext();
Expand Down

0 comments on commit fe88bd0

Please sign in to comment.