Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::opentelemetry_tracer_adapter Class Reference

Adapter for converting monitoring system traces to OpenTelemetry format. More...

#include <opentelemetry_adapter.h>

Collaboration diagram for kcenon::monitoring::opentelemetry_tracer_adapter:
Collaboration graph

Public Member Functions

 opentelemetry_tracer_adapter (const otel_resource &resource)
 
common::Result< otel_span_dataconvert_span (const trace_span &span)
 Convert internal span to OpenTelemetry span data.
 
common::Result< std::vector< otel_span_data > > convert_spans (const std::vector< trace_span > &spans)
 Convert multiple spans to OpenTelemetry format.
 
common::Result< otel_span_contextcreate_context (const trace_context &context)
 Create OpenTelemetry context from internal trace context.
 

Private Member Functions

otel_span_kind parse_span_kind (const std::string &kind_str)
 

Private Attributes

otel_resource resource_
 

Detailed Description

Adapter for converting monitoring system traces to OpenTelemetry format.

Definition at line 185 of file opentelemetry_adapter.h.

Constructor & Destructor Documentation

◆ opentelemetry_tracer_adapter()

kcenon::monitoring::opentelemetry_tracer_adapter::opentelemetry_tracer_adapter ( const otel_resource & resource)
inlineexplicit

Definition at line 187 of file opentelemetry_adapter.h.

Member Function Documentation

◆ convert_span()

common::Result< otel_span_data > kcenon::monitoring::opentelemetry_tracer_adapter::convert_span ( const trace_span & span)
inline

Convert internal span to OpenTelemetry span data.

Definition at line 193 of file opentelemetry_adapter.h.

193 {
194 otel_span_data otel_span;
195
196 // Convert basic span information
197 otel_span.name = span.operation_name;
198 otel_span.context = otel_span_context(span.trace_id, span.span_id);
199
200 if (!span.parent_span_id.empty()) {
201 otel_span.parent_context = otel_span_context(span.trace_id, span.parent_span_id);
202 }
203
204 otel_span.start_time = span.start_time;
205 otel_span.end_time = span.end_time;
206 otel_span.resource = resource_;
207
208 // First determine span kind from tags
209 auto kind_it = span.tags.find("span.kind");
210 if (kind_it != span.tags.end()) {
211 otel_span.kind = parse_span_kind(kind_it->second);
212 }
213
214 // Set status from tags
215 auto error_it = span.tags.find("error");
216 if (error_it != span.tags.end() && error_it->second == "true") {
217 otel_span.status_code = otel_status_code::error;
218 auto error_msg_it = span.tags.find("error.message");
219 if (error_msg_it != span.tags.end()) {
220 otel_span.status_message = error_msg_it->second;
221 }
222 } else {
223 otel_span.status_code = otel_status_code::ok;
224 }
225
226 // Convert tags to attributes, excluding special OpenTelemetry fields
227 for (const auto& [key, value] : span.tags) {
228 // Skip special fields that are handled above
229 if (key != "span.kind" && key != "error" && key != "error.message") {
230 otel_span.add_attribute(key, value);
231 }
232 }
233
234 return common::Result<otel_span_data>::ok(std::move(otel_span));
235 }
otel_span_kind parse_span_kind(const std::string &kind_str)

References kcenon::monitoring::otel_span_data::add_attribute(), kcenon::monitoring::otel_span_data::context, kcenon::monitoring::otel_span_data::end_time, kcenon::monitoring::trace_span::end_time, kcenon::monitoring::error, kcenon::monitoring::otel_span_data::kind, kcenon::monitoring::otel_span_data::name, kcenon::monitoring::ok, kcenon::monitoring::trace_span::operation_name, kcenon::monitoring::otel_span_data::parent_context, kcenon::monitoring::trace_span::parent_span_id, parse_span_kind(), kcenon::monitoring::otel_span_data::resource, resource_, kcenon::monitoring::trace_span::span_id, kcenon::monitoring::otel_span_data::start_time, kcenon::monitoring::trace_span::start_time, kcenon::monitoring::otel_span_data::status_code, kcenon::monitoring::otel_span_data::status_message, kcenon::monitoring::trace_span::tags, and kcenon::monitoring::trace_span::trace_id.

Referenced by convert_spans(), TEST_F(), and TEST_F().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ convert_spans()

common::Result< std::vector< otel_span_data > > kcenon::monitoring::opentelemetry_tracer_adapter::convert_spans ( const std::vector< trace_span > & spans)
inline

Convert multiple spans to OpenTelemetry format.

Definition at line 240 of file opentelemetry_adapter.h.

240 {
241 std::vector<otel_span_data> otel_spans;
242 otel_spans.reserve(spans.size());
243
244 for (const auto& span : spans) {
245 auto convert_result = convert_span(span);
246 if (convert_result.is_err()) {
247 return common::Result<std::vector<otel_span_data>>::err(error_info(monitoring_error_code::processing_failed,
248 "Failed to convert span: " + convert_result.error().message).to_common_error());
249 }
250 otel_spans.push_back(convert_result.value());
251 }
252
253 return common::Result<std::vector<otel_span_data>>::ok(std::move(otel_spans));
254 }
common::Result< otel_span_data > convert_span(const trace_span &span)
Convert internal span to OpenTelemetry span data.

References convert_span(), kcenon::monitoring::ok, kcenon::monitoring::processing_failed, and kcenon::monitoring::error_info::to_common_error().

Referenced by kcenon::monitoring::opentelemetry_compatibility_layer::export_spans(), and TEST_F().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_context()

common::Result< otel_span_context > kcenon::monitoring::opentelemetry_tracer_adapter::create_context ( const trace_context & context)
inline

Create OpenTelemetry context from internal trace context.

Definition at line 259 of file opentelemetry_adapter.h.

259 {
260 return common::Result<otel_span_context>::ok(otel_span_context(context.trace_id, context.span_id));
261 }

References kcenon::monitoring::trace_context::span_id, and kcenon::monitoring::trace_context::trace_id.

◆ parse_span_kind()

otel_span_kind kcenon::monitoring::opentelemetry_tracer_adapter::parse_span_kind ( const std::string & kind_str)
inlineprivate

Definition at line 264 of file opentelemetry_adapter.h.

264 {
265 if (kind_str == "server") return otel_span_kind::server;
266 if (kind_str == "client") return otel_span_kind::client;
267 if (kind_str == "producer") return otel_span_kind::producer;
268 if (kind_str == "consumer") return otel_span_kind::consumer;
269 if (kind_str == "internal") return otel_span_kind::internal;
271 }

References kcenon::monitoring::client, kcenon::monitoring::consumer, kcenon::monitoring::internal, kcenon::monitoring::producer, kcenon::monitoring::server, and kcenon::monitoring::unspecified.

Referenced by convert_span().

Here is the caller graph for this function:

Member Data Documentation

◆ resource_

otel_resource kcenon::monitoring::opentelemetry_tracer_adapter::resource_
private

Definition at line 273 of file opentelemetry_adapter.h.

Referenced by convert_span().


The documentation for this class was generated from the following file: