10 #include <unordered_map>
13 #include "opentelemetry/common/attribute_value.h"
14 #include "opentelemetry/common/key_value_iterable.h"
15 #include "opentelemetry/common/key_value_iterable_view.h"
16 #include "opentelemetry/common/timestamp.h"
17 #include "opentelemetry/nostd/string_view.h"
18 #include "opentelemetry/sdk/common/attribute_utils.h"
19 #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
20 #include "opentelemetry/sdk/resource/resource.h"
21 #include "opentelemetry/sdk/trace/recordable.h"
22 #include "opentelemetry/trace/span_context.h"
23 #include "opentelemetry/trace/span_id.h"
24 #include "opentelemetry/trace/span_metadata.h"
25 #include "opentelemetry/trace/trace_flags.h"
26 #include "opentelemetry/trace/trace_id.h"
27 #include "opentelemetry/version.h"
41 opentelemetry::common::SystemTimestamp timestamp,
42 const opentelemetry::common::KeyValueIterable &attributes)
43 : name_(name), timestamp_(timestamp), attribute_map_(attributes)
50 std::string
GetName() const noexcept {
return name_; }
56 opentelemetry::common::SystemTimestamp
GetTimestamp() const noexcept {
return timestamp_; }
62 const std::unordered_map<std::string, opentelemetry::sdk::common::OwnedAttributeValue> &
65 return attribute_map_.GetAttributes();
70 opentelemetry::common::SystemTimestamp timestamp_;
71 opentelemetry::sdk::common::AttributeMap attribute_map_;
81 const opentelemetry::common::KeyValueIterable &attributes)
82 : span_context_(span_context), attribute_map_(attributes)
89 const std::unordered_map<std::string, opentelemetry::sdk::common::OwnedAttributeValue> &
92 return attribute_map_.GetAttributes();
99 const opentelemetry::trace::SpanContext &
GetSpanContext() const noexcept {
return span_context_; }
102 opentelemetry::trace::SpanContext span_context_;
103 opentelemetry::sdk::common::AttributeMap attribute_map_;
112 SpanData() : resource_{
nullptr}, instrumentation_scope_{
nullptr} {}
117 opentelemetry::trace::TraceId
GetTraceId() const noexcept {
return span_context_.trace_id(); }
123 opentelemetry::trace::SpanId
GetSpanId() const noexcept {
return span_context_.span_id(); }
129 const opentelemetry::trace::SpanContext &
GetSpanContext() const noexcept {
return span_context_; }
135 opentelemetry::trace::SpanId
GetParentSpanId() const noexcept {
return parent_span_id_; }
147 opentelemetry::trace::TraceFlags
GetFlags() const noexcept {
return flags_; }
172 const opentelemetry::sdk::resource::Resource &
GetResource() const noexcept
174 if (resource_ ==
nullptr)
177 static opentelemetry::sdk::resource::Resource resource =
178 opentelemetry::sdk::resource::Resource::GetEmpty();
191 if (instrumentation_scope_ ==
nullptr)
194 static std::unique_ptr<opentelemetry::sdk::instrumentationscope::InstrumentationScope>
195 instrumentation_scope =
196 opentelemetry::sdk::instrumentationscope::InstrumentationScope::Create(
198 return *instrumentation_scope;
200 return *instrumentation_scope_;
213 opentelemetry::common::SystemTimestamp
GetStartTime() const noexcept {
return start_time_; }
219 std::chrono::nanoseconds
GetDuration() const noexcept {
return duration_; }
225 const std::unordered_map<std::string, opentelemetry::sdk::common::OwnedAttributeValue> &
228 return attribute_map_.GetAttributes();
235 const std::vector<SpanDataEvent> &
GetEvents() const noexcept {
return events_; }
241 const std::vector<SpanDataLink> &
GetLinks() const noexcept {
return links_; }
243 void SetIdentity(
const opentelemetry::trace::SpanContext &span_context,
244 opentelemetry::trace::SpanId parent_span_id) noexcept
override
246 span_context_ = span_context;
247 parent_span_id_ = parent_span_id;
253 attribute_map_.SetAttribute(key, value);
257 opentelemetry::common::SystemTimestamp timestamp =
258 opentelemetry::common::SystemTimestamp(std::chrono::system_clock::now()),
259 const opentelemetry::common::KeyValueIterable &attributes =
260 opentelemetry::common::KeyValueIterableView<std::map<std::string, int32_t>>(
261 {})) noexcept
override
263 SpanDataEvent event(std::string(name), timestamp, attributes);
264 events_.push_back(event);
267 void AddLink(
const opentelemetry::trace::SpanContext &span_context,
268 const opentelemetry::common::KeyValueIterable &attributes) noexcept
override
271 links_.push_back(
link);
278 status_desc_ = std::string(description);
283 name_ = std::string(name.
data(), name.
length());
286 void SetTraceFlags(opentelemetry::trace::TraceFlags flags) noexcept
override { flags_ = flags; }
290 span_kind_ = span_kind;
293 void SetResource(
const opentelemetry::sdk::resource::Resource &resource) noexcept
override
295 resource_ = &resource;
298 void SetStartTime(opentelemetry::common::SystemTimestamp start_time) noexcept
override
300 start_time_ = start_time;
303 void SetDuration(std::chrono::nanoseconds duration) noexcept
override { duration_ = duration; }
307 instrumentation_scope_ = &instrumentation_scope;
311 opentelemetry::trace::SpanContext span_context_{
false,
false};
312 opentelemetry::trace::SpanId parent_span_id_;
313 opentelemetry::common::SystemTimestamp start_time_;
314 std::chrono::nanoseconds duration_{0};
317 std::string status_desc_;
318 opentelemetry::sdk::common::AttributeMap attribute_map_;
319 std::vector<SpanDataEvent> events_;
320 std::vector<SpanDataLink> links_;
321 opentelemetry::trace::TraceFlags flags_;
323 const opentelemetry::sdk::resource::Resource *resource_;
324 const InstrumentationScope *instrumentation_scope_;