Skip to content

Commit

Permalink
Moved events from tacing
Browse files Browse the repository at this point in the history
  • Loading branch information
nepridumalnik committed Jan 20, 2025
1 parent 189bcae commit 2969d32
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 62 deletions.
55 changes: 55 additions & 0 deletions core/src/tracing/span.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,56 @@ std::string GenerateSpanId() {
return utils::encoding::ToHex(&random_value, 8);
}

struct EventAttributeWriteVisitor {
explicit EventAttributeWriteVisitor(formats::json::StringBuilder& builder) : builder{builder} {}

template <typename T>
void operator()(const T& value) {
if constexpr (std::is_same_v<T, std::string>) {
builder.WriteString(value);
} else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T>) {
builder.WriteUInt64(value);
} else if constexpr (std::is_integral_v<T>) {
builder.WriteInt64(value);
} else if constexpr (std::is_floating_point_v<T>) {
builder.WriteDouble(value);
}
}

formats::json::StringBuilder& builder;
};

void HandleEventAttributes(const Span::Event& events, formats::json::StringBuilder& builder) {
builder.Key("attributes");
const formats::json::StringBuilder::ObjectGuard attributes_guard(builder);

for (const auto& [key, value] : events.attributes) {
builder.Key(key);
EventAttributeWriteVisitor write_visitor(builder);
std::visit(write_visitor, value);
}
}

std::string MakeTagFromEvents(const std::vector<Span::Event>& events) {
formats::json::StringBuilder builder;
{
const formats::json::StringBuilder::ArrayGuard array_guard(builder);

for (const auto& event : events) {
const formats::json::StringBuilder::ObjectGuard guard(builder);

builder.Key("name");
builder.WriteString(event.name);
builder.Key("time_unix_nano");
builder.WriteUInt64(event.time_unix_nano);

HandleEventAttributes(event, builder);
}
}

return builder.GetString();
}

} // namespace

Span::Impl::Impl(
Expand Down Expand Up @@ -149,6 +199,11 @@ void Span::Impl::PutIntoLogger(logging::impl::TagWriter writer) && {
}
writer.PutLogExtra(log_extra_inheritable_);

if (!events_.empty()) {
const auto events_tag = MakeTagFromEvents(events_);
writer.PutTag("events", events_tag);
}

LogOpenTracing();
}

Expand Down
56 changes: 0 additions & 56 deletions core/src/tracing/span_opentracing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,6 @@ struct LogExtraValueVisitor {
void operator()(int val) { string_value = std::to_string(val); }
};

struct EventAttributeWriteVisitor {
explicit EventAttributeWriteVisitor(formats::json::StringBuilder& builder) : builder{builder} {}

template <typename T>
void operator()(const T& value) {
if constexpr (std::is_same_v<T, std::string>) {
builder.WriteString(value);
} else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T>) {
builder.WriteUInt64(value);
} else if constexpr (std::is_integral_v<T>) {
builder.WriteInt64(value);
} else if constexpr (std::is_floating_point_v<T>) {
builder.WriteDouble(value);
}
}

formats::json::StringBuilder& builder;
};

void GetTagObject(
formats::json::StringBuilder& builder,
std::string_view key,
Expand All @@ -87,37 +68,6 @@ void GetTagObject(
builder.WriteString(key);
}

void HandleEventAttributes(const Span::Event& events, formats::json::StringBuilder& builder) {
builder.Key("attributes");
const formats::json::StringBuilder::ObjectGuard attributes_guard(builder);

for (const auto& [key, value] : events.attributes) {
builder.Key(key);
EventAttributeWriteVisitor write_visitor(builder);
std::visit(write_visitor, value);
}
}

std::string MakeTagFromEvents(const std::vector<Span::Event>& events) {
formats::json::StringBuilder builder;
{
const formats::json::StringBuilder::ArrayGuard array_guard(builder);

for (const auto& event : events) {
const formats::json::StringBuilder::ObjectGuard guard(builder);

builder.Key("name");
builder.WriteString(event.name);
builder.Key("time_unix_nano");
builder.WriteUInt64(event.time_unix_nano);

HandleEventAttributes(event, builder);
}
}

return builder.GetString();
}

constexpr std::string_view kOperationName = "operation_name";
constexpr std::string_view kTraceId = "trace_id";
constexpr std::string_view kParentId = "parent_id";
Expand All @@ -129,7 +79,6 @@ constexpr std::string_view kStartTimeMillis = "start_time_millis";
constexpr std::string_view kDuration = "duration";

constexpr std::string_view kTags = "tags";
constexpr std::string_view kEvents = "events";

} // namespace jaeger

Expand Down Expand Up @@ -175,11 +124,6 @@ void Span::Impl::DoLogOpenTracing(logging::impl::TagWriter writer) const {
}
}
writer.PutTag(jaeger::kTags, tags.GetStringView());

if (!events_.empty()) {
const auto events_tag = jaeger::MakeTagFromEvents(events_);
writer.PutTag(jaeger::kEvents, events_tag);
}
}

void Span::Impl::AddOpentracingTags(formats::json::StringBuilder& output, const logging::LogExtra& input) {
Expand Down
12 changes: 6 additions & 6 deletions core/src/tracing/span_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -699,21 +699,21 @@ UTEST_F(Span, MakeSpanWithParentIdTraceIdLinkWithExisting) {
}
}

UTEST_F(OpentracingSpan, MakeSpanEvent) {
UTEST_F(Span, MakeSpanEvent) {
{
tracing::Span root_span("root_span");
root_span.AddEvent("important_event");
}

FlushOpentracing();
logging::LogFlush();

const auto logs_raw = GetOtStreamString();
const auto logs_raw = GetStreamString();

EXPECT_THAT(logs_raw, HasSubstr("events=[{\"name\":\"important_event\""));
EXPECT_THAT(logs_raw, HasSubstr("root_span"));
}

UTEST_F(OpentracingSpan, MakeSpanEventWithAttributes) {
UTEST_F(Span, MakeSpanEventWithAttributes) {
{
tracing::Span root_span("root_span");
root_span.AddEvent({"important_event_0", {{"int", 42}}});
Expand All @@ -728,9 +728,9 @@ UTEST_F(OpentracingSpan, MakeSpanEventWithAttributes) {
);
}

FlushOpentracing();
logging::LogFlush();

const auto logs_raw = GetOtStreamString();
const auto logs_raw = GetStreamString();

EXPECT_THAT(logs_raw, HasSubstr("events=[{\"name\":\"important_event_0\",\"time_unix_nano\""));
EXPECT_THAT(logs_raw, HasSubstr("{\"name\":\"important_event_1\",\"time_unix_nano\""));
Expand Down

0 comments on commit 2969d32

Please sign in to comment.