Skip to content

Commit e13e5d1

Browse files
dgoffredocgilmour
authored andcommitted
first pass at a review of cgilmour/telemetry-api:
- mention new files in bazel build - don't store FinalizedTracerConfig - consistent spacing_style forMemberFunctions - make config_json() available to send_app_started() - fix unrelated pet peeve in use of log_startup - remove dev noise, which fixed all but one of the broken unit tests
1 parent 94bfc20 commit e13e5d1

File tree

7 files changed

+50
-44
lines changed

7 files changed

+50
-44
lines changed

src/datadog/datadog_agent.cpp

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,12 @@ DatadogAgent::DatadogAgent(
150150
n++;
151151
tracer_telemetry_->capture_metrics();
152152
if (n % 6 == 0) {
153-
sendHeartbeatAndTelemetry();
153+
send_heartbeat_and_telemetry();
154154
}
155155
})),
156156
flush_interval_(config.flush_interval) {
157157
assert(logger_);
158158
assert(tracer_telemetry_);
159-
sendAppStarted();
160159
}
161160

162161
DatadogAgent::~DatadogAgent() {
@@ -298,8 +297,8 @@ void DatadogAgent::flush() {
298297
}
299298
}
300299

301-
void DatadogAgent::sendAppStarted() {
302-
auto payload = tracer_telemetry_->app_started();
300+
void DatadogAgent::send_app_started(nlohmann::json&& tracer_config) {
301+
auto payload = tracer_telemetry_->app_started(std::move(tracer_config));
303302
auto set_request_headers = [&](DictWriter& headers) {
304303
headers.set("Content-Type", "application/json");
305304
};
@@ -314,13 +313,6 @@ void DatadogAgent::sendAppStarted() {
314313
<< " with body (starts on next line):\n"
315314
<< response_body;
316315
});
317-
return;
318-
} else {
319-
logger->log_error([&](auto& stream) {
320-
stream << "Successful telemetry submission with response status "
321-
<< response_status << " and body (starts on next line):\n"
322-
<< response_body;
323-
});
324316
}
325317
};
326318

@@ -338,7 +330,7 @@ void DatadogAgent::sendAppStarted() {
338330
}
339331
}
340332

341-
void DatadogAgent::sendHeartbeatAndTelemetry() {
333+
void DatadogAgent::send_heartbeat_and_telemetry() {
342334
auto payload = tracer_telemetry_->heartbeat_and_telemetry();
343335
auto set_request_headers = [&](DictWriter& headers) {
344336
headers.set("Content-Type", "application/json");
@@ -354,13 +346,6 @@ void DatadogAgent::sendHeartbeatAndTelemetry() {
354346
<< " with body (starts on next line):\n"
355347
<< response_body;
356348
});
357-
return;
358-
} else {
359-
logger->log_error([&](auto& stream) {
360-
stream << "Successful telemetry submission with response status "
361-
<< response_status << " and body (starts on next line):\n"
362-
<< response_body;
363-
});
364349
}
365350
};
366351

