Merge develop into feature/continuous-profiling#3454
Conversation
The `forge` parameter on the `fall back to timeProvider` test case was never referenced; kotlinc with -Werror failed the build because of the unused-parameter warning. Removing it lets the trace module's unit tests compile cleanly.
…etry Add telemetry to trackResourceHeaders instrumentation
Fix evaluation intake endpoint path Co-authored-by: typotter <[email protected]>
…context-executor Log task names for the observable queue dump in case of context executor usage
…nup-050526 Cleanup in `core` and `internal` modules
…instrumented-tests-execution-on-ci RUM-16161: Add execution of NDK instrumented tests on CI
…ning-java-api-generation-for-non-release-builds-on-ci RUM-15137: Don't run Java API generation task on CI for non-release builds
RUM-16123: Move broadcast-receiver dispatch off the main thread to fix ANRs
…reaming Fix GraphQL errors extraction for streaming responses
[CHORE]Add MAUI source and regenerate apiSurface
…phql-chain-wrapper RUM-15352: Replace GraphQL chain wrapper with request tag
Wires DatadogInterceptor and DatadogEventListener.Factory on a real OkHttpClient against a MockWebServer and asserts the RUM resource event JSON carries the timing breakdown sub-objects (dns / connect / first_byte / download). Covers the integration that unit tests cannot reach: the interceptor and the listener must agree on the ResourceId derived from the request tag for timings to reach the correct resource scope, and concurrent requests to the same URL must remain isolated. Test cases: - single HTTP request populates the full timing breakdown - HTTP >= 400 still produces timings via the early-flush path in responseHeadersEnd - a dropped socket produces a RUM error event (not a resource event) with error.resource populated - five concurrent requests to the same URL each produce an isolated resource event with its own timing breakdown
Co-authored-by: nguyexua <[email protected]>
Pin asserted URLs to the full request URL via mockServer.url(path) rather than checking only that the hostname is present. Deserialize the network-failure error event into a typed ErrorEvent model so field access is type-checked instead of navigating raw JSON. Use executor.execute in the concurrent test since the returned Future was unused and submit silently swallows uncaught exceptions.
…o-APM paths # Conflicts: # integrations/dd-sdk-android-okhttp/src/main/kotlin/com/datadog/android/okhttp/DatadogInterceptor.kt
…ture/release-3.10.0-to-develop # Conflicts: # buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt
…to-develop Merge release `3.10.0` to `develop`
### What does this PR do? - Adds `kotlin.Int.takeIf(kotlin.Function1)` to `detekt_custom_safe_calls.yml` so the `CarrierInfoResolver` UNKNOWN_CARRIER_ID guard does not raise an `UnsafeThirdPartyFunctionCall` warning. - Makes `must_returnCorrectDatadogContext_when_getDatadogContext` assert `carrierName` conditionally on the active connectivity: non-null for cellular networks, null otherwise. ### Motivation Follow-up to RUM-3862: the new carrier-info resolution can populate `carrierName` from `networkOperatorName` on emulators with a simulated SIM, so the previous `isNull()` assertion was no longer reliable. The new safe-call entry replaces the `@Suppress` that would otherwise be needed for the takeIf-based UNKNOWN_CARRIER_ID guard. ### Additional Notes N/A Ref: RUM-3862
RUM-15422: Support addEvent for OTel spans (logging events)
…t-versions Bump `ktlint` and `detekt` versions
Routes Gradle dependency and plugin resolution through Datadog's internal Magic Mirror Depot (depot-read-api-java) when running in GitLab CI, to eliminate HTTP 429 rate-limits from public registries. The change is gated behind two Gradle properties (mavenRepositoryProxy, gradlePluginProxy) that are only set in CI via .gitlab-ci.yml. Local builds with no property set are a strict no-op; the existing public registries (mavenCentral, gradlePluginPortal, google, jitpack) remain as fallbacks in every repositories block. Follows the same approach as DataDog/dd-trace-java#9351, targeting the Magic Mirror Depot URL directly.
…decorator RUM-15138: Add cross-product sampling rebasing for RUM-to-APM correlation
RUM-15510: Resolve dependencies through Magic Mirror Depot in CI
…ception-on-battery-level-query RUM-16089: Catch exception on the battery level query
RUM-3862 Report carrier info on Android API 24+
Add Context.getSystemServiceAs extension Co-authored-by: satween <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 41f21163d2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| val effectiveTraceSampler = if (currentTraceSampler is DeterministicTraceSampler) { | ||
| SessionRebasedSampler(currentTraceSampler) | ||
| } else { |
There was a problem hiding this comment.
Preserve custom deterministic samplers
When callers configure DatadogInterceptor.Builder.setTraceSampler() with a DeterministicTraceSampler instance or subclass, this type check wraps it in SessionRebasedSampler anyway, despite the new setTraceSampler contract saying custom samplers should not be rebased. In an active RUM session with a sample rate below 100%, SessionRebasedSampler.sample() can bypass the caller's sampler by constructing a fresh DeterministicTraceSampler(effectiveRate), so custom sampling decisions are changed for those requests; the same pattern appears in ApmNetworkInstrumentationConfiguration for headerPropagationOnly.
Useful? React with 👍 / 👎.
What does this PR do?
Merge develop into feature/continuous-profiling
Review checklist (to be filled by reviewers)