diff --git a/sdk/src/trace/span.cc b/sdk/src/trace/span.cc index 0f661d8ef6..76418af1dd 100644 --- a/sdk/src/trace/span.cc +++ b/sdk/src/trace/span.cc @@ -118,22 +118,34 @@ void Span::SetAttribute(nostd::string_view key, void Span::AddEvent(nostd::string_view name) noexcept { - (void)name; + std::lock_guard lock_guard{mu_}; + if (recordable_ == nullptr) + { + return; + } + recordable_->AddEvent(name); } void Span::AddEvent(nostd::string_view name, core::SystemTimestamp timestamp) noexcept { - (void)name; - (void)timestamp; + std::lock_guard lock_guard{mu_}; + if (recordable_ == nullptr) + { + return; + } + recordable_->AddEvent(name, timestamp); } void Span::AddEvent(nostd::string_view name, core::SystemTimestamp timestamp, const trace_api::KeyValueIterable &attributes) noexcept { - (void)name; - (void)timestamp; - (void)attributes; + std::lock_guard lock_guard{mu_}; + if (recordable_ == nullptr) + { + return; + } + recordable_->AddEvent(name, timestamp, attributes); } void Span::SetStatus(trace_api::CanonicalCode code, nostd::string_view description) noexcept diff --git a/sdk/test/trace/tracer_test.cc b/sdk/test/trace/tracer_test.cc index a40274edf0..98a18ea688 100644 --- a/sdk/test/trace/tracer_test.cc +++ b/sdk/test/trace/tracer_test.cc @@ -306,6 +306,31 @@ TEST(Tracer, SpanSetAttribute) ASSERT_EQ(3.1, nostd::get(cur_span_data->GetAttributes().at("abc"))); } +TEST(Tracer, SpanSetEvents) +{ + std::unique_ptr exporter(new InMemorySpanExporter()); + std::shared_ptr span_data = exporter->GetData(); + auto tracer = initTracer(std::move(exporter)); + + auto span = tracer->StartSpan("span 1"); + span->AddEvent("event 1"); + span->AddEvent("event 2", std::chrono::system_clock::now()); + span->AddEvent("event 3", std::chrono::system_clock::now(), {{"attr1", 1}}); + span->End(); + + auto spans = span_data->GetSpans(); + ASSERT_EQ(1, spans.size()); + + auto &span_data_events = spans.at(0)->GetEvents(); + ASSERT_EQ(3, span_data_events.size()); + ASSERT_EQ("event 1", span_data_events[0].GetName()); + ASSERT_EQ("event 2", span_data_events[1].GetName()); + ASSERT_EQ("event 3", span_data_events[2].GetName()); + ASSERT_EQ(0, span_data_events[0].GetAttributes().size()); + ASSERT_EQ(0, span_data_events[1].GetAttributes().size()); + ASSERT_EQ(1, span_data_events[2].GetAttributes().size()); +} + TEST(Tracer, TestAlwaysOnSampler) { std::unique_ptr exporter(new InMemorySpanExporter());