Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
span.h File Reference

RAII span implementation for distributed tracing. More...

#include "trace_context.h"
#include <chrono>
#include <map>
#include <memory>
#include <string>
#include <string_view>
#include <variant>
#include <vector>
Include dependency graph for span.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  kcenon::network::tracing::span_event
 Span event (timestamped annotation) More...
 
class  kcenon::network::tracing::span
 RAII span for distributed tracing. More...
 

Namespaces

namespace  kcenon
 
namespace  kcenon::network
 Main namespace for all Network System components.
 
namespace  kcenon::network::tracing
 

Macros

#define NETWORK_TRACE_SPAN(name)
 RAII helper macro for creating spans.
 
#define NETWORK_TRACE_CLIENT_SPAN(name)
 RAII helper macro for creating client spans.
 
#define NETWORK_TRACE_SERVER_SPAN(name)
 RAII helper macro for creating server spans.
 

Typedefs

using kcenon::network::tracing::attribute_value = std::variant<std::string, int64_t, double, bool>
 Attribute value type (supports string, int64, double, bool)
 

Enumerations

enum class  kcenon::network::tracing::span_status { kcenon::network::tracing::unset = 0 , kcenon::network::tracing::ok = 1 , kcenon::network::tracing::error = 2 }
 Span status codes following OpenTelemetry conventions. More...
 
enum class  kcenon::network::tracing::span_kind {
  kcenon::network::tracing::internal = 0 , kcenon::network::tracing::server = 1 , kcenon::network::tracing::client = 2 , kcenon::network::tracing::producer = 3 ,
  kcenon::network::tracing::consumer = 4
}
 Span kind following OpenTelemetry conventions. More...
 

Detailed Description

RAII span implementation for distributed tracing.

Provides a span class that automatically manages its lifecycle and integrates with the trace context for distributed tracing.

Author
kcenon
Date
2025-01-15

Definition in file span.h.

Macro Definition Documentation

◆ NETWORK_TRACE_CLIENT_SPAN

#define NETWORK_TRACE_CLIENT_SPAN ( name)
Value:
.create_child_span(name) \
.context() \
RAII span for distributed tracing.
Definition span.h:103
Immutable trace context for distributed tracing.
static auto current() -> trace_context
Get the current trace context from thread-local storage.

RAII helper macro for creating client spans.

Definition at line 311 of file span.h.

311#define NETWORK_TRACE_CLIENT_SPAN(name) \
312 auto _span = ::kcenon::network::tracing::span( \
313 name, ::kcenon::network::tracing::trace_context::current().is_valid() \
314 ? ::kcenon::network::tracing::trace_context::current() \
315 .create_child_span(name) \
316 .context() \
317 : ::kcenon::network::tracing::trace_context(), \
318 ::kcenon::network::tracing::span_kind::client)

◆ NETWORK_TRACE_SERVER_SPAN

#define NETWORK_TRACE_SERVER_SPAN ( name)
Value:

RAII helper macro for creating server spans.

Definition at line 323 of file span.h.

323#define NETWORK_TRACE_SERVER_SPAN(name) \
324 auto _span = ::kcenon::network::tracing::span( \
325 name, ::kcenon::network::tracing::trace_context::current().is_valid() \
326 ? ::kcenon::network::tracing::trace_context::current() \
327 .create_child_span(name) \
328 .context() \
329 : ::kcenon::network::tracing::trace_context(), \
330 ::kcenon::network::tracing::span_kind::server)

◆ NETWORK_TRACE_SPAN

#define NETWORK_TRACE_SPAN ( name)
Value:
static auto create_span(std::string_view name) -> span
Create a new root span with a new trace context.

RAII helper macro for creating spans.

Creates a span named '_span' that automatically ends on scope exit.

Parameters
nameSpan name (string literal)
Example:
void my_function() {
NETWORK_TRACE_SPAN("my_function");
_span.set_attribute("key", "value");
// span ends when function returns
}
#define NETWORK_TRACE_SPAN(name)
RAII helper macro for creating spans.
Definition span.h:305

Definition at line 305 of file span.h.

305#define NETWORK_TRACE_SPAN(name) \
306 auto _span = ::kcenon::network::tracing::trace_context::create_span(name)