Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/datadog/span.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Span::Span(SpanData* data, const std::shared_ptr<TraceSegment>& trace_segment,
}

Span::~Span() {
const auto now = clock_();
if (!trace_segment_) {
// We were moved from.
return;
Expand All @@ -36,16 +37,17 @@ Span::~Span() {
if (end_time_) {
data_->duration = *end_time_ - data_->start.tick;
} else {
const auto now = clock_();
data_->duration = now - data_->start;
}

trace_segment_->span_finished();
}

Span Span::create_child(const SpanConfig& config) const {
auto now = clock_();
auto span_data = std::make_unique<SpanData>();
span_data->apply_config(trace_segment_->defaults(), config, clock_);
span_data->start = now;
span_data->apply_config(trace_segment_->defaults(), config);
span_data->trace_id = data_->trace_id;
span_data->parent_id = data_->span_id;
span_data->span_id = generate_span_id_();
Expand Down
11 changes: 5 additions & 6 deletions src/datadog/span_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ Optional<StringView> SpanData::version() const {
}

void SpanData::apply_config(const SpanDefaults& defaults,
const SpanConfig& config, const Clock& clock) {
const SpanConfig& config) {
if (config.start) {
start = *config.start;
}

std::string version;
if (config.service) {
service = *config.service;
Expand Down Expand Up @@ -66,11 +70,6 @@ void SpanData::apply_config(const SpanDefaults& defaults,

resource = config.resource.value_or(name);
service_type = config.service_type.value_or(defaults.service_type);
if (config.start) {
start = *config.start;
} else {
start = clock();
}
}

Expected<void> msgpack_encode(std::string& destination, const SpanData& span) {
Expand Down
6 changes: 2 additions & 4 deletions src/datadog/span_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,8 @@ struct SpanData {

// Modify the properties of this object to honor the specified `config` and
// `defaults`. The properties of `config`, if set, override the properties of
// `defaults`. Use the specified `clock` to provide a start none of none is
// specified in `config`.
void apply_config(const SpanDefaults& defaults, const SpanConfig& config,
const Clock& clock);
// `defaults`.
void apply_config(const SpanDefaults& defaults, const SpanConfig& config);
};

// Append to the specified `destination` the MessagePack representation of the
Expand Down
8 changes: 6 additions & 2 deletions src/datadog/tracer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,11 @@ void Tracer::store_config() {
Span Tracer::create_span() { return create_span(SpanConfig{}); }

Span Tracer::create_span(const SpanConfig& config) {
auto now = clock_();
auto defaults = config_manager_->span_defaults();
auto span_data = std::make_unique<SpanData>();
span_data->apply_config(*defaults, config, clock_);
span_data->start = now;
span_data->apply_config(*defaults, config);
span_data->trace_id = generator_->trace_id(span_data->start);
span_data->span_id = span_data->trace_id.low;
span_data->parent_id = 0;
Expand Down Expand Up @@ -203,6 +205,7 @@ Expected<Span> Tracer::extract_span(const DictReader& reader) {

Expected<Span> Tracer::extract_span(const DictReader& reader,
const SpanConfig& config) {
auto now = clock_();
assert(!extraction_styles_.empty());

AuditedReader audited_reader{reader};
Expand Down Expand Up @@ -335,7 +338,8 @@ Expected<Span> Tracer::extract_span(const DictReader& reader,

// We're done extracting fields. Now create the span.
// This is similar to what we do in `create_span`.
span_data->apply_config(*config_manager_->span_defaults(), config, clock_);
span_data->start = now;
span_data->apply_config(*config_manager_->span_defaults(), config);
span_data->span_id = generator_->span_id();
span_data->trace_id = *merged_context.trace_id;
span_data->parent_id = *merged_context.parent_id;
Expand Down
Loading