1818#include " string_view.h"
1919#include " trace_sampler.h"
2020#include " tracer.h"
21- #include " version.h"
2221
2322namespace datadog {
2423namespace tracing {
@@ -163,7 +162,8 @@ DatadogAgent::DatadogAgent(
163162 flush_interval_(config.flush_interval),
164163 request_timeout_(config.request_timeout),
165164 shutdown_timeout_(config.shutdown_timeout),
166- remote_config_(tracer_signature, config_manager) {
165+ remote_config_(tracer_signature, config_manager),
166+ tracer_signature_(tracer_signature) {
167167 assert (logger_);
168168 assert (tracer_telemetry_);
169169
@@ -290,8 +290,10 @@ void DatadogAgent::flush() {
290290 auto set_request_headers = [&](DictWriter& headers) {
291291 headers.set (" Content-Type" , " application/msgpack" );
292292 headers.set (" Datadog-Meta-Lang" , " cpp" );
293- headers.set (" Datadog-Meta-Lang-Version" , std::to_string (__cplusplus));
294- headers.set (" Datadog-Meta-Tracer-Version" , tracer_version);
293+ headers.set (" Datadog-Meta-Lang-Version" ,
294+ tracer_signature_.library_language_version );
295+ headers.set (" Datadog-Meta-Tracer-Version" ,
296+ tracer_signature_.library_version );
295297 headers.set (" X-Datadog-Trace-Count" , std::to_string (trace_chunks.size ()));
296298 };
297299
@@ -366,9 +368,30 @@ void DatadogAgent::flush() {
366368 }
367369}
368370
369- void DatadogAgent::send_telemetry (std::string payload) {
371+ void DatadogAgent::send_telemetry (StringView request_type,
372+ std::string payload) {
373+ auto set_telemetry_headers = [request_type, payload_size = payload.size (),
374+ debug_enabled = tracer_telemetry_->debug (),
375+ tracer_signature =
376+ &tracer_signature_](DictWriter& headers) {
377+ /*
378+ TODO:
379+ Datadog-Container-ID
380+ */
381+ headers.set (" Content-Type" , " application/json" );
382+ headers.set (" Content-Length" , std::to_string (payload_size));
383+ headers.set (" DD-Telemetry-API-Version" , " v2" );
384+ headers.set (" DD-Client-Library-Language" , " cpp" );
385+ headers.set (" DD-Client-Library-Version" , tracer_signature->library_version );
386+ headers.set (" DD-Telemetry-Request-Type" , request_type);
387+
388+ if (debug_enabled) {
389+ headers.set (" DD-Telemetry-Debug-Enabled" , " true" );
390+ }
391+ };
392+
370393 auto post_result =
371- http_client_->post (telemetry_endpoint_, set_content_type_json ,
394+ http_client_->post (telemetry_endpoint_, set_telemetry_headers ,
372395 std::move (payload), telemetry_on_response_,
373396 telemetry_on_error_, clock_ ().tick + request_timeout_);
374397 if (auto * error = post_result.if_error ()) {
@@ -379,20 +402,22 @@ void DatadogAgent::send_telemetry(std::string payload) {
379402
380403void DatadogAgent::send_app_started (
381404 const std::unordered_map<ConfigName, ConfigMetadata>& config_metadata) {
382- send_telemetry (tracer_telemetry_->app_started (config_metadata));
405+ send_telemetry (" app-started" ,
406+ tracer_telemetry_->app_started (config_metadata));
383407}
384408
385409void DatadogAgent::send_heartbeat_and_telemetry () {
386- send_telemetry (tracer_telemetry_->heartbeat_and_telemetry ());
410+ send_telemetry (" app-heartbeat " , tracer_telemetry_->heartbeat_and_telemetry ());
387411}
388412
389413void DatadogAgent::send_app_closing () {
390- send_telemetry (tracer_telemetry_->app_closing ());
414+ send_telemetry (" app-closing " , tracer_telemetry_->app_closing ());
391415}
392416
393417void DatadogAgent::send_configuration_change (
394418 const std::vector<ConfigMetadata>& config) {
395- send_telemetry (tracer_telemetry_->configuration_change (config));
419+ send_telemetry (" app-client-configuration-change" ,
420+ tracer_telemetry_->configuration_change (config));
396421}
397422
398423void DatadogAgent::get_and_apply_remote_configuration_updates () {
0 commit comments