src/datadog/datadog_agent.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class DatadogAgent : public Collector {
4747
std::chrono::steady_clock::duration flush_interval_;
4848

4949
void flush();
50+
void send_heartbeat_and_telemetry();
5051

5152
public:
5253
DatadogAgent(const FinalizedDatadogAgentConfig&,
@@ -57,8 +58,8 @@ class DatadogAgent : public Collector {
5758
Expected<void> send(
5859
std::vector<std::unique_ptr<SpanData>>&& spans,
5960
const std::shared_ptr<TraceSampler>& response_handler) override;
60-
void sendAppStarted();
61-
void sendHeartbeatAndTelemetry();
61+
62+
void send_app_started(nlohmann::json&& tracer_config);
6263

6364
nlohmann::json config_json() const override;
6465
};

src/datadog/tracer.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,14 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
243243
const Clock& clock)
244244
: logger_(config.logger),
245245
collector_(/* see constructor body */),
246-
tracer_telemetry_(std::make_shared<TracerTelemetry>(clock, config)),
246+
defaults_(std::make_shared<SpanDefaults>(config.defaults)),
247+
tracer_telemetry_(
248+
std::make_shared<TracerTelemetry>(clock, logger_, defaults_)),
247249
trace_sampler_(
248250
std::make_shared<TraceSampler>(config.trace_sampler, clock)),
249251
span_sampler_(std::make_shared<SpanSampler>(config.span_sampler, clock)),
250252
generator_(generator),
251253
clock_(clock),
252-
defaults_(std::make_shared<SpanDefaults>(config.defaults)),
253254
injection_styles_(config.injection_styles),
254255
extraction_styles_(config.extraction_styles),
255256
hostname_(config.report_hostname ? get_hostname() : nullopt),
@@ -260,14 +261,15 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
260261
} else {
261262
auto& agent_config =
262263
std::get<FinalizedDatadogAgentConfig>(config.collector);
263-
collector_ = std::make_shared<DatadogAgent>(agent_config, tracer_telemetry_,
264+
auto agent = std::make_shared<DatadogAgent>(agent_config, tracer_telemetry_,
264265
clock, config.logger);
266+
collector_ = agent;
267+
agent->send_app_started(config_json());
265268
}
266269

267270
if (config.log_on_startup) {
268-
auto json = config_json();
269-
logger_->log_startup([&json](std::ostream& log) {
270-
log << "DATADOG TRACER CONFIGURATION - " << json;
271+
logger_->log_startup([this](std::ostream& log) {
272+
log << "DATADOG TRACER CONFIGURATION - " << config_json();
271273
});
272274
}
273275
}

src/datadog/tracer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class SpanSampler;
3131
class Tracer {
3232
std::shared_ptr<Logger> logger_;
3333
std::shared_ptr<Collector> collector_;
34+
std::shared_ptr<const SpanDefaults> defaults_;
3435
std::shared_ptr<TracerTelemetry> tracer_telemetry_;
3536
std::shared_ptr<TraceSampler> trace_sampler_;
3637
std::shared_ptr<SpanSampler> span_sampler_;
3738
std::shared_ptr<const IDGenerator> generator_;
3839
Clock clock_;
39-
std::shared_ptr<const SpanDefaults> defaults_;
4040
std::vector<PropagationStyle> injection_styles_;
4141
std::vector<PropagationStyle> extraction_styles_;
4242
Optional<std::string> hostname_;

src/datadog/tracer_telemetry.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
#include "json.hpp"
44
#include "logger.h"
55
#include "platform_util.h"
6+
#include "span_defaults.h"
67
#include "version.h"
78

89
namespace datadog {
910
namespace tracing {
1011

11-
TracerTelemetry::TracerTelemetry(const Clock& clock,
12-
const FinalizedTracerConfig& config)
13-
: clock_(clock), config_(config) {
12+
TracerTelemetry::TracerTelemetry(
13+
const Clock& clock, const std::shared_ptr<Logger>& logger,
14+
const std::shared_ptr<const SpanDefaults>& span_defaults)
15+
: clock_(clock), logger_(logger), span_defaults_(span_defaults) {
1416
metrics_snapshots_.emplace_back(metrics_.tracer.spans_created,
1517
MetricSnapshot{});
1618
metrics_snapshots_.emplace_back(metrics_.tracer.spans_finished,
@@ -41,12 +43,11 @@ TracerTelemetry::TracerTelemetry(const Clock& clock,
4143
MetricSnapshot{});
4244
}
4345

44-
std::string TracerTelemetry::app_started() {
46+
std::string TracerTelemetry::app_started(nlohmann::json&& tracer_config) {
4547
time_t tracer_time = std::chrono::duration_cast<std::chrono::seconds>(
4648
clock_().wall.time_since_epoch())
4749
.count();
48-
std::string hostname = get_hostname().value_or("hostname-unavailable");
49-
50+
5051
seq_id++;
5152
auto payload =
5253
nlohmann::json::object(
@@ -59,15 +60,16 @@ std::string TracerTelemetry::app_started() {
5960
{"debug", true},
6061
{"application",
6162
nlohmann::json::object({
62-
{"service_name", config_.defaults.service},
63-
{"env", config_.defaults.environment},
63+
{"service_name", span_defaults_->service},
64+
{"env", span_defaults_->environment},
6465
{"tracer_version", tracer_version_string},
6566
{"language_name", "cpp"},
6667
{"language_version", std::to_string(__cplusplus)},
6768
})},
68-
// TODO: host information (hostname, os, os_version, kernel, etc)
69+
// TODO: host information (os, os_version, kernel, etc)
6970
{"host", nlohmann::json::object({
70-
{"hostname", hostname},
71+
{"hostname",
72+
get_hostname().value_or("hostname-unavailable")},
7173
})},
7274
{"payload",
7375
nlohmann::json::object({
@@ -77,6 +79,13 @@ std::string TracerTelemetry::app_started() {
7779
})},
7880

7981
})},
82+
// TODO: Until we figure out "configuration", above, include a
83+
// JSON dump of the tracer configuration as "additional_payload".
84+
{"additional_payload",
85+
nlohmann::json::array({nlohmann::json::object({
86+
{"name", "tracer_config_json"},
87+
{"value", tracer_config.dump()},
88+
})})},
8089
})
8190
.dump();
8291

@@ -144,8 +153,8 @@ std::string TracerTelemetry::heartbeat_and_telemetry() {
144153
{"debug", true},
145154
{"application",
146155
nlohmann::json::object({
147-
{"service_name", config_.defaults.service},
148-
{"env", config_.defaults.environment},
156+
{"service_name", span_defaults_->service},
157+
{"env", span_defaults_->environment},
149158
{"tracer_version", tracer_version_string},
150159
{"language_name", "cpp"},
151160
{"language_version", std::to_string(__cplusplus)},

src/datadog/tracer_telemetry.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
#pragma once
2+
#include <memory>
23
#include <vector>
34

45
#include "clock.h"
6+
#include "json_fwd.hpp"
57
#include "metrics.h"
6-
#include "tracer_config.h"
78

89
namespace datadog {
910
namespace tracing {
11+
12+
class Logger;
13+
class SpanDefaults;
14+
1015
class TracerTelemetry {
1116
Clock clock_;
12-
FinalizedTracerConfig config_;
17+
std::shared_ptr<Logger> logger_;
18+
std::shared_ptr<const SpanDefaults> span_defaults_;
1319
uint64_t seq_id = 0;
1420
using MetricSnapshot = std::vector<std::pair<time_t, uint64_t>>;
1521
// This uses a reference_wrapper so references to internal metric values can
@@ -56,9 +62,10 @@ class TracerTelemetry {
5662
} metrics_;
5763

5864
public:
59-
TracerTelemetry(const Clock& clock, const FinalizedTracerConfig& config);
65+
TracerTelemetry(const Clock& clock, const std::shared_ptr<Logger>& logger,
66+
const std::shared_ptr<const SpanDefaults>& span_defaults);
6067
auto& metrics() { return metrics_; };
61-
std::string app_started();
68+
std::string app_started(nlohmann::json&& tracer_config);
6269
void capture_metrics();
6370
std::string heartbeat_and_telemetry();
6471
};

test/test_datadog_agent.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ TEST_CASE("CollectorResponse") {
140140
(void)span;
141141
}
142142
REQUIRE(event_scheduler->cancelled);
143+
CAPTURE(logger->entries);
143144
REQUIRE(logger->error_count() == 1);
144145
REQUIRE(logger->first_error().code == error.code);
145146
}
@@ -156,6 +157,7 @@ TEST_CASE("CollectorResponse") {
156157
(void)span;
157158
}
158159
REQUIRE(event_scheduler->cancelled);
160+
// REVIEW: this fails since the addition of telemetry
159161
REQUIRE(logger->error_count() == 1);
160162
REQUIRE(logger->first_error().code == error.code);
161163
}

0 commit comments

Comments
 (0)