Skip to content

Commit 9982dac

Browse files
committed
feat: report telemetry logs
1 parent dc70fc0 commit 9982dac

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

include/datadog/telemetry/telemetry.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Telemetry {
2929
std::vector<std::shared_ptr<Metric>> metrics);
3030

3131
~Telemetry() = default;
32+
33+
void log_error(std::string message);
34+
void log_warning(std::string message);
3235
};
3336

3437
} // namespace telemetry

src/datadog/telemetry/telemetry.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,13 @@ Telemetry::Telemetry(FinalizedConfiguration config,
3939
std::vector<std::shared_ptr<remote_config::Listener>>{});
4040
}
4141

42+
void Telemetry::log_error(std::string message) {
43+
tracer_telemetry_->log(std::move(message), LogLevel::ERROR);
44+
}
45+
46+
void Telemetry::log_warning(std::string message) {
47+
tracer_telemetry_->log(std::move(message), LogLevel::WARNING);
48+
}
49+
4250
} // namespace telemetry
4351
} // namespace datadog

src/datadog/tracer_telemetry.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,27 @@ std::string TracerTelemetry::heartbeat_and_telemetry() {
292292
batch_payloads.emplace_back(std::move(generate_metrics));
293293
}
294294

295+
if (!logs_.empty()) {
296+
auto encoded_logs = nlohmann::json::array();
297+
for (const auto& log : logs_) {
298+
auto encoded =
299+
nlohmann::json{{"message", log.message}, {"level", log.level}};
300+
encoded_logs.emplace_back(std::move(encoded));
301+
}
302+
303+
assert(!encoded_logs.empty());
304+
305+
auto logs_payload = nlohmann::json::object({
306+
{"request_type", "logs"},
307+
{"payload",
308+
nlohmann::json{
309+
{"logs", encoded_logs},
310+
}},
311+
});
312+
313+
batch_payloads.emplace_back(std::move(logs_payload));
314+
}
315+
295316
auto telemetry_body = generate_telemetry_body("message-batch");
296317
telemetry_body["payload"] = batch_payloads;
297318
auto message_batch_payload = telemetry_body.dump();
@@ -348,6 +369,27 @@ std::string TracerTelemetry::app_closing() {
348369
batch_payloads.emplace_back(std::move(generate_metrics));
349370
}
350371

372+
if (!logs_.empty()) {
373+
auto encoded_logs = nlohmann::json::array();
374+
for (const auto& log : logs_) {
375+
auto encoded =
376+
nlohmann::json{{"message", log.message}, {"level", log.level}};
377+
encoded_logs.emplace_back(std::move(encoded));
378+
}
379+
380+
assert(!encoded_logs.empty());
381+
382+
auto logs_payload = nlohmann::json::object({
383+
{"request_type", "logs"},
384+
{"payload",
385+
nlohmann::json{
386+
{"logs", encoded_logs},
387+
}},
388+
});
389+
390+
batch_payloads.emplace_back(std::move(logs_payload));
391+
}
392+
351393
auto telemetry_body = generate_telemetry_body("message-batch");
352394
telemetry_body["payload"] = batch_payloads;
353395
auto message_batch_payload = telemetry_body.dump();

src/datadog/tracer_telemetry.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
#include "json.hpp"
4040
#include "platform_util.h"
41+
#include "telemetry/log.h"
4142

4243
namespace datadog {
4344
namespace tracing {
@@ -47,7 +48,7 @@ struct SpanDefaults;
4748

4849
class TracerTelemetry {
4950
bool enabled_ = false;
50-
bool debug_ = false;
51+
bool debug_ = true;
5152
Clock clock_;
5253
std::shared_ptr<Logger> logger_;
5354
HostInfo host_info_;
@@ -120,6 +121,8 @@ class TracerTelemetry {
120121

121122
std::vector<std::shared_ptr<telemetry::Metric>> user_metrics_;
122123

124+
std::vector<telemetry::LogMessage> logs_;
125+
123126
public:
124127
TracerTelemetry(
125128
bool enabled, const Clock& clock, const std::shared_ptr<Logger>& logger,
@@ -151,6 +154,10 @@ class TracerTelemetry {
151154
std::string app_closing();
152155
// Construct an `app-client-configuration-change` message.
153156
std::string configuration_change();
157+
158+
inline void log(std::string message, telemetry::LogLevel level) {
159+
logs_.emplace_back(telemetry::LogMessage{std::move(message), level});
160+
}
154161
};
155162

156163
} // namespace tracing

0 commit comments

Comments
 (0)