// Copyright Epic Games, Inc. All Rights Reserved. #include "otlphttp.h" #include #include #include #include #include #include #include #if ZEN_WITH_OTEL namespace zen::logging { ////////////////////////////////////////////////////////////////////////// OtelHttpProtobufSink::OtelHttpProtobufSink(const std::string_view& Uri) : m_OtelHttp(Uri) { m_Encoder.AddResourceAttribute("service.name", "zenserver"); m_Encoder.AddResourceAttribute("service.instance.id", GetSessionIdString()); m_Encoder.AddResourceAttribute("service.namespace", "zen"); m_Encoder.AddResourceAttribute("service.version", ZEN_CFG_VERSION); m_Encoder.AddResourceAttribute("host.name", GetMachineName()); m_Encoder.AddResourceAttribute("session.id", GetSessionIdString()); m_Encoder.AddResourceAttribute("process.id", zen::GetCurrentProcessId()); m_TraceRecorder = new TraceRecorder(this); otel::SetTraceRecorder(m_TraceRecorder); } OtelHttpProtobufSink::~OtelHttpProtobufSink() { otel::SetTraceRecorder({}); } void OtelHttpProtobufSink::RecordSpans(zen::otel::TraceId Trace, std::span Spans) { std::string Data = m_Encoder.FormatOtelTrace(Trace, Spans); IoBuffer Payload{IoBuffer::Wrap, Data.data(), Data.size()}; Payload.SetContentType(ZenContentType::kProtobuf); auto Result = m_OtelHttp.Post("/v1/traces", Payload); } void OtelHttpProtobufSink::TraceRecorder::RecordSpans(zen::otel::TraceId Trace, std::span Spans) { m_Sink->RecordSpans(Trace, Spans); } void OtelHttpProtobufSink::log(const spdlog::details::log_msg& Msg) { { std::string Data = m_Encoder.FormatOtelProtobuf(Msg); IoBuffer Payload{IoBuffer::Wrap, Data.data(), Data.size()}; Payload.SetContentType(ZenContentType::kProtobuf); auto Result = m_OtelHttp.Post("/v1/logs", Payload); } { std::string Data = m_Encoder.FormatOtelMetrics(); IoBuffer Payload{IoBuffer::Wrap, Data.data(), Data.size()}; Payload.SetContentType(ZenContentType::kProtobuf); auto Result = m_OtelHttp.Post("/v1/metrics", Payload); } } void OtelHttpProtobufSink::flush() { } } // namespace zen::logging #endif