diff --git a/src/datadog/span.cpp b/src/datadog/span.cpp index 7d076996..59f271f9 100644 --- a/src/datadog/span.cpp +++ b/src/datadog/span.cpp @@ -28,6 +28,7 @@ Span::Span(SpanData* data, const std::shared_ptr& trace_segment, } Span::~Span() { + const auto now = clock_(); if (!trace_segment_) { // We were moved from. return; @@ -36,7 +37,6 @@ Span::~Span() { if (end_time_) { data_->duration = *end_time_ - data_->start.tick; } else { - const auto now = clock_(); data_->duration = now - data_->start; } @@ -44,8 +44,10 @@ Span::~Span() { } Span Span::create_child(const SpanConfig& config) const { + auto now = clock_(); auto span_data = std::make_unique(); - 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_(); diff --git a/src/datadog/span_data.cpp b/src/datadog/span_data.cpp index 7ed4ebb2..d8c3c0e0 100644 --- a/src/datadog/span_data.cpp +++ b/src/datadog/span_data.cpp @@ -36,7 +36,11 @@ Optional 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; @@ -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 msgpack_encode(std::string& destination, const SpanData& span) { diff --git a/src/datadog/span_data.h b/src/datadog/span_data.h index 9413e173..ef282020 100644 --- a/src/datadog/span_data.h +++ b/src/datadog/span_data.h @@ -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 diff --git a/src/datadog/tracer.cpp b/src/datadog/tracer.cpp index 234d2d24..e86887ad 100644 --- a/src/datadog/tracer.cpp +++ b/src/datadog/tracer.cpp @@ -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(); - 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; @@ -203,6 +205,7 @@ Expected Tracer::extract_span(const DictReader& reader) { Expected Tracer::extract_span(const DictReader& reader, const SpanConfig& config) { + auto now = clock_(); assert(!extraction_styles_.empty()); AuditedReader audited_reader{reader}; @@ -335,7 +338,8 @@ Expected 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;