1919#include " extraction_util.h"
2020#include " hex.h"
2121#include " json.hpp"
22+ #include " msgpack.h"
2223#include " platform_util.h"
24+ #include " random.h"
2325#include " span_data.h"
2426#include " span_sampler.h"
2527#include " tags.h"
@@ -85,6 +87,8 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
8587 log << " DATADOG TRACER CONFIGURATION - " << configuration;
8688 });
8789 }
90+
91+ store_config ();
8892}
8993
9094std::string Tracer::config () const {
@@ -110,6 +114,42 @@ std::string Tracer::config() const {
110114 return config.dump ();
111115}
112116
117+ void Tracer::store_config () {
118+ auto maybe_file =
119+ InMemoryFile::make (std::string (" datadog-tracer-info-" ) + short_uuid ());
120+ if (auto error = maybe_file.if_error ()) {
121+ if (error->code == Error::Code::NOT_IMPLEMENTED) return ;
122+
123+ logger_->log_error (" Failed to open anonymous file" );
124+ return ;
125+ }
126+
127+ metadata_file_ = std::make_unique<InMemoryFile>(std::move (*maybe_file));
128+
129+ auto defaults = config_manager_->span_defaults ();
130+
131+ std::string buffer;
132+ buffer.reserve (1024 );
133+
134+ // clang-format off
135+ msgpack::pack_map (
136+ buffer,
137+ " schema_version" , [&](auto & buffer) { msgpack::pack_integer (buffer, std::uint64_t (1 )); return Expected<void >{}; },
138+ " runtime_id" , [&](auto & buffer) { return msgpack::pack_string (buffer, runtime_id_.string ()); },
139+ " tracer_version" , [&](auto & buffer) { return msgpack::pack_string (buffer, signature_.library_version ); },
140+ " tracer_language" , [&](auto & buffer) { return msgpack::pack_string (buffer, signature_.library_language ); },
141+ " hostname" , [&](auto & buffer) { return msgpack::pack_string (buffer, hostname_.value_or (" " )); },
142+ " service_name" , [&](auto & buffer) { return msgpack::pack_string (buffer, defaults->service ); },
143+ " service_env" , [&](auto & buffer) { return msgpack::pack_string (buffer, defaults->environment ); },
144+ " service_version" , [&](auto & buffer) { return msgpack::pack_string (buffer, defaults->version ); }
145+ );
146+ // clang-format on
147+
148+ if (!metadata_file_->write_then_seal (buffer)) {
149+ logger_->log_error (" Either failed to write or seal the configuration file" );
150+ }
151+ }
152+
113153Span Tracer::create_span () { return create_span (SpanConfig{}); }
114154
115155Span Tracer::create_span (const SpanConfig& config) {
0 commit comments