diff --git a/build/cmake/FindLibdatadog.cmake b/build/cmake/FindLibdatadog.cmake index 45becc3b92f1..2a96950b3231 100644 --- a/build/cmake/FindLibdatadog.cmake +++ b/build/cmake/FindLibdatadog.cmake @@ -4,22 +4,22 @@ endif() include(FetchContent) -set(LIBDATADOG_VERSION "v10.0.0" CACHE STRING "libdatadog version") +set(LIBDATADOG_VERSION "v13.0.0" CACHE STRING "libdatadog version") if (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "61249c5a2a3c4c80e6f54a24251b5035a49123b1664d28cc21645fa8c7271432" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "13a0e9966f2174ea17b1203f4174c9dae36c482d522c31e67bca3283efd0b550" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "14df33b816e12533b95bad64ae0df049bb1fce6b4dc0fe7df4add6ce3ce531e7" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "84f2006f2b00b018979f1e74f628cb8043413c1e20d19d610f95fceb7e14a8c1" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz) endif() else() if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "7c5dcf51fec39c7fc0cfca47ee1788630e15682f0a5f9580e94518163300f221" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "2d7a1926772a9079facfdbfe096881910f2053fe08e59189a6fed89e2b3f4c4d" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "ec3a8582f8be34edd3b9b89aed7d0642645b41f8e7c9d5b4d1d6ecdcaa8f31f0" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "c0e94fcff4f8129a8e9a3c3805791e189c08ee7a64e803086f33dfec2a767b0d" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz) endif() endif() diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Linux/CrashReportingLinux.cpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Linux/CrashReportingLinux.cpp index 55c13409eeaa..970b007dd3ad 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Linux/CrashReportingLinux.cpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Linux/CrashReportingLinux.cpp @@ -25,6 +25,7 @@ extern "C" { #include "datadog/common.h" #include "datadog/profiling.h" +#include "datadog/crashtracker.h" } CrashReporting* CrashReporting::Create(int32_t pid) @@ -216,9 +217,9 @@ std::vector CrashReportingLinux::GetThreadFrames(int32_t tid, Resolv stackFrame.method = std::string(methodData.symbolName); hasName = true; - auto demangleResult = ddog_demangle(libdatadog::to_char_slice(stackFrame.method), DDOG_PROF_DEMANGLE_OPTIONS_COMPLETE); + auto demangleResult = ddog_crasht_demangle(libdatadog::to_char_slice(stackFrame.method), DDOG_CRASHT_DEMANGLE_OPTIONS_COMPLETE); - if (demangleResult.tag == DDOG_PROF_STRING_WRAPPER_RESULT_OK) + if (demangleResult.tag == DDOG_CRASHT_STRING_WRAPPER_RESULT_OK) { // TODO: There is currently no safe way to free the StringWrapper auto stringWrapper = demangleResult.ok; diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/Datadog.Profiler.Native.Windows.vcxproj b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/Datadog.Profiler.Native.Windows.vcxproj index 3308fec533a0..829fc0c3a059 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/Datadog.Profiler.Native.Windows.vcxproj +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/Datadog.Profiler.Native.Windows.vcxproj @@ -1,6 +1,6 @@ - + Debug @@ -267,6 +267,6 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/packages.config b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/packages.config index 14a9810711ff..5a1c0ff95227 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/packages.config +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native.Windows/packages.config @@ -1,4 +1,4 @@  - - + + \ No newline at end of file diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/AgentProxy.hpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/AgentProxy.hpp index 9467e14afedd..26e08eb9576a 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/AgentProxy.hpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/AgentProxy.hpp @@ -158,8 +158,7 @@ class AgentProxy _exporter.get(), start, end, to_compress_files_view, uncompressed_files_view, static_cast(*tags._impl), - endpoints_stats, pMetadata, pInfo, - 10000); + endpoints_stats, pMetadata, pInfo); if (requestResult.tag == DDOG_PROF_EXPORTER_REQUEST_BUILD_RESULT_ERR) { diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.cpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.cpp index 9f893aa75fb1..4f220c6f0cd4 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.cpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.cpp @@ -5,6 +5,7 @@ #include "unknwn.h" #include "FfiHelper.h" +#include "ScopeFinalizer.h" #include #include @@ -12,6 +13,7 @@ extern "C" { #include "datadog/common.h" #include "datadog/profiling.h" +#include "datadog/crashtracker.h" } extern "C" IUnknown * STDMETHODCALLTYPE CreateCrashReport(int32_t pid) @@ -37,14 +39,14 @@ CrashReporting::~CrashReporting() ddog_Error_drop(&_error.value()); } - ddog_crashinfo_drop(&_crashInfo); + ddog_crasht_CrashInfo_drop(&_crashInfo); } int32_t CrashReporting::Initialize() { - auto crashInfoResult = ddog_crashinfo_new(); + auto crashInfoResult = ddog_crasht_CrashInfo_new(); - if (crashInfoResult.tag == DDOG_PROF_CRASH_INFO_NEW_RESULT_ERR) + if (crashInfoResult.tag == DDOG_CRASHT_CRASH_INFO_NEW_RESULT_ERR) { SetLastError(crashInfoResult.err); return 1; @@ -52,9 +54,9 @@ int32_t CrashReporting::Initialize() _crashInfo = crashInfoResult.ok; - auto result = ddog_crashinfo_set_timestamp_to_now(&_crashInfo); + auto result = ddog_crasht_CrashInfo_set_timestamp_to_now(&_crashInfo); - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); return 1; @@ -117,9 +119,9 @@ ULONG CrashReporting::Release() int32_t CrashReporting::AddTag(const char* key, const char* value) { - auto result = ddog_crashinfo_add_tag(&_crashInfo, libdatadog::to_char_slice(key), libdatadog::to_char_slice(value)); + auto result = ddog_crasht_CrashInfo_add_tag(&_crashInfo, libdatadog::to_char_slice(key), libdatadog::to_char_slice(value)); - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); return 1; @@ -142,7 +144,7 @@ int32_t CrashReporting::SetSignalInfo(int32_t signal, const char* description) signalInfo = std::string(description); } - ddog_crashinfo_set_siginfo(&_crashInfo, { (uint64_t)signal, libdatadog::to_char_slice(signalInfo) }); + ddog_crasht_CrashInfo_set_siginfo(&_crashInfo, { (uint64_t)signal, libdatadog::to_char_slice(signalInfo) }); return 0; } @@ -159,14 +161,14 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa { auto frames = GetThreadFrames(thread.first, resolveCallback, context); - ddog_prof_Slice_StackFrame stackTrace; + ddog_crasht_Slice_StackFrame stackTrace; auto count = frames.size(); stackTrace.len = count; - auto stackFrames = std::make_unique(count); - auto stackFrameNames = std::make_unique(count); + auto stackFrames = std::make_unique(count); + auto stackFrameNames = std::make_unique(count); auto strings = std::make_unique(count); stackTrace.ptr = stackFrames.get(); @@ -187,10 +189,10 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa strings[i] = frame.method; - stackFrameNames[i] = ddog_prof_StackFrameNames{ - .colno = { DDOG_PROF_OPTION_U32_NONE_U32, 0}, + stackFrameNames[i] = ddog_crasht_StackFrameNames{ + .colno = { DDOG_OPTION_U32_NONE_U32, 0}, .filename = {nullptr, 0}, - .lineno = { DDOG_PROF_OPTION_U32_NONE_U32, 0}, + .lineno = { DDOG_OPTION_U32_NONE_U32, 0}, .name = libdatadog::to_char_slice(strings[i]) }; @@ -199,7 +201,7 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa auto moduleAddress = static_cast(frame.moduleAddress); auto symbolAddress = static_cast(frame.symbolAddress); - stackFrames[i] = ddog_prof_StackFrame{ + stackFrames[i] = ddog_crasht_StackFrame{ .ip = ip, .module_base_address = moduleAddress, .names{ @@ -213,9 +215,9 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa auto threadIdStr = std::to_string(thread.first); - auto result = ddog_crashinfo_set_stacktrace(&_crashInfo, { threadIdStr.c_str(), threadIdStr.length() }, stackTrace); + auto result = ddog_crasht_CrashInfo_set_stacktrace(&_crashInfo, { threadIdStr.c_str(), threadIdStr.length() }, stackTrace); - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); continue; @@ -226,9 +228,9 @@ int32_t CrashReporting::ResolveStacks(int32_t crashingThreadId, ResolveManagedCa if (thread.first == crashingThreadId) { // Setting the default stacktrace - result = ddog_crashinfo_set_stacktrace(&_crashInfo, { nullptr, 0 }, stackTrace); + result = ddog_crasht_CrashInfo_set_stacktrace(&_crashInfo, { nullptr, 0 }, stackTrace); - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); continue; @@ -248,9 +250,9 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library { auto vecTags = ddog_Vec_Tag_new(); - const ddog_prof_CrashtrackerMetadata metadata = { - .profiling_library_name = libdatadog::to_char_slice(libraryName) , - .profiling_library_version = libdatadog::to_char_slice(libraryVersion), + const ddog_crasht_Metadata metadata = { + .library_name = libdatadog::to_char_slice(libraryName) , + .library_version = libdatadog::to_char_slice(libraryVersion), .family = libdatadog::to_char_slice(family), .tags = &vecTags }; @@ -261,11 +263,11 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library ddog_Vec_Tag_push(&vecTags, libdatadog::to_char_slice(tag.key), libdatadog::to_char_slice(tag.value)); } - auto result = ddog_crashinfo_set_metadata(&_crashInfo, metadata); + auto result = ddog_crasht_CrashInfo_set_metadata(&_crashInfo, metadata); ddog_Vec_Tag_drop(vecTags); - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); return 1; @@ -276,31 +278,22 @@ int32_t CrashReporting::SetMetadata(const char* libraryName, const char* library int32_t CrashReporting::Send() { - ddog_prof_CrashtrackerConfiguration config{}; - - config.timeout_secs = 10; - - auto result = ddog_crashinfo_upload_to_endpoint(&_crashInfo, config); - - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) - { - SetLastError(result.err); - return 1; - } - - return 0; + return ExportImpl(nullptr); } int32_t CrashReporting::WriteToFile(const char* url) { - ddog_prof_CrashtrackerConfiguration config{}; + auto endpoint = ddog_endpoint_from_url(libdatadog::to_char_slice(url)); + return ExportImpl(endpoint); +} - config.endpoint = ddog_Endpoint_file(libdatadog::to_char_slice(url)); - config.timeout_secs = 10; +int32_t CrashReporting::ExportImpl(ddog_Endpoint* endpoint) +{ + auto result = ddog_crasht_CrashInfo_upload_to_endpoint(&_crashInfo, endpoint); - auto result = ddog_crashinfo_upload_to_endpoint(&_crashInfo, config); + on_leave { if (endpoint != nullptr) ddog_endpoint_drop(endpoint); }; - if (result.tag == DDOG_PROF_CRASHTRACKER_RESULT_ERR) + if (result.tag == DDOG_CRASHT_RESULT_ERR) { SetLastError(result.err); return 1; diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.h b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.h index 7fd4ed5b7bf7..3f3ff1cc47b6 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.h +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CrashReporting.h @@ -96,12 +96,13 @@ class CrashReporting : public ICrashReporting int32_t _pid; int32_t _signal; std::optional _error; - ddog_prof_CrashInfo _crashInfo; + ddog_crasht_CrashInfo _crashInfo; void SetLastError(ddog_Error error); virtual std::vector> GetThreads() = 0; virtual std::vector GetThreadFrames(int32_t tid, ResolveManagedCallstack resolveManagedCallstack, void* context) = 0; virtual std::string GetSignalInfo(int32_t signal) = 0; private: + int32_t ExportImpl(ddog_Endpoint* endpoint); int32_t _refCount; }; \ No newline at end of file diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/Datadog.Profiler.Native.vcxproj b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/Datadog.Profiler.Native.vcxproj index be2e75e399ac..d1ac45d00950 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/Datadog.Profiler.Native.vcxproj +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/Datadog.Profiler.Native.vcxproj @@ -1,6 +1,6 @@  - + Debug @@ -469,6 +469,6 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/packages.config b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/packages.config index 14a9810711ff..5a1c0ff95227 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/packages.config +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/packages.config @@ -1,4 +1,4 @@  - - + + \ No newline at end of file diff --git a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj index 58a42ff66bd7..7d57d28fa33b 100644 --- a/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj +++ b/profiler/test/Datadog.Profiler.Native.Tests/Datadog.Profiler.Native.Tests.vcxproj @@ -1,6 +1,6 @@  - + Debug @@ -210,6 +210,6 @@ - + \ No newline at end of file diff --git a/profiler/test/Datadog.Profiler.Native.Tests/packages.config b/profiler/test/Datadog.Profiler.Native.Tests/packages.config index 3bdd1f845671..deb4c676ab56 100644 --- a/profiler/test/Datadog.Profiler.Native.Tests/packages.config +++ b/profiler/test/Datadog.Profiler.Native.Tests/packages.config @@ -1,6 +1,6 @@  - + - + \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Tools.dd_dotnet.ArtifactTests/CreatedumpTests.cs b/tracer/test/Datadog.Trace.Tools.dd_dotnet.ArtifactTests/CreatedumpTests.cs index 666edc57eb23..5b69778a652c 100644 --- a/tracer/test/Datadog.Trace.Tools.dd_dotnet.ArtifactTests/CreatedumpTests.cs +++ b/tracer/test/Datadog.Trace.Tools.dd_dotnet.ArtifactTests/CreatedumpTests.cs @@ -514,7 +514,7 @@ public TemporaryFile() public string Path { get; } - public string Url => $"file:/{Path}"; + public string Url => $"file://{Path}"; public string GetContent() => File.ReadAllText(Path);