Skip to content

Commit 28cc724

Browse files
committed
Refactor repeated telemetry body construction
1 parent 09fc24d commit 28cc724

File tree

2 files changed

+50
-101
lines changed

2 files changed

+50
-101
lines changed

src/datadog/tracer_telemetry.cpp

Lines changed: 46 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "tracer_telemetry.h"
22

3-
#include "json.hpp"
43
#include "logger.h"
54
#include "platform_util.h"
65
#include "span_defaults.h"
@@ -52,51 +51,49 @@ TracerTelemetry::TracerTelemetry(
5251
}
5352
}
5453

55-
std::string TracerTelemetry::app_started(nlohmann::json&& tracer_config) {
54+
nlohmann::json TracerTelemetry::generate_telemetry_body(
55+
std::string request_type) {
5656
time_t tracer_time = std::chrono::duration_cast<std::chrono::seconds>(
5757
clock_().wall.time_since_epoch())
5858
.count();
59-
60-
seq_id++;
61-
auto payload =
62-
nlohmann::json::object(
63-
{
64-
{"api_version", "v2"},
65-
{"seq_id", seq_id},
66-
{"request_type", "app-started"},
67-
{"tracer_time", tracer_time},
68-
{"runtime_id", span_defaults_->runtime_id},
69-
{"debug", debug_},
70-
{"application",
71-
nlohmann::json::object({
72-
{"service_name", span_defaults_->service},
73-
{"env", span_defaults_->environment},
74-
{"tracer_version", tracer_version_string},
75-
{"language_name", "cpp"},
76-
{"language_version", std::to_string(__cplusplus)},
59+
seq_id_++;
60+
return nlohmann::json::object({
61+
{"api_version", "v2"},
62+
{"seq_id", seq_id_},
63+
{"request_type", request_type},
64+
{"tracer_time", tracer_time},
65+
{"runtime_id", span_defaults_->runtime_id},
66+
{"debug", debug_},
67+
{"application", nlohmann::json::object({
68+
{"service_name", span_defaults_->service},
69+
{"env", span_defaults_->environment},
70+
{"tracer_version", tracer_version_string},
71+
{"language_name", "cpp"},
72+
{"language_version", std::to_string(__cplusplus)},
73+
})},
74+
// TODO: host information (os, os_version, kernel, etc)
75+
{"host", nlohmann::json::object({
76+
{"hostname", hostname_},
7777
})},
78-
// TODO: host information (os, os_version, kernel, etc)
79-
{"host", nlohmann::json::object({
80-
{"hostname", hostname_},
81-
})},
82-
{"payload",
83-
nlohmann::json::object({
84-
{"configuration", nlohmann::json::array({
85-
// TODO: environment variables or
86-
// finalized config details
87-
})},
78+
});
79+
}
8880

89-
})},
90-
// TODO: Until we figure out "configuration", above, include a
91-
// JSON dump of the tracer configuration as "additional_payload".
92-
{"additional_payload",
93-
nlohmann::json::array({nlohmann::json::object({
94-
{"name", "tracer_config_json"},
95-
{"value", tracer_config.dump()},
96-
})})},
97-
})
98-
.dump();
99-
return payload;
81+
std::string TracerTelemetry::app_started(nlohmann::json&& tracer_config) {
82+
auto telemetry_body = generate_telemetry_body("app-started");
83+
// TODO: environment variables or finalized config details
84+
telemetry_body["payload"] = nlohmann::json::object({
85+
{"configuration", nlohmann::json::array({})},
86+
87+
});
88+
// TODO: Until we figure out "configuration", above, include a
89+
// JSON dump of the tracer configuration as "additional_payload".
90+
telemetry_body["additional_payload"] =
91+
nlohmann::json::array({nlohmann::json::object({
92+
{"name", "tracer_config_json"},
93+
{"value", tracer_config.dump()},
94+
})});
95+
auto app_started_payload = telemetry_body.dump();
96+
return app_started_payload;
10097
}
10198

10299
void TracerTelemetry::capture_metrics() {
@@ -113,9 +110,6 @@ void TracerTelemetry::capture_metrics() {
113110
}
114111

115112
std::string TracerTelemetry::heartbeat_and_telemetry() {
116-
time_t tracer_time = std::chrono::duration_cast<std::chrono::seconds>(
117-
clock_().wall.time_since_epoch())
118-
.count();
119113
auto batch_payloads = nlohmann::json::array();
120114

121115
auto heartbeat = nlohmann::json::object({
@@ -151,38 +145,13 @@ std::string TracerTelemetry::heartbeat_and_telemetry() {
151145
batch_payloads.emplace_back(std::move(generate_metrics));
152146
}
153147

154-
seq_id++;
155-
auto payload =
156-
nlohmann::json::object(
157-
{
158-
{"api_version", "v2"},
159-
{"seq_id", seq_id},
160-
{"request_type", "message-batch"},
161-
{"tracer_time", tracer_time},
162-
{"runtime_id", span_defaults_->runtime_id},
163-
{"debug", debug_},
164-
{"application",
165-
nlohmann::json::object({
166-
{"service_name", span_defaults_->service},
167-
{"env", span_defaults_->environment},
168-
{"tracer_version", tracer_version_string},
169-
{"language_name", "cpp"},
170-
{"language_version", std::to_string(__cplusplus)},
171-
})},
172-
// TODO: host information (hostname, os, os_version, kernel, etc)
173-
{"host", nlohmann::json::object({
174-
{"hostname", hostname_},
175-
})},
176-
{"payload", batch_payloads},
177-
})
178-
.dump();
179-
return payload;
148+
auto telemetry_body = generate_telemetry_body("message-batch");
149+
telemetry_body["payload"] = batch_payloads;
150+
auto message_batch_payload = telemetry_body.dump();
151+
return message_batch_payload;
180152
}
181153

182154
std::string TracerTelemetry::app_closing() {
183-
time_t tracer_time = std::chrono::duration_cast<std::chrono::seconds>(
184-
clock_().wall.time_since_epoch())
185-
.count();
186155
auto batch_payloads = nlohmann::json::array();
187156

188157
auto app_closing = nlohmann::json::object({
@@ -218,32 +187,10 @@ std::string TracerTelemetry::app_closing() {
218187
batch_payloads.emplace_back(std::move(generate_metrics));
219188
}
220189

221-
seq_id++;
222-
auto payload =
223-
nlohmann::json::object(
224-
{
225-
{"api_version", "v2"},
226-
{"seq_id", seq_id},
227-
{"request_type", "message-batch"},
228-
{"tracer_time", tracer_time},
229-
{"runtime_id", span_defaults_->runtime_id},
230-
{"debug", debug_},
231-
{"application",
232-
nlohmann::json::object({
233-
{"service_name", span_defaults_->service},
234-
{"env", span_defaults_->environment},
235-
{"tracer_version", tracer_version_string},
236-
{"language_name", "cpp"},
237-
{"language_version", std::to_string(__cplusplus)},
238-
})},
239-
// TODO: host information (hostname, os, os_version, kernel, etc)
240-
{"host", nlohmann::json::object({
241-
{"hostname", hostname_},
242-
})},
243-
{"payload", batch_payloads},
244-
})
245-
.dump();
246-
return payload;
190+
auto telemetry_body = generate_telemetry_body("message-batch");
191+
telemetry_body["payload"] = batch_payloads;
192+
auto message_batch_payload = telemetry_body.dump();
193+
return message_batch_payload;
247194
}
248195

249196
} // namespace tracing

src/datadog/tracer_telemetry.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include <vector>
2929

3030
#include "clock.h"
31-
#include "json_fwd.hpp"
31+
#include "json.hpp"
3232
#include "metrics.h"
3333

3434
namespace datadog {
@@ -44,7 +44,7 @@ class TracerTelemetry {
4444
std::shared_ptr<Logger> logger_;
4545
std::shared_ptr<const SpanDefaults> span_defaults_;
4646
std::string hostname_;
47-
uint64_t seq_id = 0;
47+
uint64_t seq_id_ = 0;
4848
// Each metric has an associated MetricSnapshot that contains the data points,
4949
// represented as a timestamp and the value of that metric.
5050
using MetricSnapshot = std::vector<std::pair<time_t, uint64_t>>;
@@ -93,6 +93,8 @@ class TracerTelemetry {
9393
} trace_api;
9494
} metrics_;
9595

96+
nlohmann::json generate_telemetry_body(std::string request_type);
97+
9698
public:
9799
TracerTelemetry(bool enabled, const Clock& clock,
98100
const std::shared_ptr<Logger>& logger,

0 commit comments

Comments
 (0)