diff --git a/.github/labeler.yml b/.github/labeler.yml index 40fc27828d..edea24fcfc 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -59,6 +59,6 @@ data-pipeline: crashtracker: - changed-files: - any-glob-to-any-file: [ - 'datadog-crashtracker/**/*', - 'datadog-crashtracker-ffi/**/*', + 'libdd-crashtracker/**/*', + 'libdd-crashtracker-ffi/**/*', ] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de57be0ea8..7e8a0ca81e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,16 +51,16 @@ jobs: - name: "[${{ steps.rust-version.outputs.version}}] cargo build --workspace --exclude builder --verbose" shell: bash run: cargo build --workspace --exclude builder --verbose - - name: "[${{ steps.rust-version.outputs.version}}] cargo nextest run --workspace --features datadog-crashtracker/generate-unit-test-files --exclude builder --profile ci --verbose -E '!test(tracing_integration_tests::)'" + - name: "[${{ steps.rust-version.outputs.version}}] cargo nextest run --workspace --features libdd-crashtracker/generate-unit-test-files --exclude builder --profile ci --verbose -E '!test(tracing_integration_tests::)'" shell: bash # Run doc tests with cargo test and run tests with nextest and generate junit.xml - run: cargo test --workspace --features datadog-crashtracker/generate-unit-test-files --exclude builder --doc --verbose && cargo nextest run --workspace --features datadog-crashtracker/generate-unit-test-files --exclude builder --profile ci --verbose -E '!test(tracing_integration_tests::)' + run: cargo test --workspace --features libdd-crashtracker/generate-unit-test-files --exclude builder --doc --verbose && cargo nextest run --workspace --features libdd-crashtracker/generate-unit-test-files --exclude builder --profile ci --verbose -E '!test(tracing_integration_tests::)' env: RUST_BACKTRACE: full - - name: "[${{ steps.rust-version.outputs.version}}] Tracing integration tests: cargo nextest run --workspace --features datadog-crashtracker/generate-unit-test-files --exclude builder --profile ci --test-threads=1 --verbose -E 'test(tracing_integration_tests::)'" + - name: "[${{ steps.rust-version.outputs.version}}] Tracing integration tests: cargo nextest run --workspace --features libdd-crashtracker/generate-unit-test-files --exclude builder --profile ci --test-threads=1 --verbose -E 'test(tracing_integration_tests::)'" if: runner.os == 'Linux' shell: bash - run: cargo nextest run --workspace --features datadog-crashtracker/generate-unit-test-files --exclude builder --profile ci --test-threads=1 --verbose -E 'test(tracing_integration_tests::)' + run: cargo nextest run --workspace --features libdd-crashtracker/generate-unit-test-files --exclude builder --profile ci --test-threads=1 --verbose -E 'test(tracing_integration_tests::)' env: RUST_BACKTRACE: full - name: "[${{ steps.rust-version.outputs.version}}] RUSTFLAGS=\"-C prefer-dynamic\" cargo nextest run --package test_spawn_from_lib --features prefer-dynamic -E '!test(tracing_integration_tests::)'" @@ -225,8 +225,8 @@ jobs: rust_version: cross-centos7 - run: cargo install cross || true - run: cross build --workspace --target x86_64-unknown-linux-gnu --exclude builder - - run: cross test --workspace --features datadog-crashtracker/generate-unit-test-files --target x86_64-unknown-linux-gnu --exclude builder -- --skip "::single_threaded_tests::" --skip "tracing_integration_tests::" - - run: cross test --workspace --features datadog-crashtracker/generate-unit-test-files --target x86_64-unknown-linux-gnu --exclude builder --exclude bin_tests -- --skip "::tests::" --skip "::api_tests::" --test-threads 1 --skip "tracing_integration_tests::" + - run: cross test --workspace --features libdd-crashtracker/generate-unit-test-files --target x86_64-unknown-linux-gnu --exclude builder -- --skip "::single_threaded_tests::" --skip "tracing_integration_tests::" + - run: cross test --workspace --features libdd-crashtracker/generate-unit-test-files --target x86_64-unknown-linux-gnu --exclude builder --exclude bin_tests -- --skip "::tests::" --skip "::api_tests::" --test-threads 1 --skip "tracing_integration_tests::" ffi_bake: strategy: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fa4b9a1e6c..8e0958868c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ variables: # These are gitlab variables so that it's easier to do a manual deploy # If these are set witih value and description, then it gives you UI elements DOWNSTREAM_BRANCH: - value: "main" + value: "julio/versioning/fix-crashtracker-feature" description: "downstream jobs are triggered on this branch" include: diff --git a/Cargo.lock b/Cargo.lock index f967e54095..cf3cc3eb87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -508,10 +508,10 @@ version = "0.1.0" dependencies = [ "anyhow", "current_platform", - "datadog-crashtracker", "datadog-profiling", "libc", "libdd-common", + "libdd-crashtracker", "nix", "once_cell", "serde_json", @@ -1291,59 +1291,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "datadog-crashtracker" -version = "23.0.0" -dependencies = [ - "anyhow", - "backtrace", - "blazesym", - "cc", - "chrono", - "criterion", - "goblin", - "http", - "libc", - "libdd-common", - "libdd-telemetry", - "nix", - "num-derive", - "num-traits", - "os_info", - "page_size", - "portable-atomic", - "rand 0.8.5", - "schemars", - "serde", - "serde_json", - "symbolic-common", - "symbolic-demangle", - "tempfile", - "thiserror 1.0.68", - "tokio", - "uuid", - "windows 0.59.0", -] - -[[package]] -name = "datadog-crashtracker-ffi" -version = "23.0.0" -dependencies = [ - "anyhow", - "build_common", - "datadog-crashtracker", - "function_name", - "libc", - "libdd-common", - "libdd-common-ffi", - "serde", - "serde_json", - "symbolic-common", - "symbolic-demangle", - "tempfile", - "windows 0.59.0", -] - [[package]] name = "datadog-ffe" version = "0.1.0" @@ -1491,7 +1438,6 @@ version = "23.0.0" dependencies = [ "anyhow", "build_common", - "datadog-crashtracker-ffi", "datadog-profiling", "function_name", "futures", @@ -1500,6 +1446,7 @@ dependencies = [ "libc", "libdd-common", "libdd-common-ffi", + "libdd-crashtracker-ffi", "libdd-data-pipeline-ffi", "libdd-ddsketch-ffi", "libdd-library-config-ffi", @@ -1560,8 +1507,6 @@ dependencies = [ "bincode", "chrono", "console-subscriber", - "datadog-crashtracker", - "datadog-crashtracker-ffi", "datadog-ipc", "datadog-ipc-macros", "datadog-live-debugger", @@ -1575,6 +1520,8 @@ dependencies = [ "libc", "libdd-common", "libdd-common-ffi", + "libdd-crashtracker", + "libdd-crashtracker-ffi", "libdd-data-pipeline", "libdd-dogstatsd-client", "libdd-telemetry", @@ -1610,7 +1557,6 @@ dependencies = [ name = "datadog-sidecar-ffi" version = "0.0.1" dependencies = [ - "datadog-crashtracker-ffi", "datadog-ipc", "datadog-live-debugger", "datadog-remote-config", @@ -1619,6 +1565,7 @@ dependencies = [ "libc", "libdd-common", "libdd-common-ffi", + "libdd-crashtracker-ffi", "libdd-dogstatsd-client", "libdd-telemetry", "libdd-telemetry-ffi", @@ -2901,6 +2848,59 @@ dependencies = [ "serde", ] +[[package]] +name = "libdd-crashtracker" +version = "1.0.0" +dependencies = [ + "anyhow", + "backtrace", + "blazesym", + "cc", + "chrono", + "criterion", + "goblin", + "http", + "libc", + "libdd-common", + "libdd-telemetry", + "nix", + "num-derive", + "num-traits", + "os_info", + "page_size", + "portable-atomic", + "rand 0.8.5", + "schemars", + "serde", + "serde_json", + "symbolic-common", + "symbolic-demangle", + "tempfile", + "thiserror 1.0.68", + "tokio", + "uuid", + "windows 0.59.0", +] + +[[package]] +name = "libdd-crashtracker-ffi" +version = "23.0.0" +dependencies = [ + "anyhow", + "build_common", + "function_name", + "libc", + "libdd-common", + "libdd-common-ffi", + "libdd-crashtracker", + "serde", + "serde_json", + "symbolic-common", + "symbolic-demangle", + "tempfile", + "windows 0.59.0", +] + [[package]] name = "libdd-data-pipeline" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index f49aac2855..c15ac38a67 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,8 +5,8 @@ members = [ "builder", "libdd-alloc", - "datadog-crashtracker", - "datadog-crashtracker-ffi", + "libdd-crashtracker", + "libdd-crashtracker-ffi", "datadog-ffe", "datadog-ffe-ffi", "datadog-ipc", diff --git a/LICENSE-3rdparty.yml b/LICENSE-3rdparty.yml index 3d3069f7c8..069e25a72d 100644 --- a/LICENSE-3rdparty.yml +++ b/LICENSE-3rdparty.yml @@ -1,4 +1,4 @@ -root_name: builder, build_common, tools, libdd-alloc, datadog-crashtracker, libdd-common, libdd-telemetry, libdd-ddsketch, datadog-crashtracker-ffi, libdd-common-ffi, datadog-ffe, datadog-ffe-ffi, datadog-ipc, datadog-ipc-macros, libdd-tinybytes, tarpc, tarpc-plugins, spawn_worker, cc_utils, libdd-library-config, libdd-library-config-ffi, datadog-live-debugger, datadog-live-debugger-ffi, datadog-profiling, libdd-profiling-protobuf, datadog-profiling-ffi, libdd-data-pipeline-ffi, libdd-data-pipeline, libdd-dogstatsd-client, libdd-trace-protobuf, libdd-trace-stats, libdd-trace-utils, libdd-trace-normalization, libdd-log, libdd-ddsketch-ffi, libdd-log-ffi, libdd-telemetry-ffi, symbolizer-ffi, datadog-profiling-replayer, datadog-remote-config, datadog-sidecar, datadog-sidecar-macros, datadog-sidecar-ffi, datadog-trace-obfuscation, datadog-tracer-flare, sidecar_mockgen, test_spawn_from_lib +root_name: builder, build_common, tools, libdd-alloc, libdd-crashtracker, libdd-common, libdd-telemetry, libdd-ddsketch, libdd-crashtracker-ffi, libdd-common-ffi, datadog-ffe, datadog-ffe-ffi, datadog-ipc, datadog-ipc-macros, libdd-tinybytes, tarpc, tarpc-plugins, spawn_worker, cc_utils, libdd-library-config, libdd-library-config-ffi, datadog-live-debugger, datadog-live-debugger-ffi, datadog-profiling, libdd-profiling-protobuf, datadog-profiling-ffi, libdd-data-pipeline-ffi, libdd-data-pipeline, libdd-dogstatsd-client, libdd-trace-protobuf, libdd-trace-stats, libdd-trace-utils, libdd-trace-normalization, libdd-log, libdd-ddsketch-ffi, libdd-log-ffi, libdd-telemetry-ffi, symbolizer-ffi, datadog-profiling-replayer, datadog-remote-config, datadog-sidecar, datadog-sidecar-macros, datadog-sidecar-ffi, datadog-trace-obfuscation, datadog-tracer-flare, sidecar_mockgen, test_spawn_from_lib third_party_libraries: - package_name: addr2line package_version: 0.24.2 @@ -27693,9 +27693,9 @@ third_party_libraries: - package_name: stringmetrics package_version: 2.2.2 repository: https://github.com/pluots/stringmetrics - license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-1949cf8c6b5b557f/stringmetrics-2.2.2/LICENSE) + license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-6f17d22bba15001f/stringmetrics-2.2.2/LICENSE) licenses: - - license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-1949cf8c6b5b557f/stringmetrics-2.2.2/LICENSE) + - license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-6f17d22bba15001f/stringmetrics-2.2.2/LICENSE) text: | Copyright 2022 Trevor Gross diff --git a/benchmark/run_benchmarks_ci.sh b/benchmark/run_benchmarks_ci.sh index 5822f7cce6..f240395260 100755 --- a/benchmark/run_benchmarks_ci.sh +++ b/benchmark/run_benchmarks_ci.sh @@ -22,7 +22,7 @@ pushd "${PROJECT_DIR}" > /dev/null # Run benchmarks message "Running benchmarks" -cargo bench --workspace --features datadog-crashtracker/benchmarking -- --warm-up-time 1 --measurement-time 5 --sample-size=200 +cargo bench --workspace --features libdd-crashtracker/benchmarking -- --warm-up-time 1 --measurement-time 5 --sample-size=200 message "Finished running benchmarks" # Copy the benchmark results to the output directory diff --git a/bin_tests/Cargo.toml b/bin_tests/Cargo.toml index 055e3822fe..4367fdd220 100644 --- a/bin_tests/Cargo.toml +++ b/bin_tests/Cargo.toml @@ -13,7 +13,7 @@ once_cell = "1.18" anyhow = "1.0" current_platform = "0.2.0" datadog-profiling = { path = "../datadog-profiling" } -datadog-crashtracker = { path = "../datadog-crashtracker" } +libdd-crashtracker = { path = "../libdd-crashtracker" } libdd-common = { path = "../libdd-common" } tempfile = "3.3" serde_json = { version = "1.0" } diff --git a/bin_tests/src/bin/crashing_test_app.rs b/bin_tests/src/bin/crashing_test_app.rs index 640ec20437..42802a16c4 100644 --- a/bin_tests/src/bin/crashing_test_app.rs +++ b/bin_tests/src/bin/crashing_test_app.rs @@ -16,10 +16,10 @@ mod unix { use std::env; use std::time::Duration; - use datadog_crashtracker::{ + use libdd_common::{tag, Endpoint}; + use libdd_crashtracker::{ self as crashtracker, CrashtrackerConfiguration, CrashtrackerReceiverConfig, Metadata, }; - use libdd_common::{tag, Endpoint}; const TEST_COLLECTOR_TIMEOUT: Duration = Duration::from_secs(10); diff --git a/bin_tests/src/bin/crashtracker_bin_test.rs b/bin_tests/src/bin/crashtracker_bin_test.rs index 79b86c81e2..8c735224fe 100644 --- a/bin_tests/src/bin/crashtracker_bin_test.rs +++ b/bin_tests/src/bin/crashtracker_bin_test.rs @@ -21,10 +21,10 @@ mod unix { use std::path::Path; use std::time::Duration; - use datadog_crashtracker::{ + use libdd_common::{tag, Endpoint}; + use libdd_crashtracker::{ self as crashtracker, CrashtrackerConfiguration, CrashtrackerReceiverConfig, Metadata, }; - use libdd_common::{tag, Endpoint}; const TEST_COLLECTOR_TIMEOUT: Duration = Duration::from_secs(10); diff --git a/bin_tests/src/bin/crashtracker_receiver.rs b/bin_tests/src/bin/crashtracker_receiver.rs index cc1b8edffb..2470cbda86 100644 --- a/bin_tests/src/bin/crashtracker_receiver.rs +++ b/bin_tests/src/bin/crashtracker_receiver.rs @@ -6,5 +6,5 @@ fn main() {} #[cfg(unix)] fn main() -> anyhow::Result<()> { - datadog_crashtracker::receiver_entry_point_stdin() + libdd_crashtracker::receiver_entry_point_stdin() } diff --git a/bin_tests/src/modes/behavior.rs b/bin_tests/src/modes/behavior.rs index 0672e3e4b9..ce66270643 100644 --- a/bin_tests/src/modes/behavior.rs +++ b/bin_tests/src/modes/behavior.rs @@ -3,7 +3,7 @@ #![cfg(unix)] use anyhow::{Context, Result}; -use datadog_crashtracker::CrashtrackerConfiguration; +use libdd_crashtracker::CrashtrackerConfiguration; use std::fs::OpenOptions; use std::io::Write; use std::path::Path; diff --git a/bin_tests/src/modes/unix/test_000_donothing.rs b/bin_tests/src/modes/unix/test_000_donothing.rs index 2ca99f8fd5..8290819dfd 100644 --- a/bin_tests/src/modes/unix/test_000_donothing.rs +++ b/bin_tests/src/modes/unix/test_000_donothing.rs @@ -5,7 +5,7 @@ // crashtracker in a fairly normal configuration, generates a crash, and then ensures that the // crashtracker has recorded the situation as expected. use crate::modes::behavior::Behavior; -use datadog_crashtracker::CrashtrackerConfiguration; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::Path; pub struct Test; diff --git a/bin_tests/src/modes/unix/test_001_sigpipe.rs b/bin_tests/src/modes/unix/test_001_sigpipe.rs index 84a3494b7d..387c99ec10 100644 --- a/bin_tests/src/modes/unix/test_001_sigpipe.rs +++ b/bin_tests/src/modes/unix/test_001_sigpipe.rs @@ -22,8 +22,8 @@ use crate::modes::behavior::{ set_atomic, trigger_sigpipe, }; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicPtr; diff --git a/bin_tests/src/modes/unix/test_002_sigchld.rs b/bin_tests/src/modes/unix/test_002_sigchld.rs index d0734a32a9..86d9e73252 100644 --- a/bin_tests/src/modes/unix/test_002_sigchld.rs +++ b/bin_tests/src/modes/unix/test_002_sigchld.rs @@ -18,8 +18,8 @@ use crate::modes::behavior::{ set_atomic, }; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicPtr; diff --git a/bin_tests/src/modes/unix/test_003_sigchld_with_exec.rs b/bin_tests/src/modes/unix/test_003_sigchld_with_exec.rs index 0b6641655f..5e5eb6f985 100644 --- a/bin_tests/src/modes/unix/test_003_sigchld_with_exec.rs +++ b/bin_tests/src/modes/unix/test_003_sigchld_with_exec.rs @@ -6,8 +6,8 @@ use crate::modes::behavior::{ removeat_permissive, set_atomic, }; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; use std::sync::atomic::AtomicPtr; diff --git a/bin_tests/src/modes/unix/test_004_donothing_sigstack.rs b/bin_tests/src/modes/unix/test_004_donothing_sigstack.rs index 7b61ba028a..dec76dbb5e 100644 --- a/bin_tests/src/modes/unix/test_004_donothing_sigstack.rs +++ b/bin_tests/src/modes/unix/test_004_donothing_sigstack.rs @@ -1,7 +1,7 @@ // Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/ // SPDX-License-Identifier: Apache-2.0 use crate::modes::behavior::Behavior; -use datadog_crashtracker::CrashtrackerConfiguration; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::Path; // This is a simple baseline test that ensures the crashtracker is capable of running on the normal // stack during a signal (e.g., not using the sigaltstack). Rather than setting any complicated diff --git a/bin_tests/src/modes/unix/test_005_sigpipe_sigstack.rs b/bin_tests/src/modes/unix/test_005_sigpipe_sigstack.rs index 8a8b9f99a7..583aa0afb6 100644 --- a/bin_tests/src/modes/unix/test_005_sigpipe_sigstack.rs +++ b/bin_tests/src/modes/unix/test_005_sigpipe_sigstack.rs @@ -13,8 +13,8 @@ use crate::modes::behavior::{ removeat_permissive, set_atomic, trigger_sigpipe, }; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicPtr; diff --git a/bin_tests/src/modes/unix/test_006_sigchld_sigstack.rs b/bin_tests/src/modes/unix/test_006_sigchld_sigstack.rs index 71cd3498df..de6810bda4 100644 --- a/bin_tests/src/modes/unix/test_006_sigchld_sigstack.rs +++ b/bin_tests/src/modes/unix/test_006_sigchld_sigstack.rs @@ -9,8 +9,8 @@ use crate::modes::behavior::{ removeat_permissive, set_atomic, }; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicPtr; diff --git a/bin_tests/src/modes/unix/test_007_chaining.rs b/bin_tests/src/modes/unix/test_007_chaining.rs index 3fbde23d22..6bc0510f39 100644 --- a/bin_tests/src/modes/unix/test_007_chaining.rs +++ b/bin_tests/src/modes/unix/test_007_chaining.rs @@ -10,8 +10,8 @@ use crate::modes::behavior::Behavior; use crate::modes::behavior::{atom_to_clone, file_append_msg, remove_permissive, set_atomic}; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use nix::sys::signal::{self, SaFlags, SigAction, SigHandler, SigSet}; use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicPtr, Ordering::SeqCst}; diff --git a/bin_tests/src/modes/unix/test_008_fork.rs b/bin_tests/src/modes/unix/test_008_fork.rs index 850c20c4e6..4724d390c1 100644 --- a/bin_tests/src/modes/unix/test_008_fork.rs +++ b/bin_tests/src/modes/unix/test_008_fork.rs @@ -9,7 +9,7 @@ // - Parent waits for the child to exit, then calls _exit // - If the crashtracking data was received, then yay it worked! use crate::modes::behavior::Behavior; -use datadog_crashtracker::{self as crashtracker, CrashtrackerConfiguration}; +use libdd_crashtracker::{self as crashtracker, CrashtrackerConfiguration}; use nix::sys::wait::{waitpid, WaitStatus}; use nix::unistd::Pid; use std::path::Path; diff --git a/bin_tests/src/modes/unix/test_009_prechain_with_abort.rs b/bin_tests/src/modes/unix/test_009_prechain_with_abort.rs index 2dbf1a43fc..1a1d340977 100644 --- a/bin_tests/src/modes/unix/test_009_prechain_with_abort.rs +++ b/bin_tests/src/modes/unix/test_009_prechain_with_abort.rs @@ -16,8 +16,8 @@ // Basically, this test fails if this test's SIGABRT handler fails to trigger use crate::modes::behavior::Behavior; -use datadog_crashtracker::CrashtrackerConfiguration; use libc; +use libdd_crashtracker::CrashtrackerConfiguration; use nix::{ sys::signal::{self, kill, SaFlags, SigAction, SigHandler, SigSet, Signal}, unistd::Pid, diff --git a/bin_tests/src/modes/unix/test_010_runtime_callback_frame.rs b/bin_tests/src/modes/unix/test_010_runtime_callback_frame.rs index 9ac1157638..9a736733f5 100644 --- a/bin_tests/src/modes/unix/test_010_runtime_callback_frame.rs +++ b/bin_tests/src/modes/unix/test_010_runtime_callback_frame.rs @@ -8,7 +8,7 @@ // This test uses frame-by-frame callback to emit structured runtime stack data. use crate::modes::behavior::Behavior; -use datadog_crashtracker::{ +use libdd_crashtracker::{ clear_runtime_callback, register_runtime_frame_callback, CrashtrackerConfiguration, RuntimeStackFrame, }; @@ -84,7 +84,7 @@ unsafe extern "C" fn test_runtime_callback_frame( #[cfg(test)] mod tests { use super::*; - use datadog_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; + use libdd_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; #[test] fn test_runtime_callback_frame_registration() { diff --git a/bin_tests/src/modes/unix/test_011_runtime_callback_string.rs b/bin_tests/src/modes/unix/test_011_runtime_callback_string.rs index 77fa40bda1..fc7a5dd7cd 100644 --- a/bin_tests/src/modes/unix/test_011_runtime_callback_string.rs +++ b/bin_tests/src/modes/unix/test_011_runtime_callback_string.rs @@ -8,7 +8,7 @@ // This test uses stacktrace string callback to emit structured runtime stack data. use crate::modes::behavior::Behavior; -use datadog_crashtracker::{ +use libdd_crashtracker::{ clear_runtime_callback, register_runtime_stacktrace_string_callback, CrashtrackerConfiguration, }; use std::ffi::c_char; @@ -51,7 +51,7 @@ unsafe extern "C" fn test_runtime_callback_string( #[cfg(test)] mod tests { use super::*; - use datadog_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; + use libdd_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; #[test] fn test_runtime_callback_string_registration() { diff --git a/bin_tests/src/modes/unix/test_012_runtime_callback_frame_invalid_utf8.rs b/bin_tests/src/modes/unix/test_012_runtime_callback_frame_invalid_utf8.rs index acc685b4ab..85fef8d3c4 100644 --- a/bin_tests/src/modes/unix/test_012_runtime_callback_frame_invalid_utf8.rs +++ b/bin_tests/src/modes/unix/test_012_runtime_callback_frame_invalid_utf8.rs @@ -8,7 +8,7 @@ // This test uses frame-by-frame callback to emit runtime stack data containing invalid UTF-8. use crate::modes::behavior::Behavior; -use datadog_crashtracker::{ +use libdd_crashtracker::{ clear_runtime_callback, register_runtime_frame_callback, CrashtrackerConfiguration, RuntimeStackFrame, }; @@ -135,7 +135,7 @@ unsafe extern "C" fn test_runtime_callback_frame_with_invalid_utf8( #[cfg(test)] mod tests { use super::*; - use datadog_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; + use libdd_crashtracker::{clear_runtime_callback, is_runtime_callback_registered}; #[test] fn test_runtime_callback_frame_invalid_utf8_registration() { diff --git a/builder/src/crashtracker.rs b/builder/src/crashtracker.rs index d22410a999..45737829e8 100644 --- a/builder/src/crashtracker.rs +++ b/builder/src/crashtracker.rs @@ -26,7 +26,7 @@ impl CrashTracker { datadog_root.push(self.target_dir.as_ref()); let mut crashtracker_dir = project_root(); - crashtracker_dir.push("datadog-crashtracker"); + crashtracker_dir.push("libdd-crashtracker"); let mut config = cmake::Config::new(crashtracker_dir.to_str().unwrap()); let config = config .define("Datadog_ROOT", datadog_root.to_str().unwrap()) diff --git a/datadog-profiling-ffi/Cargo.toml b/datadog-profiling-ffi/Cargo.toml index d5b6a3aa1c..f13b904db9 100644 --- a/datadog-profiling-ffi/Cargo.toml +++ b/datadog-profiling-ffi/Cargo.toml @@ -22,12 +22,12 @@ libdd-telemetry-ffi = ["dep:libdd-telemetry-ffi"] # package_ffi_on_windows needs datadog-log-ffi = ["dep:libdd-log-ffi"] symbolizer = ["symbolizer-ffi"] data-pipeline-ffi = ["dep:libdd-data-pipeline-ffi"] -crashtracker-ffi = ["dep:datadog-crashtracker-ffi"] +crashtracker-ffi = ["dep:libdd-crashtracker-ffi"] # Enables the in-process collection of crash-info -crashtracker-collector = ["crashtracker-ffi", "datadog-crashtracker-ffi/collector"] +crashtracker-collector = ["crashtracker-ffi", "libdd-crashtracker-ffi/collector"] # Enables the use of this library to receiver crash-info from a suitable collector -crashtracker-receiver = ["crashtracker-ffi", "datadog-crashtracker-ffi/receiver"] -demangler = ["crashtracker-ffi", "datadog-crashtracker-ffi/demangler"] +crashtracker-receiver = ["crashtracker-ffi", "libdd-crashtracker-ffi/receiver"] +demangler = ["crashtracker-ffi", "libdd-crashtracker-ffi/demangler"] datadog-library-config-ffi = ["dep:libdd-library-config-ffi"] libdd-common-ffi = ["dep:libdd-common-ffi"] ddsketch-ffi = ["dep:libdd-ddsketch-ffi"] @@ -38,7 +38,7 @@ build_common = { path = "../build-common" } [dependencies] anyhow = "1.0" libdd-data-pipeline-ffi = { path = "../libdd-data-pipeline-ffi", default-features = false, optional = true } -datadog-crashtracker-ffi = { path = "../datadog-crashtracker-ffi", default-features = false, optional = true} +libdd-crashtracker-ffi = { path = "../libdd-crashtracker-ffi", default-features = false, optional = true} libdd-library-config-ffi = { path = "../libdd-library-config-ffi", default-features = false, optional = true } datadog-profiling = { path = "../datadog-profiling" } libdd-common = { path = "../libdd-common" } diff --git a/datadog-profiling-ffi/cbindgen.toml b/datadog-profiling-ffi/cbindgen.toml index fa75e9c87e..7db0428163 100644 --- a/datadog-profiling-ffi/cbindgen.toml +++ b/datadog-profiling-ffi/cbindgen.toml @@ -118,5 +118,4 @@ must_use = "DDOG_CHECK_RETURN" [parse] parse_deps = true -include = ["libdd-common", "libdd-common-ffi", "datadog-profiling", "libdd-profiling-protobuf", "datadog-crashtracker"] - +include = ["libdd-common", "libdd-common-ffi", "datadog-profiling", "libdd-profiling-protobuf", "libdd-crashtracker"] diff --git a/datadog-profiling-ffi/src/lib.rs b/datadog-profiling-ffi/src/lib.rs index f2a75a7d9f..225a95e17a 100644 --- a/datadog-profiling-ffi/src/lib.rs +++ b/datadog-profiling-ffi/src/lib.rs @@ -16,7 +16,7 @@ mod string_storage; // re-export crashtracker ffi #[cfg(feature = "crashtracker-ffi")] -pub use datadog_crashtracker_ffi::*; +pub use libdd_crashtracker_ffi::*; // re-export telemetry ffi #[cfg(feature = "ddtelemetry-ffi")] diff --git a/datadog-sidecar-ffi/Cargo.toml b/datadog-sidecar-ffi/Cargo.toml index 71cf1cc916..f8092f5614 100644 --- a/datadog-sidecar-ffi/Cargo.toml +++ b/datadog-sidecar-ffi/Cargo.toml @@ -29,7 +29,7 @@ rmp-serde = "1.1.1" [target.'cfg(windows)'.dependencies] -datadog-crashtracker-ffi = { path = "../datadog-crashtracker-ffi", features = ["collector", "collector_windows"] } +libdd-crashtracker-ffi = { path = "../libdd-crashtracker-ffi", features = ["collector", "collector_windows"] } [dev-dependencies] http = "1.0" diff --git a/datadog-sidecar-ffi/src/lib.rs b/datadog-sidecar-ffi/src/lib.rs index 75a6ab8b6f..ce1ff1533d 100644 --- a/datadog-sidecar-ffi/src/lib.rs +++ b/datadog-sidecar-ffi/src/lib.rs @@ -10,8 +10,6 @@ pub mod span; use crate::span::TracesBytes; -#[cfg(windows)] -use datadog_crashtracker_ffi::Metadata; use datadog_ipc::platform::{ FileBackedHandle, MappedMem, NamedShmHandle, PlatformHandle, ShmHandle, }; @@ -37,6 +35,8 @@ use libdd_common::tag::Tag; use libdd_common::Endpoint; use libdd_common_ffi::slice::{AsBytes, CharSlice}; use libdd_common_ffi::{self as ffi, MaybeError}; +#[cfg(windows)] +use libdd_crashtracker_ffi::Metadata; use libdd_dogstatsd_client::DogStatsDActionOwned; use libdd_telemetry::{ data::{self, Dependency, Integration}, diff --git a/datadog-sidecar/Cargo.toml b/datadog-sidecar/Cargo.toml index 049d0d01ae..32b0c17e65 100644 --- a/datadog-sidecar/Cargo.toml +++ b/datadog-sidecar/Cargo.toml @@ -24,7 +24,7 @@ libdd-data-pipeline = { path = "../libdd-data-pipeline" } libdd-trace-utils = { path = "../libdd-trace-utils" } datadog-remote-config = { path = "../datadog-remote-config" , features = ["live-debugger"]} datadog-live-debugger = { path = "../datadog-live-debugger" } -datadog-crashtracker = { path = "../datadog-crashtracker" } +libdd-crashtracker = { path = "../libdd-crashtracker" } libdd-dogstatsd-client = { path = "../libdd-dogstatsd-client" } libdd-tinybytes = { path = "../libdd-tinybytes" } @@ -89,7 +89,7 @@ sendfd = { version = "0.4", features = ["tokio"] } [target.'cfg(windows)'.dependencies] libdd-common-ffi = { path = "../libdd-common-ffi", default-features = false } -datadog-crashtracker-ffi = { path = "../datadog-crashtracker-ffi", default-features = false, features = ["collector", "collector_windows"] } +libdd-crashtracker-ffi = { path = "../libdd-crashtracker-ffi", default-features = false, features = ["collector", "collector_windows"] } winapi = { version = "0.3.9", features = ["securitybaseapi", "sddl"] } windows-sys = { version = "0.52.0", features = ["Win32_System_SystemInformation"] } diff --git a/datadog-sidecar/src/entry.rs b/datadog-sidecar/src/entry.rs index 58e2394a86..d0a0fad4fc 100644 --- a/datadog-sidecar/src/entry.rs +++ b/datadog-sidecar/src/entry.rs @@ -3,7 +3,7 @@ use anyhow::Context; #[cfg(unix)] -use datadog_crashtracker; +use libdd_crashtracker; use spawn_worker::{entrypoint, Stdio}; use std::fs::File; use std::future::Future; @@ -75,12 +75,11 @@ where #[cfg(unix)] tokio::spawn(async move { let socket_path = crashtracker_unix_socket_path(); - match datadog_crashtracker::get_receiver_unix_socket( - socket_path.to_str().unwrap_or_default(), - ) { + match libdd_crashtracker::get_receiver_unix_socket(socket_path.to_str().unwrap_or_default()) + { Ok(listener) => loop { if let Err(e) = - datadog_crashtracker::async_receiver_entry_point_unix_listener(&listener).await + libdd_crashtracker::async_receiver_entry_point_unix_listener(&listener).await { tracing::warn!("Got error while receiving crash report: {e}"); } diff --git a/datadog-sidecar/src/unix.rs b/datadog-sidecar/src/unix.rs index 1ec9de7660..61ce695a7f 100644 --- a/datadog-sidecar/src/unix.rs +++ b/datadog-sidecar/src/unix.rs @@ -22,7 +22,7 @@ use tracing::{error, info}; #[cfg(target_os = "linux")] use crate::config::LogMethod; #[cfg(target_os = "linux")] -use datadog_crashtracker::{ +use libdd_crashtracker::{ CrashtrackerConfiguration, CrashtrackerReceiverConfig, Metadata, StacktraceCollection, }; #[cfg(target_os = "linux")] @@ -220,7 +220,7 @@ fn init_crashtracker(dependency_paths: *const *const libc::c_char) -> anyhow::Re LogMethod::Disabled => None, }; - datadog_crashtracker::init( + libdd_crashtracker::init( CrashtrackerConfiguration::new( vec![], true, @@ -256,7 +256,7 @@ fn init_crashtracker(dependency_paths: *const *const libc::c_char) -> anyhow::Re #[no_mangle] pub extern "C" fn ddog_crashtracker_entry_point(_trampoline_data: &TrampolineData) { unsafe { - if let Err(e) = datadog_crashtracker::receiver_entry_point_stdin() { + if let Err(e) = libdd_crashtracker::receiver_entry_point_stdin() { eprintln!("{e}"); libc::exit(1) } diff --git a/datadog-sidecar/src/windows.rs b/datadog-sidecar/src/windows.rs index 855ff0dad7..9080bcfedc 100644 --- a/datadog-sidecar/src/windows.rs +++ b/datadog-sidecar/src/windows.rs @@ -7,11 +7,11 @@ use datadog_ipc::platform::{ named_pipe_name_from_raw_handle, FileBackedHandle, MappedMem, NamedShmHandle, }; -use datadog_crashtracker_ffi::{ddog_crasht_init_windows, Metadata}; use futures::FutureExt; use libdd_common::Endpoint; use libdd_common::MutexExt; use libdd_common_ffi::CharSlice; +use libdd_crashtracker_ffi::{ddog_crasht_init_windows, Metadata}; use manual_future::ManualFuture; use spawn_worker::{write_crashtracking_trampoline, SpawnWorker, Stdio, TrampolineData}; use std::ffi::CStr; diff --git a/docs/RFCs/artifacts/0005-crashtracker-example.json b/docs/RFCs/artifacts/0005-crashtracker-example.json index c66204b035..2654ee0b5c 100644 --- a/docs/RFCs/artifacts/0005-crashtracker-example.json +++ b/docs/RFCs/artifacts/0005-crashtracker-example.json @@ -37,7 +37,7 @@ "symbol_address": "0x100c52a24", "column": 5, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/emitters.rs", - "function": "datadog_crashtracker::collector::emitters::emit_backtrace_by_frames::hffe0893f890cf311", + "function": "libdd_crashtracker::collector::emitters::emit_backtrace_by_frames::hffe0893f890cf311", "line": 34 }, { @@ -46,7 +46,7 @@ "symbol_address": "0x100c53f50", "column": 18, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/emitters.rs", - "function": "datadog_crashtracker::collector::emitters::emit_crashreport::h072d9dec8eb6d587", + "function": "libdd_crashtracker::collector::emitters::emit_crashreport::h072d9dec8eb6d587", "line": 128 }, { @@ -55,7 +55,7 @@ "symbol_address": "0x100d00120", "column": 15, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/crash_handler.rs", - "function": "datadog_crashtracker::collector::crash_handler::handle_posix_signal_impl::ha45884607fab00ab", + "function": "libdd_crashtracker::collector::crash_handler::handle_posix_signal_impl::ha45884607fab00ab", "line": 507 }, { @@ -64,7 +64,7 @@ "symbol_address": "0x100cff9d0", "column": 13, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/crash_handler.rs", - "function": "datadog_crashtracker::collector::crash_handler::handle_posix_sigaction::hfda5a5ec0bcfec82", + "function": "libdd_crashtracker::collector::crash_handler::handle_posix_sigaction::hfda5a5ec0bcfec82", "line": 388 }, { @@ -79,7 +79,7 @@ "symbol_address": "0x100cdfa4c", "column": 5, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/api.rs", - "function": "datadog_crashtracker::collector::api::test_crash::h0310ac857cf5687f", + "function": "libdd_crashtracker::collector::api::test_crash::h0310ac857cf5687f", "line": 157 }, { @@ -88,7 +88,7 @@ "symbol_address": "0x100c81484", "column": 20, "file": "/Users/daniel.schwartznarbonne/go/src/github.com/DataDog/libdatadog/crashtracker/src/collector/api.rs", - "function": "datadog_crashtracker::collector::api::test_crash::{{closure}}::h0b9b36ed20d8a85a", + "function": "libdd_crashtracker::collector::api::test_crash::{{closure}}::h0b9b36ed20d8a85a", "line": 99 }, { @@ -341,4 +341,4 @@ } ], "uuid": "36e6ca52-9aab-46ae-9ba4-caadda7f9fb6" -} \ No newline at end of file +} diff --git a/examples/ffi/crashtracking.c b/examples/ffi/crashtracking.c index 7f95d8d8ca..ba4d22b88a 100644 --- a/examples/ffi/crashtracking.c +++ b/examples/ffi/crashtracking.c @@ -152,7 +152,7 @@ int main(int argc, char **argv) { "/Users/daniel.schwartznarbonne/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.71/src/backtrace/mod.rs", "lineno": 66, "name": -"trace_unsynchronized>" +"trace_unsynchronized>" }, { "colno": 5, diff --git a/datadog-crashtracker-ffi/Cargo.toml b/libdd-crashtracker-ffi/Cargo.toml similarity index 94% rename from datadog-crashtracker-ffi/Cargo.toml rename to libdd-crashtracker-ffi/Cargo.toml index 6670641afc..2af19d68b1 100644 --- a/datadog-crashtracker-ffi/Cargo.toml +++ b/libdd-crashtracker-ffi/Cargo.toml @@ -2,11 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 [package] -name = "datadog-crashtracker-ffi" +name = "libdd-crashtracker-ffi" edition.workspace = true version.workspace = true rust-version.workspace = true license.workspace = true +publish = false [lib] bench = false @@ -36,7 +37,7 @@ build_common = { path = "../build-common" } [dependencies] anyhow = "1.0" -datadog-crashtracker = { path = "../datadog-crashtracker" } +libdd-crashtracker = { path = "../libdd-crashtracker" } libdd-common = { path = "../libdd-common" } libdd-common-ffi = { path = "../libdd-common-ffi", default-features = false } symbolic-demangle = { version = "12.8.0", default-features = false, features = ["rust", "cpp", "msvc"], optional = true } diff --git a/libdd-crashtracker-ffi/README.md b/libdd-crashtracker-ffi/README.md new file mode 100644 index 0000000000..2efdf88089 --- /dev/null +++ b/libdd-crashtracker-ffi/README.md @@ -0,0 +1,85 @@ +# libdd-crashtracker-ffi + +C FFI bindings for the libdd-crashtracker library. + +## Overview + +`libdd-crashtracker-ffi` provides C-compatible Foreign Function Interface (FFI) bindings for `libdd-crashtracker`, allowing crash tracking in applications written in C, C++, PHP, Ruby, Python, and other languages. + +## Features + +- **C API**: Complete C bindings for crash tracking +- **Cross-platform**: Windows, Linux, macOS support +- **Signal-safe**: Safe to use in signal handlers +- **cbindgen Headers**: Auto-generated C headers +- **Static and Dynamic**: Available as both `.a` and `.so`/`.dylib`/`.dll` +- **Metadata**: Support for custom tags and metadata +- **Configuration**: Flexible crash tracking configuration + +## API Functions + +The C API provides functions for: +- Initialization and configuration +- Crash tracking setup +- Metadata attachment +- Profiling integration +- Error handling +- Cleanup + +## Example Integration + +### C/C++ + +```c +#include + +int main() { + // Initialize crash tracker + ddog_crashtracker_config_t config = { + // ... configuration ... + }; + + ddog_crashtracker_init(&config); + + // Your application runs... + // Crashes are automatically tracked + + ddog_crashtracker_shutdown(); + return 0; +} +``` + +### Build Integration + +```bash +# Using pkg-config +gcc myapp.c $(pkg-config --cflags --libs datadog_crashtracker) -o myapp + +# Or link directly +gcc myapp.c -ldatadog_crashtracker -o myapp +``` + +## Library Files + +- **Header**: `include/datadog/crashtracker.h` +- **Static**: `libdatadog_crashtracker.a` +- **Dynamic**: `libdatadog_crashtracker.so` (Linux), `.dylib` (macOS), `.dll` (Windows) + +## Platform-Specific Notes + +### Linux +- Uses signal handlers for crash detection +- Requires `blazesym` for symbolication + +### Windows +- Uses SEH (Structured Exception Handling) +- Includes Windows-specific exception handling + +### macOS +- Signal-based crash detection +- Supports both x86_64 and aarch64 + +## Safety + +The crash tracker is designed to be signal-safe and can safely operate in crash conditions when memory may be corrupted. + diff --git a/datadog-crashtracker-ffi/build.rs b/libdd-crashtracker-ffi/build.rs similarity index 100% rename from datadog-crashtracker-ffi/build.rs rename to libdd-crashtracker-ffi/build.rs diff --git a/datadog-crashtracker-ffi/cbindgen.toml b/libdd-crashtracker-ffi/cbindgen.toml similarity index 96% rename from datadog-crashtracker-ffi/cbindgen.toml rename to libdd-crashtracker-ffi/cbindgen.toml index 3004630391..50cba8f0ad 100644 --- a/datadog-crashtracker-ffi/cbindgen.toml +++ b/libdd-crashtracker-ffi/cbindgen.toml @@ -70,5 +70,4 @@ must_use = "DDOG_CHECK_RETURN" [parse] parse_deps = true -include = ["libdd-common", "libdd-common-ffi", "datadog-crashtracker", "ux"] - +include = ["libdd-common", "libdd-common-ffi", "libdd-crashtracker", "ux"] diff --git a/datadog-crashtracker-ffi/src/collector/additional_tags.rs b/libdd-crashtracker-ffi/src/collector/additional_tags.rs similarity index 87% rename from datadog-crashtracker-ffi/src/collector/additional_tags.rs rename to libdd-crashtracker-ffi/src/collector/additional_tags.rs index 3bda2cc88e..44105bfa9c 100644 --- a/datadog-crashtracker-ffi/src/collector/additional_tags.rs +++ b/libdd-crashtracker-ffi/src/collector/additional_tags.rs @@ -17,7 +17,7 @@ use libdd_common_ffi::{ #[must_use] #[named] pub unsafe extern "C" fn ddog_crasht_clear_additional_tags() -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::clear_additional_tags()? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::clear_additional_tags()? }) } #[no_mangle] @@ -34,7 +34,7 @@ pub unsafe extern "C" fn ddog_crasht_clear_additional_tags() -> VoidResult { /// # Safety /// The string argument must be valid. pub unsafe extern "C" fn ddog_crasht_insert_additional_tag(s: CharSlice) -> Result { - wrap_with_ffi_result!({ datadog_crashtracker::insert_additional_tag(s.to_string()) }) + wrap_with_ffi_result!({ libdd_crashtracker::insert_additional_tag(s.to_string()) }) } #[no_mangle] @@ -52,6 +52,6 @@ pub unsafe extern "C" fn ddog_crasht_insert_additional_tag(s: CharSlice) -> Resu /// No safety concerns. pub unsafe extern "C" fn ddog_crasht_remove_additional_tag(idx: usize) -> VoidResult { wrap_with_void_ffi_result!({ - datadog_crashtracker::remove_additional_tag(idx)?; + libdd_crashtracker::remove_additional_tag(idx)?; }) } diff --git a/datadog-crashtracker-ffi/src/collector/counters.rs b/libdd-crashtracker-ffi/src/collector/counters.rs similarity index 85% rename from datadog-crashtracker-ffi/src/collector/counters.rs rename to libdd-crashtracker-ffi/src/collector/counters.rs index bfddb0a46d..701366f7d9 100644 --- a/datadog-crashtracker-ffi/src/collector/counters.rs +++ b/libdd-crashtracker-ffi/src/collector/counters.rs @@ -17,7 +17,7 @@ use libdd_common_ffi::{wrap_with_void_ffi_result, VoidResult}; #[must_use] #[named] pub unsafe extern "C" fn ddog_crasht_reset_counters() -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::reset_counters()? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::reset_counters()? }) } #[no_mangle] @@ -29,7 +29,7 @@ pub unsafe extern "C" fn ddog_crasht_reset_counters() -> VoidResult { /// # Safety /// No safety concerns. pub unsafe extern "C" fn ddog_crasht_begin_op(op: OpTypes) -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::begin_op(op)? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::begin_op(op)? }) } #[no_mangle] @@ -41,5 +41,5 @@ pub unsafe extern "C" fn ddog_crasht_begin_op(op: OpTypes) -> VoidResult { /// # Safety /// No safety concerns. pub unsafe extern "C" fn ddog_crasht_end_op(op: OpTypes) -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::end_op(op)? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::end_op(op)? }) } diff --git a/datadog-crashtracker-ffi/src/collector/datatypes.rs b/libdd-crashtracker-ffi/src/collector/datatypes.rs similarity index 92% rename from datadog-crashtracker-ffi/src/collector/datatypes.rs rename to libdd-crashtracker-ffi/src/collector/datatypes.rs index 3931fde6d4..8d6509c826 100644 --- a/datadog-crashtracker-ffi/src/collector/datatypes.rs +++ b/libdd-crashtracker-ffi/src/collector/datatypes.rs @@ -1,10 +1,10 @@ // Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/ // SPDX-License-Identifier: Apache-2.0 -pub use datadog_crashtracker::{OpTypes, StacktraceCollection}; use libdd_common::Endpoint; use libdd_common_ffi::slice::{AsBytes, CharSlice}; use libdd_common_ffi::{Error, Slice}; +pub use libdd_crashtracker::{OpTypes, StacktraceCollection}; use std::time::Duration; #[repr(C)] @@ -24,7 +24,7 @@ pub struct ReceiverConfig<'a> { pub optional_stdout_filename: CharSlice<'a>, } -impl<'a> TryFrom> for datadog_crashtracker::CrashtrackerReceiverConfig { +impl<'a> TryFrom> for libdd_crashtracker::CrashtrackerReceiverConfig { type Error = anyhow::Error; fn try_from(value: ReceiverConfig<'a>) -> anyhow::Result { let args = { @@ -70,7 +70,7 @@ pub struct Config<'a> { pub signals: Slice<'a, i32>, /// Timeout in milliseconds before the signal handler starts tearing things down to return. /// If 0, uses the default timeout as specified in - /// `datadog_crashtracker::shared::constants::DD_CRASHTRACK_DEFAULT_TIMEOUT`. Otherwise, uses + /// `libdd_crashtracker::shared::constants::DD_CRASHTRACK_DEFAULT_TIMEOUT`. Otherwise, uses /// the specified timeout value. /// This is given as a uint32_t, but the actual timeout needs to fit inside of an i32 (max /// 2^31-1). This is a limitation of the various interfaces used to guarantee the timeout. @@ -78,7 +78,7 @@ pub struct Config<'a> { pub use_alt_stack: bool, } -impl<'a> TryFrom> for datadog_crashtracker::CrashtrackerConfiguration { +impl<'a> TryFrom> for libdd_crashtracker::CrashtrackerConfiguration { type Error = anyhow::Error; fn try_from(value: Config<'a>) -> anyhow::Result { let additional_files = { diff --git a/datadog-crashtracker-ffi/src/collector/mod.rs b/libdd-crashtracker-ffi/src/collector/mod.rs similarity index 94% rename from datadog-crashtracker-ffi/src/collector/mod.rs rename to libdd-crashtracker-ffi/src/collector/mod.rs index 462d1cdd81..9cde708105 100644 --- a/datadog-crashtracker-ffi/src/collector/mod.rs +++ b/libdd-crashtracker-ffi/src/collector/mod.rs @@ -8,10 +8,10 @@ mod spans; use super::crash_info::Metadata; pub use additional_tags::*; pub use counters::*; -use datadog_crashtracker::{CrashtrackerReceiverConfig, DEFAULT_SYMBOLS}; pub use datatypes::*; use function_name::named; use libdd_common_ffi::{wrap_with_void_ffi_result, Slice, VoidResult}; +use libdd_crashtracker::{CrashtrackerReceiverConfig, DEFAULT_SYMBOLS}; pub use spans::*; #[no_mangle] @@ -28,7 +28,7 @@ pub use spans::*; /// # Atomicity /// This function is atomic and idempotent. Calling it multiple times is allowed. pub unsafe extern "C" fn ddog_crasht_disable() -> VoidResult { - datadog_crashtracker::disable(); + libdd_crashtracker::disable(); VoidResult::Ok } @@ -44,7 +44,7 @@ pub unsafe extern "C" fn ddog_crasht_disable() -> VoidResult { /// # Atomicity /// This function is atomic and idempotent. Calling it multiple times is allowed. pub unsafe extern "C" fn ddog_crasht_enable() -> VoidResult { - datadog_crashtracker::enable(); + libdd_crashtracker::enable(); VoidResult::Ok } @@ -74,7 +74,7 @@ pub unsafe extern "C" fn ddog_crasht_update_on_fork( metadata: Metadata, ) -> VoidResult { wrap_with_void_ffi_result!({ - datadog_crashtracker::on_fork( + libdd_crashtracker::on_fork( config.try_into()?, receiver_config.try_into()?, metadata.try_into()?, @@ -101,7 +101,7 @@ pub unsafe extern "C" fn ddog_crasht_init( metadata: Metadata, ) -> VoidResult { wrap_with_void_ffi_result!({ - datadog_crashtracker::init( + libdd_crashtracker::init( config.try_into()?, receiver_config.try_into()?, metadata.try_into()?, @@ -129,7 +129,7 @@ pub unsafe extern "C" fn ddog_crasht_reconfigure( metadata: Metadata, ) -> VoidResult { wrap_with_void_ffi_result!({ - datadog_crashtracker::reconfigure( + libdd_crashtracker::reconfigure( config.try_into()?, receiver_config.try_into()?, metadata.try_into()?, @@ -164,7 +164,7 @@ pub unsafe extern "C" fn ddog_crasht_init_without_receiver( ); // No receiver, use an empty receiver config - datadog_crashtracker::init( + libdd_crashtracker::init( config.try_into()?, CrashtrackerReceiverConfig::default(), metadata.try_into()?, diff --git a/datadog-crashtracker-ffi/src/collector/spans.rs b/libdd-crashtracker-ffi/src/collector/spans.rs similarity index 94% rename from datadog-crashtracker-ffi/src/collector/spans.rs rename to libdd-crashtracker-ffi/src/collector/spans.rs index 1aad44e51c..255087fb33 100644 --- a/datadog-crashtracker-ffi/src/collector/spans.rs +++ b/libdd-crashtracker-ffi/src/collector/spans.rs @@ -15,7 +15,7 @@ use libdd_common_ffi::{wrap_with_ffi_result, wrap_with_void_ffi_result, Result, #[must_use] #[named] pub unsafe extern "C" fn ddog_crasht_clear_span_ids() -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::clear_spans()? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::clear_spans()? }) } /// Resets all stored traces to 0. @@ -30,7 +30,7 @@ pub unsafe extern "C" fn ddog_crasht_clear_span_ids() -> VoidResult { #[must_use] #[named] pub unsafe extern "C" fn ddog_crasht_clear_trace_ids() -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::clear_traces()? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::clear_traces()? }) } #[no_mangle] @@ -58,7 +58,7 @@ pub unsafe extern "C" fn ddog_crasht_clear_trace_ids() -> VoidResult { pub unsafe extern "C" fn ddog_crasht_insert_trace_id(id_high: u64, id_low: u64) -> Result { wrap_with_ffi_result!({ let id: u128 = ((id_high as u128) << 64) | (id_low as u128); - datadog_crashtracker::insert_trace(id) + libdd_crashtracker::insert_trace(id) }) } @@ -87,7 +87,7 @@ pub unsafe extern "C" fn ddog_crasht_insert_trace_id(id_high: u64, id_low: u64) pub unsafe extern "C" fn ddog_crasht_insert_span_id(id_high: u64, id_low: u64) -> Result { wrap_with_ffi_result!({ let id: u128 = ((id_high as u128) << 64) | (id_low as u128); - datadog_crashtracker::insert_span(id) + libdd_crashtracker::insert_span(id) }) } @@ -121,7 +121,7 @@ pub unsafe extern "C" fn ddog_crasht_remove_span_id( ) -> VoidResult { wrap_with_void_ffi_result!({ let id: u128 = ((id_high as u128) << 64) | (id_low as u128); - datadog_crashtracker::remove_span(id, idx)? + libdd_crashtracker::remove_span(id, idx)? }) } @@ -155,6 +155,6 @@ pub unsafe extern "C" fn ddog_crasht_remove_trace_id( ) -> VoidResult { wrap_with_void_ffi_result!({ let id: u128 = ((id_high as u128) << 64) | (id_low as u128); - datadog_crashtracker::remove_trace(id, idx)? + libdd_crashtracker::remove_trace(id, idx)? }) } diff --git a/datadog-crashtracker-ffi/src/collector_windows/api.rs b/libdd-crashtracker-ffi/src/collector_windows/api.rs similarity index 96% rename from datadog-crashtracker-ffi/src/collector_windows/api.rs rename to libdd-crashtracker-ffi/src/collector_windows/api.rs index 8138a9f7f7..e7e3148955 100644 --- a/datadog-crashtracker-ffi/src/collector_windows/api.rs +++ b/libdd-crashtracker-ffi/src/collector_windows/api.rs @@ -31,7 +31,7 @@ pub extern "C" fn ddog_crasht_init_windows( metadata: Metadata, ) -> bool { let result: Result<(), _> = (|| { - datadog_crashtracker::init_crashtracking_windows( + libdd_crashtracker::init_crashtracking_windows( module.try_to_string()?, endpoint, metadata.try_into()?, @@ -102,7 +102,7 @@ pub extern "C" fn OutOfProcessExceptionEventCallback( let process_handle = unsafe { (*exception_information).hProcess }; let thread_handle = unsafe { (*exception_information).hThread }; - datadog_crashtracker::exception_event_callback( + libdd_crashtracker::exception_event_callback( context as usize, process_handle, thread_handle, diff --git a/datadog-crashtracker-ffi/src/collector_windows/mod.rs b/libdd-crashtracker-ffi/src/collector_windows/mod.rs similarity index 100% rename from datadog-crashtracker-ffi/src/collector_windows/mod.rs rename to libdd-crashtracker-ffi/src/collector_windows/mod.rs diff --git a/datadog-crashtracker-ffi/src/crash_info/api.rs b/libdd-crashtracker-ffi/src/crash_info/api.rs similarity index 98% rename from datadog-crashtracker-ffi/src/crash_info/api.rs rename to libdd-crashtracker-ffi/src/crash_info/api.rs index a52d2df85f..31beb894c4 100644 --- a/datadog-crashtracker-ffi/src/crash_info/api.rs +++ b/libdd-crashtracker-ffi/src/crash_info/api.rs @@ -1,10 +1,10 @@ // Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/ // SPDX-License-Identifier: Apache-2.0 -use datadog_crashtracker::CrashInfo; use function_name::named; use libdd_common::Endpoint; use libdd_common_ffi::{wrap_with_void_ffi_result, Handle, ToInner, VoidResult}; +use libdd_crashtracker::CrashInfo; /// # Safety /// The `crash_info` can be null, but if non-null it must point to a Builder made by this module, diff --git a/datadog-crashtracker-ffi/src/crash_info/builder.rs b/libdd-crashtracker-ffi/src/crash_info/builder.rs similarity index 99% rename from datadog-crashtracker-ffi/src/crash_info/builder.rs rename to libdd-crashtracker-ffi/src/crash_info/builder.rs index 273dd20d1b..0db45c2b5a 100644 --- a/datadog-crashtracker-ffi/src/crash_info/builder.rs +++ b/libdd-crashtracker-ffi/src/crash_info/builder.rs @@ -2,13 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 use super::{Metadata, OsInfo, ProcInfo, SigInfo, Span, ThreadData}; -use ::function_name::named; -use datadog_crashtracker::{CrashInfo, CrashInfoBuilder, ErrorKind, StackTrace}; +use function_name::named; use libdd_common::Endpoint; use libdd_common_ffi::{ slice::AsBytes, wrap_with_ffi_result, wrap_with_void_ffi_result, CharSlice, Error, Handle, Slice, Timespec, ToInner, VoidResult, }; +use libdd_crashtracker::{CrashInfo, CrashInfoBuilder, ErrorKind, StackTrace}; //////////////////////////////////////////////////////////////////////////////////////////////////// // FFI API // diff --git a/datadog-crashtracker-ffi/src/crash_info/metadata.rs b/libdd-crashtracker-ffi/src/crash_info/metadata.rs similarity index 93% rename from datadog-crashtracker-ffi/src/crash_info/metadata.rs rename to libdd-crashtracker-ffi/src/crash_info/metadata.rs index 44864c7606..7b7e9ca623 100644 --- a/datadog-crashtracker-ffi/src/crash_info/metadata.rs +++ b/libdd-crashtracker-ffi/src/crash_info/metadata.rs @@ -13,7 +13,7 @@ pub struct Metadata<'a> { pub tags: Option<&'a libdd_common_ffi::Vec>, } -impl<'a> TryFrom> for datadog_crashtracker::Metadata { +impl<'a> TryFrom> for libdd_crashtracker::Metadata { type Error = anyhow::Error; fn try_from(value: Metadata<'a>) -> anyhow::Result { let library_name = value.library_name.try_to_string()?; diff --git a/datadog-crashtracker-ffi/src/crash_info/mod.rs b/libdd-crashtracker-ffi/src/crash_info/mod.rs similarity index 100% rename from datadog-crashtracker-ffi/src/crash_info/mod.rs rename to libdd-crashtracker-ffi/src/crash_info/mod.rs diff --git a/datadog-crashtracker-ffi/src/crash_info/os_info.rs b/libdd-crashtracker-ffi/src/crash_info/os_info.rs similarity index 94% rename from datadog-crashtracker-ffi/src/crash_info/os_info.rs rename to libdd-crashtracker-ffi/src/crash_info/os_info.rs index dbd96e0eed..e6975810fb 100644 --- a/datadog-crashtracker-ffi/src/crash_info/os_info.rs +++ b/libdd-crashtracker-ffi/src/crash_info/os_info.rs @@ -11,7 +11,7 @@ pub struct OsInfo<'a> { pub version: CharSlice<'a>, } -impl<'a> TryFrom> for datadog_crashtracker::OsInfo { +impl<'a> TryFrom> for libdd_crashtracker::OsInfo { type Error = anyhow::Error; fn try_from(value: OsInfo<'a>) -> anyhow::Result { let unknown = || "unknown".to_string(); diff --git a/datadog-crashtracker-ffi/src/crash_info/proc_info.rs b/libdd-crashtracker-ffi/src/crash_info/proc_info.rs similarity index 82% rename from datadog-crashtracker-ffi/src/crash_info/proc_info.rs rename to libdd-crashtracker-ffi/src/crash_info/proc_info.rs index 993b92e3f8..33f654d593 100644 --- a/datadog-crashtracker-ffi/src/crash_info/proc_info.rs +++ b/libdd-crashtracker-ffi/src/crash_info/proc_info.rs @@ -6,7 +6,7 @@ pub struct ProcInfo { pid: u32, } -impl TryFrom for datadog_crashtracker::ProcInfo { +impl TryFrom for libdd_crashtracker::ProcInfo { type Error = anyhow::Error; fn try_from(value: ProcInfo) -> anyhow::Result { Ok(Self { pid: value.pid }) diff --git a/datadog-crashtracker-ffi/src/crash_info/sig_info.rs b/libdd-crashtracker-ffi/src/crash_info/sig_info.rs similarity index 86% rename from datadog-crashtracker-ffi/src/crash_info/sig_info.rs rename to libdd-crashtracker-ffi/src/crash_info/sig_info.rs index b031ecb2f1..9c5b00712d 100644 --- a/datadog-crashtracker-ffi/src/crash_info/sig_info.rs +++ b/libdd-crashtracker-ffi/src/crash_info/sig_info.rs @@ -1,8 +1,8 @@ // Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/ // SPDX-License-Identifier: Apache-2.0 -use datadog_crashtracker::{SiCodes, SignalNames}; use libdd_common_ffi::{slice::AsBytes, CharSlice}; +use libdd_crashtracker::{SiCodes, SignalNames}; #[repr(C)] pub struct SigInfo<'a> { @@ -13,7 +13,7 @@ pub struct SigInfo<'a> { pub signo_human_readable: SignalNames, } -impl<'a> TryFrom> for datadog_crashtracker::SigInfo { +impl<'a> TryFrom> for libdd_crashtracker::SigInfo { type Error = anyhow::Error; fn try_from(value: SigInfo<'a>) -> anyhow::Result { Ok(Self { diff --git a/datadog-crashtracker-ffi/src/crash_info/span.rs b/libdd-crashtracker-ffi/src/crash_info/span.rs similarity index 90% rename from datadog-crashtracker-ffi/src/crash_info/span.rs rename to libdd-crashtracker-ffi/src/crash_info/span.rs index 2d4e41f0cb..560195a273 100644 --- a/datadog-crashtracker-ffi/src/crash_info/span.rs +++ b/libdd-crashtracker-ffi/src/crash_info/span.rs @@ -9,7 +9,7 @@ pub struct Span<'a> { pub thread_name: CharSlice<'a>, } -impl<'a> TryFrom> for datadog_crashtracker::Span { +impl<'a> TryFrom> for libdd_crashtracker::Span { type Error = anyhow::Error; fn try_from(value: Span<'a>) -> anyhow::Result { Ok(Self { diff --git a/datadog-crashtracker-ffi/src/crash_info/stackframe.rs b/libdd-crashtracker-ffi/src/crash_info/stackframe.rs similarity index 99% rename from datadog-crashtracker-ffi/src/crash_info/stackframe.rs rename to libdd-crashtracker-ffi/src/crash_info/stackframe.rs index 73c6551c68..6725842d8a 100644 --- a/datadog-crashtracker-ffi/src/crash_info/stackframe.rs +++ b/libdd-crashtracker-ffi/src/crash_info/stackframe.rs @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 use ::function_name::named; -use datadog_crashtracker::{BuildIdType, FileType, StackFrame}; use libdd_common_ffi::{ slice::AsBytes, utils::ToHexStr, wrap_with_void_ffi_result, CharSlice, Error, Handle, ToInner, VoidResult, }; +use libdd_crashtracker::{BuildIdType, FileType, StackFrame}; //////////////////////////////////////////////////////////////////////////////////////////////////// // FFI API // diff --git a/datadog-crashtracker-ffi/src/crash_info/stacktrace.rs b/libdd-crashtracker-ffi/src/crash_info/stacktrace.rs similarity index 97% rename from datadog-crashtracker-ffi/src/crash_info/stacktrace.rs rename to libdd-crashtracker-ffi/src/crash_info/stacktrace.rs index c8d472f14f..4e0c314502 100644 --- a/datadog-crashtracker-ffi/src/crash_info/stacktrace.rs +++ b/libdd-crashtracker-ffi/src/crash_info/stacktrace.rs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 use ::function_name::named; -use datadog_crashtracker::{StackFrame, StackTrace}; use libdd_common_ffi::{wrap_with_void_ffi_result, Error, Handle, ToInner, VoidResult}; +use libdd_crashtracker::{StackFrame, StackTrace}; //////////////////////////////////////////////////////////////////////////////////////////////////// // FFI API // diff --git a/datadog-crashtracker-ffi/src/crash_info/thread_data.rs b/libdd-crashtracker-ffi/src/crash_info/thread_data.rs similarity index 89% rename from datadog-crashtracker-ffi/src/crash_info/thread_data.rs rename to libdd-crashtracker-ffi/src/crash_info/thread_data.rs index 12b220b8f8..c70850154d 100644 --- a/datadog-crashtracker-ffi/src/crash_info/thread_data.rs +++ b/libdd-crashtracker-ffi/src/crash_info/thread_data.rs @@ -4,7 +4,7 @@ use anyhow::Context; use libdd_common_ffi::{slice::AsBytes, CharSlice, Handle, ToInner}; -use datadog_crashtracker::StackTrace; +use libdd_crashtracker::StackTrace; #[repr(C)] pub struct ThreadData<'a> { @@ -14,7 +14,7 @@ pub struct ThreadData<'a> { pub state: CharSlice<'a>, } -impl<'a> TryFrom> for datadog_crashtracker::ThreadData { +impl<'a> TryFrom> for libdd_crashtracker::ThreadData { type Error = anyhow::Error; fn try_from(mut value: ThreadData<'a>) -> anyhow::Result { let crashed = value.crashed; diff --git a/datadog-crashtracker-ffi/src/demangler/datatypes.rs b/libdd-crashtracker-ffi/src/demangler/datatypes.rs similarity index 100% rename from datadog-crashtracker-ffi/src/demangler/datatypes.rs rename to libdd-crashtracker-ffi/src/demangler/datatypes.rs diff --git a/datadog-crashtracker-ffi/src/demangler/mod.rs b/libdd-crashtracker-ffi/src/demangler/mod.rs similarity index 100% rename from datadog-crashtracker-ffi/src/demangler/mod.rs rename to libdd-crashtracker-ffi/src/demangler/mod.rs diff --git a/datadog-crashtracker-ffi/src/lib.rs b/libdd-crashtracker-ffi/src/lib.rs similarity index 100% rename from datadog-crashtracker-ffi/src/lib.rs rename to libdd-crashtracker-ffi/src/lib.rs diff --git a/datadog-crashtracker-ffi/src/receiver.rs b/libdd-crashtracker-ffi/src/receiver.rs similarity index 79% rename from datadog-crashtracker-ffi/src/receiver.rs rename to libdd-crashtracker-ffi/src/receiver.rs index 75243eb095..a0b4594d2e 100644 --- a/datadog-crashtracker-ffi/src/receiver.rs +++ b/libdd-crashtracker-ffi/src/receiver.rs @@ -13,11 +13,11 @@ use libdd_common_ffi::{slice::AsBytes, wrap_with_void_ffi_result, CharSlice, Voi /// signal handler is dangerous, so we fork a sidecar to do the stuff we aren't /// allowed to do in the handler. /// -/// See comments in [datadog-crashtracker/lib.rs] for a full architecture description. +/// See comments in [libdd-crashtracker/lib.rs] for a full architecture description. /// # Safety /// No safety concerns pub unsafe extern "C" fn ddog_crasht_receiver_entry_point_stdin() -> VoidResult { - wrap_with_void_ffi_result!({ datadog_crashtracker::receiver_entry_point_stdin()? }) + wrap_with_void_ffi_result!({ libdd_crashtracker::receiver_entry_point_stdin()? }) } #[no_mangle] @@ -30,7 +30,7 @@ pub unsafe extern "C" fn ddog_crasht_receiver_entry_point_stdin() -> VoidResult /// signal handler is dangerous, so we fork a sidecar to do the stuff we aren't /// allowed to do in the handler. /// -/// See comments in [datadog-crashtracker/lib.rs] for a full architecture +/// See comments in [libdd-crashtracker/lib.rs] for a full architecture /// description. /// # Safety /// No safety concerns @@ -38,6 +38,6 @@ pub unsafe extern "C" fn ddog_crasht_receiver_entry_point_unix_socket( socket_path: CharSlice, ) -> VoidResult { wrap_with_void_ffi_result!({ - datadog_crashtracker::receiver_entry_point_unix_socket(socket_path.try_to_utf8()?)? + libdd_crashtracker::receiver_entry_point_unix_socket(socket_path.try_to_utf8()?)? }) } diff --git a/datadog-crashtracker-ffi/src/runtime_callback.rs b/libdd-crashtracker-ffi/src/runtime_callback.rs similarity index 99% rename from datadog-crashtracker-ffi/src/runtime_callback.rs rename to libdd-crashtracker-ffi/src/runtime_callback.rs index 3ebcb7e7f3..f53f47e7c1 100644 --- a/datadog-crashtracker-ffi/src/runtime_callback.rs +++ b/libdd-crashtracker-ffi/src/runtime_callback.rs @@ -6,7 +6,7 @@ //! This module provides C-compatible FFI bindings for registering runtime-specific //! crash callbacks that can provide stack traces for dynamic languages. #[cfg(unix)] -use datadog_crashtracker::{ +use libdd_crashtracker::{ get_registered_callback_type_ptr, is_runtime_callback_registered, register_runtime_frame_callback, register_runtime_stacktrace_string_callback, CallbackError, RuntimeStackFrame as CoreRuntimeStackFrame, RuntimeStacktraceStringCallback, @@ -191,7 +191,7 @@ pub unsafe extern "C" fn ddog_crasht_get_registered_callback_type() -> *const st #[cfg(all(test, unix))] mod tests { use super::*; - use datadog_crashtracker::clear_runtime_callback; + use libdd_crashtracker::clear_runtime_callback; use std::sync::Mutex; // So we don't have race conditions with global static variable diff --git a/datadog-crashtracker-ffi/tests/collector_windows_test.rs b/libdd-crashtracker-ffi/tests/collector_windows_test.rs similarity index 100% rename from datadog-crashtracker-ffi/tests/collector_windows_test.rs rename to libdd-crashtracker-ffi/tests/collector_windows_test.rs diff --git a/datadog-crashtracker-ffi/tests/test_app/src/main.rs b/libdd-crashtracker-ffi/tests/test_app/src/main.rs similarity index 92% rename from datadog-crashtracker-ffi/tests/test_app/src/main.rs rename to libdd-crashtracker-ffi/tests/test_app/src/main.rs index de245d0f27..80fe79814e 100644 --- a/datadog-crashtracker-ffi/tests/test_app/src/main.rs +++ b/libdd-crashtracker-ffi/tests/test_app/src/main.rs @@ -24,7 +24,7 @@ fn main() { // Get the directory of the current exe let exe_path = std::env::current_exe().unwrap(); let exe_dir = exe_path.parent().unwrap(); - let lib_path = exe_dir.join("datadog_crashtracker_ffi.dll"); + let lib_path = exe_dir.join("libdd_crashtracker_ffi.dll"); init_crashtracking(crash_path, lib_path.to_str().unwrap()); @@ -37,9 +37,9 @@ fn main() { #[cfg(windows)] fn init_crashtracking(crash_path: &str, module_name: &str) -> bool { - use datadog_crashtracker_ffi::Metadata; use libdd_common::Endpoint; use libdd_common_ffi::CharSlice; + use libdd_crashtracker_ffi::Metadata; use std::path::Path; use windows::Win32::System::Diagnostics::Debug::{SetErrorMode, THREAD_ERROR_MODE}; @@ -66,7 +66,7 @@ fn init_crashtracking(crash_path: &str, module_name: &str) -> bool { }; let module_name_str = module_name; - datadog_crashtracker_ffi::ddog_crasht_init_windows( + libdd_crashtracker_ffi::ddog_crasht_init_windows( CharSlice::from(module_name_str), Some(&endpoint), metadata, diff --git a/datadog-crashtracker/CMakeLists.txt b/libdd-crashtracker/CMakeLists.txt similarity index 100% rename from datadog-crashtracker/CMakeLists.txt rename to libdd-crashtracker/CMakeLists.txt diff --git a/datadog-crashtracker/Cargo.toml b/libdd-crashtracker/Cargo.toml similarity index 92% rename from datadog-crashtracker/Cargo.toml rename to libdd-crashtracker/Cargo.toml index 0cc5d34823..796712bc44 100644 --- a/datadog-crashtracker/Cargo.toml +++ b/libdd-crashtracker/Cargo.toml @@ -1,9 +1,10 @@ [package] -name = "datadog-crashtracker" -authors = ["Daniel Schwartz-Narbonne "] +name = "libdd-crashtracker" description = "Detects program crashes and reports them to datadog backend." +homepage = "https://github.com/DataDog/libdatadog/tree/main/libdd-crashtracker" +repository = "https://github.com/DataDog/libdatadog/tree/main/libdd-crashtracker" edition.workspace = true -version.workspace = true +version = "1.0.0" rust-version.workspace = true license.workspace = true autobenches = false diff --git a/libdd-crashtracker/README.md b/libdd-crashtracker/README.md new file mode 100644 index 0000000000..742db44210 --- /dev/null +++ b/libdd-crashtracker/README.md @@ -0,0 +1,58 @@ +# libdd-crashtracker + +Crash detection and reporting library for Datadog APM. + +## Overview + +`libdd-crashtracker` detects program crashes and generates detailed crash reports with stack traces, metadata, and system information, then sends them to the Datadog backend. + +## Features + +- **Crash Detection**: Catches segfaults, uncaught exceptions, and abnormal terminations +- **Stack Traces**: Captures stack traces with symbol resolution +- **Signal Handling**: Handles Unix signals (SIGSEGV, SIGABRT, SIGBUS, etc.) +- **Windows Support**: SEH (Structured Exception Handling) on Windows +- **Metadata Collection**: Gathers crash context, environment, and tags +- **Async Reporting**: Non-blocking crash report transmission +- **Symbolication**: Symbol resolution using blazesym +- **Telemetry Integration**: Reports crashes via Datadog telemetry +- **Receiver Binary**: Standalone crash receiver process + +## Architecture + +The crashtracker uses a two-process architecture: +1. **Collector** (in-process): Detects crashes and collects information +2. **Receiver** (separate process): Processes crash data and sends reports + +This ensures crash reports are sent even if the main process is corrupted. + +## Features Flags + +- `collector` (default): Enable in-process crash collection +- `receiver` (default): Enable crash receiver functionality +- `collector_windows` (default): Windows crash collection +- `benchmarking`: Enable benchmark functionality + +## Example Usage + +```rust +use libdd_crashtracker; + +// Initialize crash tracker +// let config = CrashTrackerConfig::new(...); +// crashtracker::init(config)?; + +// Your application runs... +// Crashes are automatically detected and reported +``` + +## Platform Support + +- **Linux**: Signal-based crash detection with blazesym symbolication +- **macOS**: Signal-based crash detection +- **Windows**: SEH-based crash detection + +## Receiver Binary + +The crate includes a `crashtracker-receiver` binary that runs as a separate process to ensure crash reports are sent even when the main process crashes. + diff --git a/datadog-crashtracker/benches/main.rs b/libdd-crashtracker/benches/main.rs similarity index 100% rename from datadog-crashtracker/benches/main.rs rename to libdd-crashtracker/benches/main.rs diff --git a/datadog-crashtracker/benches/receiver_bench.rs b/libdd-crashtracker/benches/receiver_bench.rs similarity index 98% rename from datadog-crashtracker/benches/receiver_bench.rs rename to libdd-crashtracker/benches/receiver_bench.rs index 66a2c41d74..9fea5f6a42 100644 --- a/datadog-crashtracker/benches/receiver_bench.rs +++ b/libdd-crashtracker/benches/receiver_bench.rs @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; -use datadog_crashtracker::benchmark::receiver_entry_point; -use datadog_crashtracker::shared::constants::*; -use datadog_crashtracker::{ +use libdd_crashtracker::benchmark::receiver_entry_point; +use libdd_crashtracker::shared::constants::*; +use libdd_crashtracker::{ default_signals, get_data_folder_path, CrashtrackerConfiguration, SharedLibrary, StacktraceCollection, }; diff --git a/datadog-crashtracker/build.rs b/libdd-crashtracker/build.rs similarity index 100% rename from datadog-crashtracker/build.rs rename to libdd-crashtracker/build.rs diff --git a/datadog-crashtracker/data/libtest.c b/libdd-crashtracker/data/libtest.c similarity index 100% rename from datadog-crashtracker/data/libtest.c rename to libdd-crashtracker/data/libtest.c diff --git a/datadog-crashtracker/data/libtest_cpp.cpp b/libdd-crashtracker/data/libtest_cpp.cpp similarity index 100% rename from datadog-crashtracker/data/libtest_cpp.cpp rename to libdd-crashtracker/data/libtest_cpp.cpp diff --git a/datadog-crashtracker/libdatadog-crashtracking-receiver.c b/libdd-crashtracker/libdatadog-crashtracking-receiver.c similarity index 100% rename from datadog-crashtracker/libdatadog-crashtracking-receiver.c rename to libdd-crashtracker/libdatadog-crashtracking-receiver.c diff --git a/datadog-crashtracker/src/README.md b/libdd-crashtracker/src/README.md similarity index 100% rename from datadog-crashtracker/src/README.md rename to libdd-crashtracker/src/README.md diff --git a/datadog-crashtracker/src/bin/crashtracker_receiver.rs b/libdd-crashtracker/src/bin/crashtracker_receiver.rs similarity index 77% rename from datadog-crashtracker/src/bin/crashtracker_receiver.rs rename to libdd-crashtracker/src/bin/crashtracker_receiver.rs index cc1b8edffb..2470cbda86 100644 --- a/datadog-crashtracker/src/bin/crashtracker_receiver.rs +++ b/libdd-crashtracker/src/bin/crashtracker_receiver.rs @@ -6,5 +6,5 @@ fn main() {} #[cfg(unix)] fn main() -> anyhow::Result<()> { - datadog_crashtracker::receiver_entry_point_stdin() + libdd_crashtracker::receiver_entry_point_stdin() } diff --git a/datadog-crashtracker/src/collector/additional_tags.rs b/libdd-crashtracker/src/collector/additional_tags.rs similarity index 100% rename from datadog-crashtracker/src/collector/additional_tags.rs rename to libdd-crashtracker/src/collector/additional_tags.rs diff --git a/datadog-crashtracker/src/collector/api.rs b/libdd-crashtracker/src/collector/api.rs similarity index 100% rename from datadog-crashtracker/src/collector/api.rs rename to libdd-crashtracker/src/collector/api.rs diff --git a/datadog-crashtracker/src/collector/atomic_set.rs b/libdd-crashtracker/src/collector/atomic_set.rs similarity index 100% rename from datadog-crashtracker/src/collector/atomic_set.rs rename to libdd-crashtracker/src/collector/atomic_set.rs diff --git a/datadog-crashtracker/src/collector/collector_manager.rs b/libdd-crashtracker/src/collector/collector_manager.rs similarity index 100% rename from datadog-crashtracker/src/collector/collector_manager.rs rename to libdd-crashtracker/src/collector/collector_manager.rs diff --git a/datadog-crashtracker/src/collector/counters.rs b/libdd-crashtracker/src/collector/counters.rs similarity index 100% rename from datadog-crashtracker/src/collector/counters.rs rename to libdd-crashtracker/src/collector/counters.rs diff --git a/datadog-crashtracker/src/collector/crash_handler.rs b/libdd-crashtracker/src/collector/crash_handler.rs similarity index 100% rename from datadog-crashtracker/src/collector/crash_handler.rs rename to libdd-crashtracker/src/collector/crash_handler.rs diff --git a/datadog-crashtracker/src/collector/emitters.rs b/libdd-crashtracker/src/collector/emitters.rs similarity index 100% rename from datadog-crashtracker/src/collector/emitters.rs rename to libdd-crashtracker/src/collector/emitters.rs diff --git a/datadog-crashtracker/src/collector/mod.rs b/libdd-crashtracker/src/collector/mod.rs similarity index 100% rename from datadog-crashtracker/src/collector/mod.rs rename to libdd-crashtracker/src/collector/mod.rs diff --git a/datadog-crashtracker/src/collector/process_handle.rs b/libdd-crashtracker/src/collector/process_handle.rs similarity index 100% rename from datadog-crashtracker/src/collector/process_handle.rs rename to libdd-crashtracker/src/collector/process_handle.rs diff --git a/datadog-crashtracker/src/collector/receiver_manager.rs b/libdd-crashtracker/src/collector/receiver_manager.rs similarity index 100% rename from datadog-crashtracker/src/collector/receiver_manager.rs rename to libdd-crashtracker/src/collector/receiver_manager.rs diff --git a/datadog-crashtracker/src/collector/saguard.rs b/libdd-crashtracker/src/collector/saguard.rs similarity index 100% rename from datadog-crashtracker/src/collector/saguard.rs rename to libdd-crashtracker/src/collector/saguard.rs diff --git a/datadog-crashtracker/src/collector/signal_handler_manager.rs b/libdd-crashtracker/src/collector/signal_handler_manager.rs similarity index 100% rename from datadog-crashtracker/src/collector/signal_handler_manager.rs rename to libdd-crashtracker/src/collector/signal_handler_manager.rs diff --git a/datadog-crashtracker/src/collector/spans.rs b/libdd-crashtracker/src/collector/spans.rs similarity index 100% rename from datadog-crashtracker/src/collector/spans.rs rename to libdd-crashtracker/src/collector/spans.rs diff --git a/datadog-crashtracker/src/collector_windows/api.rs b/libdd-crashtracker/src/collector_windows/api.rs similarity index 100% rename from datadog-crashtracker/src/collector_windows/api.rs rename to libdd-crashtracker/src/collector_windows/api.rs diff --git a/datadog-crashtracker/src/collector_windows/mod.rs b/libdd-crashtracker/src/collector_windows/mod.rs similarity index 100% rename from datadog-crashtracker/src/collector_windows/mod.rs rename to libdd-crashtracker/src/collector_windows/mod.rs diff --git a/datadog-crashtracker/src/common.rs b/libdd-crashtracker/src/common.rs similarity index 100% rename from datadog-crashtracker/src/common.rs rename to libdd-crashtracker/src/common.rs diff --git a/datadog-crashtracker/src/crash_info/builder.rs b/libdd-crashtracker/src/crash_info/builder.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/builder.rs rename to libdd-crashtracker/src/crash_info/builder.rs diff --git a/datadog-crashtracker/src/crash_info/emit_sicodes.c b/libdd-crashtracker/src/crash_info/emit_sicodes.c similarity index 100% rename from datadog-crashtracker/src/crash_info/emit_sicodes.c rename to libdd-crashtracker/src/crash_info/emit_sicodes.c diff --git a/datadog-crashtracker/src/crash_info/error_data.rs b/libdd-crashtracker/src/crash_info/error_data.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/error_data.rs rename to libdd-crashtracker/src/crash_info/error_data.rs diff --git a/datadog-crashtracker/src/crash_info/experimental.rs b/libdd-crashtracker/src/crash_info/experimental.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/experimental.rs rename to libdd-crashtracker/src/crash_info/experimental.rs diff --git a/datadog-crashtracker/src/crash_info/metadata.rs b/libdd-crashtracker/src/crash_info/metadata.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/metadata.rs rename to libdd-crashtracker/src/crash_info/metadata.rs diff --git a/datadog-crashtracker/src/crash_info/mod.rs b/libdd-crashtracker/src/crash_info/mod.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/mod.rs rename to libdd-crashtracker/src/crash_info/mod.rs diff --git a/datadog-crashtracker/src/crash_info/os_info.rs b/libdd-crashtracker/src/crash_info/os_info.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/os_info.rs rename to libdd-crashtracker/src/crash_info/os_info.rs diff --git a/datadog-crashtracker/src/crash_info/proc_info.rs b/libdd-crashtracker/src/crash_info/proc_info.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/proc_info.rs rename to libdd-crashtracker/src/crash_info/proc_info.rs diff --git a/datadog-crashtracker/src/crash_info/sig_info.rs b/libdd-crashtracker/src/crash_info/sig_info.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/sig_info.rs rename to libdd-crashtracker/src/crash_info/sig_info.rs diff --git a/datadog-crashtracker/src/crash_info/spans.rs b/libdd-crashtracker/src/crash_info/spans.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/spans.rs rename to libdd-crashtracker/src/crash_info/spans.rs diff --git a/datadog-crashtracker/src/crash_info/stacktrace.rs b/libdd-crashtracker/src/crash_info/stacktrace.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/stacktrace.rs rename to libdd-crashtracker/src/crash_info/stacktrace.rs diff --git a/datadog-crashtracker/src/crash_info/telemetry.rs b/libdd-crashtracker/src/crash_info/telemetry.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/telemetry.rs rename to libdd-crashtracker/src/crash_info/telemetry.rs diff --git a/datadog-crashtracker/src/crash_info/test_utils.rs b/libdd-crashtracker/src/crash_info/test_utils.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/test_utils.rs rename to libdd-crashtracker/src/crash_info/test_utils.rs diff --git a/datadog-crashtracker/src/crash_info/unknown_value.rs b/libdd-crashtracker/src/crash_info/unknown_value.rs similarity index 100% rename from datadog-crashtracker/src/crash_info/unknown_value.rs rename to libdd-crashtracker/src/crash_info/unknown_value.rs diff --git a/datadog-crashtracker/src/lib.rs b/libdd-crashtracker/src/lib.rs similarity index 100% rename from datadog-crashtracker/src/lib.rs rename to libdd-crashtracker/src/lib.rs diff --git a/datadog-crashtracker/src/receiver/benchmark.rs b/libdd-crashtracker/src/receiver/benchmark.rs similarity index 100% rename from datadog-crashtracker/src/receiver/benchmark.rs rename to libdd-crashtracker/src/receiver/benchmark.rs diff --git a/datadog-crashtracker/src/receiver/entry_points.rs b/libdd-crashtracker/src/receiver/entry_points.rs similarity index 98% rename from datadog-crashtracker/src/receiver/entry_points.rs rename to libdd-crashtracker/src/receiver/entry_points.rs index 0147d81443..5ed5f27e44 100644 --- a/datadog-crashtracker/src/receiver/entry_points.rs +++ b/libdd-crashtracker/src/receiver/entry_points.rs @@ -92,7 +92,7 @@ pub fn get_receiver_unix_socket(socket_path: impl AsRef) -> anyhow::Result< /// signal handler is dangerous, so we fork a sidecar to do the stuff we aren't /// allowed to do in the handler. /// -/// See comments in [datadog-crashtracker/lib.rs] for a full architecture +/// See comments in [libdd-crashtracker/lib.rs] for a full architecture /// description. pub(crate) async fn receiver_entry_point( timeout: Duration, diff --git a/datadog-crashtracker/src/receiver/mod.rs b/libdd-crashtracker/src/receiver/mod.rs similarity index 100% rename from datadog-crashtracker/src/receiver/mod.rs rename to libdd-crashtracker/src/receiver/mod.rs diff --git a/datadog-crashtracker/src/receiver/receive_report.rs b/libdd-crashtracker/src/receiver/receive_report.rs similarity index 100% rename from datadog-crashtracker/src/receiver/receive_report.rs rename to libdd-crashtracker/src/receiver/receive_report.rs diff --git a/datadog-crashtracker/src/runtime_callback.rs b/libdd-crashtracker/src/runtime_callback.rs similarity index 100% rename from datadog-crashtracker/src/runtime_callback.rs rename to libdd-crashtracker/src/runtime_callback.rs diff --git a/datadog-crashtracker/src/shared/configuration.rs b/libdd-crashtracker/src/shared/configuration.rs similarity index 100% rename from datadog-crashtracker/src/shared/configuration.rs rename to libdd-crashtracker/src/shared/configuration.rs diff --git a/datadog-crashtracker/src/shared/constants.rs b/libdd-crashtracker/src/shared/constants.rs similarity index 100% rename from datadog-crashtracker/src/shared/constants.rs rename to libdd-crashtracker/src/shared/constants.rs diff --git a/datadog-crashtracker/src/shared/mod.rs b/libdd-crashtracker/src/shared/mod.rs similarity index 100% rename from datadog-crashtracker/src/shared/mod.rs rename to libdd-crashtracker/src/shared/mod.rs diff --git a/tools/docker/Dockerfile.build b/tools/docker/Dockerfile.build index afe92efc67..e7d631f797 100644 --- a/tools/docker/Dockerfile.build +++ b/tools/docker/Dockerfile.build @@ -70,8 +70,8 @@ RUN cargo search nothing --limit 1 COPY [ "Cargo.lock", "Cargo.toml", "./"] COPY "libdd-alloc/Cargo.toml" "libdd-alloc/" COPY "build-common/Cargo.toml" "build-common/" -COPY "datadog-crashtracker/Cargo.toml" "datadog-crashtracker/" -COPY "datadog-crashtracker-ffi/Cargo.toml" "datadog-crashtracker-ffi/" +COPY "libdd-crashtracker/Cargo.toml" "libdd-crashtracker/" +COPY "libdd-crashtracker-ffi/Cargo.toml" "libdd-crashtracker-ffi/" COPY "libdd-common/Cargo.toml" "libdd-common/" COPY "libdd-common-ffi/Cargo.toml" "libdd-common-ffi/" COPY "libdd-telemetry/Cargo.toml" "libdd-telemetry/" diff --git a/windows/build-artifacts.ps1 b/windows/build-artifacts.ps1 index 842cd140e3..ada2faea8e 100644 --- a/windows/build-artifacts.ps1 +++ b/windows/build-artifacts.ps1 @@ -58,7 +58,7 @@ Invoke-Call -ScriptBlock { cbindgen --crate libdd-common-ffi --config libdd-comm Invoke-Call -ScriptBlock { cbindgen --crate datadog-profiling-ffi --config datadog-profiling-ffi/cbindgen.toml --output $output_dir\profiling.h } Invoke-Call -ScriptBlock { cbindgen --crate libdd-telemetry-ffi --config libdd-telemetry-ffi/cbindgen.toml --output $output_dir\telemetry.h } Invoke-Call -ScriptBlock { cbindgen --crate libdd-data-pipeline-ffi --config libdd-data-pipeline-ffi/cbindgen.toml --output $output_dir"\data-pipeline.h" } -Invoke-Call -ScriptBlock { cbindgen --crate datadog-crashtracker-ffi --config datadog-crashtracker-ffi/cbindgen.toml --output $output_dir"\crashtracker.h" } +Invoke-Call -ScriptBlock { cbindgen --crate libdd-crashtracker-ffi --config libdd-crashtracker-ffi/cbindgen.toml --output $output_dir"\crashtracker.h" } Invoke-Call -ScriptBlock { cbindgen --crate libdd-library-config-ffi --config libdd-library-config-ffi/cbindgen.toml --output $output_dir"\library-config.h" } Invoke-Call -ScriptBlock { .\target\release\dedup_headers $output_dir"\common.h" $output_dir"\profiling.h" $output_dir"\telemetry.h" $output_dir"\data-pipeline.h" $output_dir"\crashtracker.h" $output_dir"\library-config.h"}