1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Copyright The OpenTelemetry Authors
- // SPDX-License-Identifier: Apache-2.0
- #pragma once
- #include "opentelemetry/common/timestamp.h"
- #include "opentelemetry/context/context.h"
- #include "opentelemetry/nostd/variant.h"
- #include "opentelemetry/trace/span_context.h"
- #include "opentelemetry/trace/span_metadata.h"
- #include "opentelemetry/version.h"
- OPENTELEMETRY_BEGIN_NAMESPACE
- namespace trace
- {
- /**
- * StartSpanOptions provides options to set properties of a Span at the time of
- * its creation
- */
- struct StartSpanOptions
- {
- // Optionally sets the start time of a Span.
- //
- // If the start time of a Span is set, timestamps from both the system clock
- // and steady clock must be provided.
- //
- // Timestamps from the steady clock can be used to most accurately measure a
- // Span's duration, while timestamps from the system clock can be used to most
- // accurately place a Span's
- // time point relative to other Spans collected across a distributed system.
- common::SystemTimestamp start_system_time;
- common::SteadyTimestamp start_steady_time;
- // Explicitly set the parent of a Span.
- //
- // The `parent` field is designed to establish parent-child relationships
- // in tracing spans. It can be set to either a `SpanContext` or a
- // `context::Context` object.
- //
- // - When set to valid `SpanContext`, it directly assigns a specific Span as the parent
- // of the newly created Span.
- //
- // - Alternatively, setting the `parent` field to a `context::Context` allows for
- // more nuanced parent identification:
- // 1. If the `Context` contains a Span object, this Span is treated as the parent.
- // 2. If the `Context` contains the boolean flag `is_root_span` set to `true`,
- // it indicates that the new Span should be treated as a root Span, i.e., it
- // does not have a parent Span.
- // Example Usage:
- // ```cpp
- // trace_api::StartSpanOptions options;
- // opentelemetry::context::Context root;
- // root = root.SetValue(kIsRootSpanKey, true);
- // options.parent = root;
- // auto root_span = tracer->StartSpan("span root", options);
- // ```
- //
- // - If the `parent` field is not set, the newly created Span will inherit the
- // parent of the currently active Span (if any) in the current context.
- //
- nostd::variant<SpanContext, context::Context> parent = SpanContext::GetInvalid();
- // TODO:
- // SpanContext remote_parent;
- // Links
- SpanKind kind = SpanKind::kInternal;
- };
- } // namespace trace
- OPENTELEMETRY_END_NAMESPACE
|