Skip to content

Commit 879cfe3

Browse files
committed
separate runtime_id from class SpanDefaults, and introduce class RuntimeID
1 parent 31d88a3 commit 879cfe3

15 files changed

+86
-25
lines changed

BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ cc_library(
2323
"src/datadog/propagation_style.cpp",
2424
"src/datadog/random.cpp",
2525
"src/datadog/rate.cpp",
26+
"src/datadog/runtime_id.cpp",
2627
"src/datadog/span.cpp",
2728
"src/datadog/span_data.cpp",
2829
"src/datadog/span_defaults.cpp",
@@ -75,6 +76,7 @@ cc_library(
7576
"src/datadog/propagation_style.h",
7677
"src/datadog/random.h",
7778
"src/datadog/rate.h",
79+
"src/datadog/runtime_id.h",
7880
"src/datadog/sampling_decision.h",
7981
"src/datadog/sampling_mechanism.h",
8082
"src/datadog/sampling_priority.h",

CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ target_sources(dd_trace_cpp-objects PRIVATE
118118
src/datadog/propagation_style.cpp
119119
src/datadog/random.cpp
120120
src/datadog/rate.cpp
121+
src/datadog/runtime_id.cpp
121122
src/datadog/span.cpp
122123
src/datadog/span_data.cpp
123124
src/datadog/span_defaults.cpp
@@ -176,6 +177,7 @@ target_sources(dd_trace_cpp-objects PUBLIC
176177
src/datadog/propagation_style.h
177178
src/datadog/random.h
178179
src/datadog/rate.h
180+
src/datadog/runtime_id.h
179181
src/datadog/sampling_decision.h
180182
src/datadog/sampling_mechanism.h
181183
src/datadog/sampling_priority.h
@@ -209,12 +211,12 @@ include_directories(${CMAKE_BINARY_DIR}/include)
209211

210212
# Linking this library requires libcurl and threads.
211213
find_package(Threads REQUIRED)
212-
target_link_libraries(dd_trace_cpp-objects
213-
PUBLIC
214-
${CMAKE_BINARY_DIR}/lib/libcurl.a
215-
PUBLIC
216-
Threads::Threads
217-
${COVERAGE_LIBRARIES}
214+
target_link_libraries(dd_trace_cpp-objects
215+
PUBLIC
216+
${CMAKE_BINARY_DIR}/lib/libcurl.a
217+
PUBLIC
218+
Threads::Threads
219+
${COVERAGE_LIBRARIES}
218220
${COREFOUNDATION_LIBRARY}
219221
${SYSTEMCONFIGURATION_LIBRARY}
220222
)

src/datadog/runtime_id.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include "runtime_id.h"
2+
3+
#include "random.h"
4+
5+
namespace datadog {
6+
namespace tracing {
7+
8+
RuntimeID::RuntimeID() {}
9+
10+
RuntimeID RuntimeID::generate() {
11+
RuntimeID id;
12+
id.uuid_ = uuid();
13+
return id;
14+
}
15+
16+
} // namespace tracing
17+
} // namespace datadog

src/datadog/runtime_id.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
// TODO: document
4+
5+
#include <string>
6+
7+
namespace datadog {
8+
namespace tracing {
9+
10+
class RuntimeID {
11+
std::string uuid_;
12+
RuntimeID();
13+
14+
public:
15+
// Return the canonical textual representation of this ID.
16+
const std::string& string() const { return uuid_; }
17+
18+
// Return a pseudo-randomly generated runtime ID. The underlying generator is
19+
// `random_uint64()` declared in `random.h`.
20+
static RuntimeID generate();
21+
};
22+
23+
} // namespace tracing
24+
} // namespace datadog

src/datadog/span_defaults.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ nlohmann::json to_json(const SpanDefaults& defaults) {
2222
TO_JSON(version);
2323
TO_JSON(name);
2424
TO_JSON(tags);
25-
TO_JSON(runtime_id);
2625
#undef TO_JSON
2726
return result;
2827
}

src/datadog/span_defaults.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <unordered_map>
99

1010
#include "json_fwd.hpp"
11-
#include "random.h"
1211

1312
namespace datadog {
1413
namespace tracing {
@@ -20,7 +19,6 @@ struct SpanDefaults {
2019
std::string version = "";
2120
std::string name = "";
2221
std::unordered_map<std::string, std::string> tags;
23-
std::string runtime_id = uuid();
2422
};
2523

2624
nlohmann::json to_json(const SpanDefaults&);

src/datadog/trace_segment.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ TraceSegment::TraceSegment(
8383
const std::shared_ptr<TraceSampler>& trace_sampler,
8484
const std::shared_ptr<SpanSampler>& span_sampler,
8585
const std::shared_ptr<const SpanDefaults>& defaults,
86+
const RuntimeID& runtime_id,
8687
const std::vector<PropagationStyle>& injection_styles,
8788
const Optional<std::string>& hostname, Optional<std::string> origin,
8889
std::size_t tags_header_max_size,
@@ -97,6 +98,7 @@ TraceSegment::TraceSegment(
9798
trace_sampler_(trace_sampler),
9899
span_sampler_(span_sampler),
99100
defaults_(defaults),
101+
runtime_id_(runtime_id),
100102
injection_styles_(injection_styles),
101103
hostname_(hostname),
102104
origin_(std::move(origin)),
@@ -214,7 +216,7 @@ void TraceSegment::span_finished() {
214216
}
215217
span.numeric_tags[tags::internal::process_id] = Cache::process_id;
216218
span.tags[tags::internal::language] = "cpp";
217-
span.tags[tags::internal::runtime_id] = defaults_->runtime_id;
219+
span.tags[tags::internal::runtime_id] = runtime_id_.string();
218220
}
219221

220222
const auto result = collector_->send(std::move(spans_), trace_sampler_);

src/datadog/trace_segment.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class TraceSegment {
6161
std::shared_ptr<SpanSampler> span_sampler_;
6262

6363
std::shared_ptr<const SpanDefaults> defaults_;
64+
RuntimeID runtime_id_;
6465
const std::vector<PropagationStyle> injection_styles_;
6566
const Optional<std::string> hostname_;
6667
const Optional<std::string> origin_;
@@ -81,6 +82,7 @@ class TraceSegment {
8182
const std::shared_ptr<TraceSampler>& trace_sampler,
8283
const std::shared_ptr<SpanSampler>& span_sampler,
8384
const std::shared_ptr<const SpanDefaults>& defaults,
85+
const RuntimeID& runtime_id,
8486
const std::vector<PropagationStyle>& injection_styles,
8587
const Optional<std::string>& hostname,
8688
Optional<std::string> origin, std::size_t tags_header_max_size,

src/datadog/tracer.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,16 @@ Expected<ExtractedData> extract_b3(
199199

200200
nlohmann::json make_config_json(
201201
StringView tracer_version_string, const Collector& collector,
202-
const SpanDefaults& defaults, const TraceSampler& trace_sampler,
203-
const SpanSampler& span_sampler,
202+
const SpanDefaults& defaults, const RuntimeID& runtime_id,
203+
const TraceSampler& trace_sampler, const SpanSampler& span_sampler,
204204
const std::vector<PropagationStyle>& injection_styles,
205205
const std::vector<PropagationStyle>& extraction_styles,
206206
const Optional<std::string>& hostname, std::size_t tags_header_max_size) {
207207
// clang-format off
208208
auto config = nlohmann::json::object({
209209
{"version", tracer_version_string},
210210
{"defaults", to_json(defaults)},
211+
{"runtime_id", runtime_id.string()},
211212
{"collector", collector.config_json()},
212213
{"trace_sampler", trace_sampler.config_json()},
213214
{"span_sampler", span_sampler.config_json()},
@@ -244,8 +245,10 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
244245
: logger_(config.logger),
245246
collector_(/* see constructor body */),
246247
defaults_(std::make_shared<SpanDefaults>(config.defaults)),
248+
runtime_id_(config.runtime_id ? *config.runtime_id
249+
: RuntimeID::generate()),
247250
tracer_telemetry_(std::make_shared<TracerTelemetry>(
248-
config.report_telemetry, clock, logger_, defaults_)),
251+
config.report_telemetry, clock, logger_, defaults_, runtime_id_)),
249252
trace_sampler_(
250253
std::make_shared<TraceSampler>(config.trace_sampler, clock)),
251254
span_sampler_(std::make_shared<SpanSampler>(config.span_sampler, clock)),
@@ -278,8 +281,9 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
278281

279282
nlohmann::json Tracer::config_json() const {
280283
return make_config_json(tracer_version_string, *collector_, *defaults_,
281-
*trace_sampler_, *span_sampler_, injection_styles_,
282-
extraction_styles_, hostname_, tags_header_max_size_);
284+
runtime_id_, *trace_sampler_, *span_sampler_,
285+
injection_styles_, extraction_styles_, hostname_,
286+
tags_header_max_size_);
283287
}
284288

285289
Span Tracer::create_span() { return create_span(SpanConfig{}); }
@@ -300,8 +304,8 @@ Span Tracer::create_span(const SpanConfig& config) {
300304
tracer_telemetry_->metrics().tracer.trace_segments_created_new.inc();
301305
const auto segment = std::make_shared<TraceSegment>(
302306
logger_, collector_, tracer_telemetry_, trace_sampler_, span_sampler_,
303-
defaults_, injection_styles_, hostname_, nullopt /* origin */,
304-
tags_header_max_size_, std::move(trace_tags),
307+
defaults_, runtime_id_, injection_styles_, hostname_,
308+
nullopt /* origin */, tags_header_max_size_, std::move(trace_tags),
305309
nullopt /* sampling_decision */, nullopt /* additional_w3c_tracestate */,
306310
nullopt /* additional_datadog_w3c_tracestate*/, std::move(span_data));
307311
Span span{span_data_ptr, segment,
@@ -464,7 +468,7 @@ Expected<Span> Tracer::extract_span(const DictReader& reader,
464468
tracer_telemetry_->metrics().tracer.trace_segments_created_continued.inc();
465469
const auto segment = std::make_shared<TraceSegment>(
466470
logger_, collector_, tracer_telemetry_, trace_sampler_, span_sampler_,
467-
defaults_, injection_styles_, hostname_, std::move(origin),
471+
defaults_, runtime_id_, injection_styles_, hostname_, std::move(origin),
468472
tags_header_max_size_, std::move(trace_tags),
469473
std::move(sampling_decision), std::move(additional_w3c_tracestate),
470474
std::move(additional_datadog_w3c_tracestate), std::move(span_data));

src/datadog/tracer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class Tracer {
3232
std::shared_ptr<Logger> logger_;
3333
std::shared_ptr<Collector> collector_;
3434
std::shared_ptr<const SpanDefaults> defaults_;
35+
RuntimeID runtime_id_;
3536
std::shared_ptr<TracerTelemetry> tracer_telemetry_;
3637
std::shared_ptr<TraceSampler> trace_sampler_;
3738
std::shared_ptr<SpanSampler> span_sampler_;

0 commit comments

Comments
 (0)