Merge branch 'main' into low-allocation-marshalers-for-json-exporter
This commit is contained in:
commit
eccd941273
|
@ -171,7 +171,7 @@ jobs:
|
|||
- 23
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: graalvm/setup-graalvm@01ed653ac833fe80569f1ef9f25585ba2811baab # v1.3.3
|
||||
- uses: graalvm/setup-graalvm@e1df20a713a4cc6ab5b0eb03f0e0dcdc0199b805 # v1.3.4
|
||||
with:
|
||||
java-version: ${{ matrix.test-graal-version }}
|
||||
distribution: 'graalvm'
|
||||
|
|
|
@ -45,7 +45,7 @@ jobs:
|
|||
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# using "latest" helps to keep up with the latest Kotlin support
|
||||
|
@ -60,6 +60,6 @@ jobs:
|
|||
run: ./gradlew assemble --no-build-cache --no-daemon
|
||||
|
||||
- name: Perform CodeQL analysis
|
||||
uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
|
@ -42,6 +42,6 @@ jobs:
|
|||
# Upload the results to GitHub's code scanning dashboard (optional).
|
||||
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
|
|
@ -133,7 +133,7 @@ jobs:
|
|||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "prior-version=$PRIOR_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
update-apidiff-baseline-to-released-version:
|
||||
update-apidiff-baseline-and-docs-to-released-version:
|
||||
permissions:
|
||||
contents: write # for git push to PR branch
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -187,6 +187,13 @@ jobs:
|
|||
./gradlew --refresh-dependencies japicmp
|
||||
git add docs/apidiffs
|
||||
|
||||
- name: Update versions in README.md
|
||||
env:
|
||||
VERSION: ${{ needs.release.outputs.version }}
|
||||
run: |
|
||||
./gradlew updateVersionInDocs -Prelease.version=$VERSION
|
||||
git add README.md
|
||||
|
||||
- name: Use CLA approved bot
|
||||
run: .github/scripts/use-cla-approved-github-bot.sh
|
||||
|
||||
|
@ -202,9 +209,9 @@ jobs:
|
|||
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
|
||||
GH_TOKEN: ${{ steps.otelbot-token.outputs.token }}
|
||||
run: |
|
||||
message="Update apidiff baseline to released version $VERSION"
|
||||
body="Update apidiff baseline to released version \`$VERSION\`."
|
||||
branch="otelbot/update-apidiff-baseline-to-released-version-${VERSION}"
|
||||
message="Update apidiff baseline and documentation versions to released version $VERSION"
|
||||
body="Update apidiff baseline and documentation versions to released version \`$VERSION\`."
|
||||
branch="otelbot/update-apidiff-baseline-and-documentation-to-released-version-${VERSION}"
|
||||
|
||||
git checkout -b $branch
|
||||
git commit -m "$message"
|
||||
|
|
56
CHANGELOG.md
56
CHANGELOG.md
|
@ -2,6 +2,62 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
## Version 1.52.0 (2025-07-11)
|
||||
|
||||
### API
|
||||
|
||||
#### Common
|
||||
|
||||
* Promote `ComponentLoader` to new `opentelemetry-common` artifact,
|
||||
standardize SPI loading
|
||||
([#7446](https://github.com/open-telemetry/opentelemetry-java/pull/7446))
|
||||
|
||||
#### Context
|
||||
|
||||
* LazyStorage passes its ClassLoader when loading ContextStorageProvider SPI
|
||||
([#7424](https://github.com/open-telemetry/opentelemetry-java/pull/7424))
|
||||
|
||||
#### Incubator
|
||||
|
||||
* Add context and severity params to ExtendedLogger#isEnabled
|
||||
([#7268](https://github.com/open-telemetry/opentelemetry-java/pull/7268))
|
||||
* Add new convenience methods for converting DeclarativeConfigProperties to config model
|
||||
([#7453](https://github.com/open-telemetry/opentelemetry-java/pull/7453))
|
||||
|
||||
### SDK
|
||||
|
||||
* Add custom stacktrace renderer which is length limit aware
|
||||
([#7281](https://github.com/open-telemetry/opentelemetry-java/pull/7281))
|
||||
|
||||
#### Metrics
|
||||
|
||||
* Propagate flush to PeriodicMetricReader's metricExporter.
|
||||
([#7410](https://github.com/open-telemetry/opentelemetry-java/pull/7410))
|
||||
|
||||
#### Exporters
|
||||
|
||||
* OTLP - JdkHttpSender: ensure proper closure of HttpClient in shutdown method
|
||||
([#7390](https://github.com/open-telemetry/opentelemetry-java/pull/7390))
|
||||
* OTLP: profile exporters fix and test improvements
|
||||
([#7442](https://github.com/open-telemetry/opentelemetry-java/pull/7442))
|
||||
* OTLP: Loading Compressor SPI via ComponentLoader configured through setComponentLoader
|
||||
([#7428](https://github.com/open-telemetry/opentelemetry-java/pull/7428))
|
||||
* Prometheus: add scope schema URL and attributes
|
||||
([#7356](https://github.com/open-telemetry/opentelemetry-java/pull/7356))
|
||||
* Prometheus: extend prometheus declarative config support to include without_scope_info,
|
||||
with_resource_constant_labels
|
||||
([#6840](https://github.com/open-telemetry/opentelemetry-java/pull/6840))
|
||||
|
||||
#### Extensions
|
||||
|
||||
* Autoconfigure: fix race condition of `GlobalOpenTelemetry` initialization with
|
||||
`AutoConfiguredOpenTelemetrySdkBuilder`
|
||||
([#7365](https://github.com/open-telemetry/opentelemetry-java/pull/7365))
|
||||
* Declarative config: update to declarative config 1.0-rc.1
|
||||
([#7436](https://github.com/open-telemetry/opentelemetry-java/pull/7436))
|
||||
* Declarative config: resolve environment variable substitution for mixed quotes
|
||||
([#7433](https://github.com/open-telemetry/opentelemetry-java/pull/7433))
|
||||
|
||||
## Version 1.51.0 (2025-06-06)
|
||||
|
||||
### API
|
||||
|
|
73
README.md
73
README.md
|
@ -57,8 +57,8 @@ A bill of materials (or BOM) helps sync dependency versions of related artifacts
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|----------------------------------------------|----------------------------------------|---------------------------|-------------------------------------------------------------|---------|
|
||||
| [Bill of Materials (BOM)](./bom) | Bill of materials for stable artifacts | `opentelemetry-bom` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | N/A |
|
||||
| [Alpha Bill of Materials (BOM)](./bom-alpha) | Bill of materials for alpha artifacts | `opentelemetry-bom-alpha` | <!--VERSION_UNSTABLE-->1.49.0-alpha<!--/VERSION_UNSTABLE--> | N/A |
|
||||
| [Bill of Materials (BOM)](./bom) | Bill of materials for stable artifacts | `opentelemetry-bom` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | N/A |
|
||||
| [Alpha Bill of Materials (BOM)](./bom-alpha) | Bill of materials for alpha artifacts | `opentelemetry-bom-alpha` | <!--VERSION_UNSTABLE-->1.52.0-alpha<!--/VERSION_UNSTABLE--> | N/A |
|
||||
</details>
|
||||
|
||||
<details open>
|
||||
|
@ -68,9 +68,10 @@ The OpenTelemetry API for recording telemetry.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|-----------------------------------|--------------------------------------------------------------------------------------|-------------------------------|-------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [API](./api/all) | OpenTelemetry API, including metrics, traces, baggage, context | `opentelemetry-api` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api) |
|
||||
| [API Incubator](./api/incubator) | API incubator, including pass through propagator, and extended tracer, and Event API | `opentelemetry-api-incubator` | <!--VERSION_UNSTABLE-->1.49.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api-incubator) |
|
||||
| [Context API](./context) | OpenTelemetry context API | `opentelemetry-context` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-context) |
|
||||
| [API](./api/all) | OpenTelemetry API, including metrics, traces, baggage, context | `opentelemetry-api` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api) |
|
||||
| [API Incubator](./api/incubator) | API incubator, including pass through propagator, and extended tracer, and Event API | `opentelemetry-api-incubator` | <!--VERSION_UNSTABLE-->1.52.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api-incubator) |
|
||||
| [Context API](./context) | OpenTelemetry context API | `opentelemetry-context` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-context) |
|
||||
| [Common](./common) | Common utility methods used across API components | `opentelemetry-common` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-common) |
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
@ -80,8 +81,8 @@ Extensions to the OpenTelemetry API.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|---------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [Kotlin Extension](./extensions/kotlin) | Context extension for coroutines | `opentelemetry-extension-kotlin` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-extension-kotlin) |
|
||||
| [Trace Propagators Extension](./extensions/trace-propagators) | Trace propagators, including B3, Jaeger, OT Trace | `opentelemetry-extension-trace-propagators` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-extension-trace-propagators) |
|
||||
| [Kotlin Extension](./extensions/kotlin) | Context extension for coroutines | `opentelemetry-extension-kotlin` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-extension-kotlin) |
|
||||
| [Trace Propagators Extension](./extensions/trace-propagators) | Trace propagators, including B3, Jaeger, OT Trace | `opentelemetry-extension-trace-propagators` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-extension-trace-propagators) |
|
||||
</details>
|
||||
|
||||
<details open>
|
||||
|
@ -91,12 +92,12 @@ The OpenTelemetry SDK for managing telemetry producing by the API.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|------------------------------|--------------------------------------------------------|-----------------------------|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [SDK](./sdk/all) | OpenTelemetry SDK, including metrics, traces, and logs | `opentelemetry-sdk` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk) |
|
||||
| [Metrics SDK](./sdk/metrics) | OpenTelemetry metrics SDK | `opentelemetry-sdk-metrics` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-metrics) |
|
||||
| [Trace SDK](./sdk/trace) | OpenTelemetry trace SDK | `opentelemetry-sdk-trace` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-trace) |
|
||||
| [Log SDK](./sdk/logs) | OpenTelemetry log SDK | `opentelemetry-sdk-logs` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-logs) |
|
||||
| [SDK Common](./sdk/common) | Shared SDK components | `opentelemetry-sdk-common` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-common) |
|
||||
| [SDK Testing](./sdk/testing) | Components for testing OpenTelemetry instrumentation | `opentelemetry-sdk-testing` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-testing) |
|
||||
| [SDK](./sdk/all) | OpenTelemetry SDK, including metrics, traces, and logs | `opentelemetry-sdk` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk) |
|
||||
| [Metrics SDK](./sdk/metrics) | OpenTelemetry metrics SDK | `opentelemetry-sdk-metrics` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-metrics) |
|
||||
| [Trace SDK](./sdk/trace) | OpenTelemetry trace SDK | `opentelemetry-sdk-trace` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-trace) |
|
||||
| [Log SDK](./sdk/logs) | OpenTelemetry log SDK | `opentelemetry-sdk-logs` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-logs) |
|
||||
| [SDK Common](./sdk/common) | Shared SDK components | `opentelemetry-sdk-common` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-common) |
|
||||
| [SDK Testing](./sdk/testing) | Components for testing OpenTelemetry instrumentation | `opentelemetry-sdk-testing` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-testing) |
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
@ -106,16 +107,16 @@ SDK exporters for shipping traces, metrics, and logs out of process.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|-----------------------------------------------------------------------|------------------------------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [OTLP Exporters](./exporters/otlp/all) | OTLP gRPC & HTTP exporters, including traces, metrics, and logs | `opentelemetry-exporter-otlp` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp) |
|
||||
| [OTLP Logging Exporters](./exporters/logging-otlp) | Logging exporters in OTLP JSON encoding, including traces, metrics, and logs | `opentelemetry-exporter-logging-otlp` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-logging-otlp) |
|
||||
| [OTLP Common](./exporters/otlp/common) | Shared OTLP components (internal) | `opentelemetry-exporter-otlp-common` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp-common) |
|
||||
| [Logging Exporter](./exporters/logging) | Logging exporters, including metrics, traces, and logs | `opentelemetry-exporter-logging` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-logging) |
|
||||
| [Zipkin Exporter](./exporters/zipkin) | Zipkin trace exporter | `opentelemetry-exporter-zipkin` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-zipkin) |
|
||||
| [Prometheus Exporter](./exporters/prometheus) | Prometheus metric exporter | `opentelemetry-exporter-prometheus` | <!--VERSION_UNSTABLE-->1.49.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-prometheus) |
|
||||
| [Exporter Common](./exporters/common) | Shared exporter components (internal) | `opentelemetry-exporter-common` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-common) |
|
||||
| [OkHttp Sender](./exporters/sender/okhttp) | OkHttp implementation of HttpSender (internal) | `opentelemetry-exporter-sender-okhttp` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-okhttp) |
|
||||
| [JDK Sender](./exporters/sender/jdk) | Java 11+ native HttpClient implementation of HttpSender (internal) | `opentelemetry-exporter-sender-jdk` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-jdk) | |
|
||||
| [gRPC ManagedChannel Sender](./exporters/sender/grpc-managed-channel) | gRPC ManagedChannel implementation of GrpcSender (internal) | `opentelemetry-exporter-sender-grpc-managed-channel` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-grpc-managed-channel) | |
|
||||
| [OTLP Exporters](./exporters/otlp/all) | OTLP gRPC & HTTP exporters, including traces, metrics, and logs | `opentelemetry-exporter-otlp` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp) |
|
||||
| [OTLP Logging Exporters](./exporters/logging-otlp) | Logging exporters in OTLP JSON encoding, including traces, metrics, and logs | `opentelemetry-exporter-logging-otlp` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-logging-otlp) |
|
||||
| [OTLP Common](./exporters/otlp/common) | Shared OTLP components (internal) | `opentelemetry-exporter-otlp-common` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp-common) |
|
||||
| [Logging Exporter](./exporters/logging) | Logging exporters, including metrics, traces, and logs | `opentelemetry-exporter-logging` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-logging) |
|
||||
| [Zipkin Exporter](./exporters/zipkin) | Zipkin trace exporter | `opentelemetry-exporter-zipkin` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-zipkin) |
|
||||
| [Prometheus Exporter](./exporters/prometheus) | Prometheus metric exporter | `opentelemetry-exporter-prometheus` | <!--VERSION_UNSTABLE-->1.52.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-prometheus) |
|
||||
| [Exporter Common](./exporters/common) | Shared exporter components (internal) | `opentelemetry-exporter-common` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-common) |
|
||||
| [OkHttp Sender](./exporters/sender/okhttp) | OkHttp implementation of HttpSender (internal) | `opentelemetry-exporter-sender-okhttp` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-okhttp) |
|
||||
| [JDK Sender](./exporters/sender/jdk) | Java 11+ native HttpClient implementation of HttpSender (internal) | `opentelemetry-exporter-sender-jdk` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-jdk) | |
|
||||
| [gRPC ManagedChannel Sender](./exporters/sender/grpc-managed-channel) | gRPC ManagedChannel implementation of GrpcSender (internal) | `opentelemetry-exporter-sender-grpc-managed-channel` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-sender-grpc-managed-channel) | |
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
@ -125,10 +126,10 @@ Extensions to the OpenTelemetry SDK.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|-------------------------------------------------------------------------------|------------------------------------------------------------------------------------|-----------------------------------------------------|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [SDK Autoconfigure](./sdk-extensions/autoconfigure) | Autoconfigure OpenTelemetry SDK from env vars, system properties, and SPI | `opentelemetry-sdk-extension-autoconfigure` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure) |
|
||||
| [SDK Autoconfigure SPI](./sdk-extensions/autoconfigure-spi) | Service Provider Interface (SPI) definitions for autoconfigure | `opentelemetry-sdk-extension-autoconfigure-spi` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure-spi) |
|
||||
| [SDK Jaeger Remote Sampler Extension](./sdk-extensions/jaeger-remote-sampler) | Sampler which obtains sampling configuration from remote Jaeger server | `opentelemetry-sdk-extension-jaeger-remote-sampler` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-jaeger-remote-sampler) |
|
||||
| [SDK Incubator](./sdk-extensions/incubator) | SDK incubator, including YAML based view configuration, LeakDetectingSpanProcessor | `opentelemetry-sdk-extension-incubator` | <!--VERSION_UNSTABLE-->1.49.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-incubator) |
|
||||
| [SDK Autoconfigure](./sdk-extensions/autoconfigure) | Autoconfigure OpenTelemetry SDK from env vars, system properties, and SPI | `opentelemetry-sdk-extension-autoconfigure` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure) |
|
||||
| [SDK Autoconfigure SPI](./sdk-extensions/autoconfigure-spi) | Service Provider Interface (SPI) definitions for autoconfigure | `opentelemetry-sdk-extension-autoconfigure-spi` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure-spi) |
|
||||
| [SDK Jaeger Remote Sampler Extension](./sdk-extensions/jaeger-remote-sampler) | Sampler which obtains sampling configuration from remote Jaeger server | `opentelemetry-sdk-extension-jaeger-remote-sampler` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-jaeger-remote-sampler) |
|
||||
| [SDK Incubator](./sdk-extensions/incubator) | SDK incubator, including YAML based view configuration, LeakDetectingSpanProcessor | `opentelemetry-sdk-extension-incubator` | <!--VERSION_UNSTABLE-->1.52.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-incubator) |
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
@ -138,8 +139,8 @@ Shims for bridging data from one observability library to another.
|
|||
|
||||
| Component | Description | Artifact ID | Version | Javadoc |
|
||||
|----------------------------------------|--------------------------------------------------------------|----------------------------------|-------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [OpenCensus Shim](./opencensus-shim) | Bridge opencensus metrics into the OpenTelemetry metrics SDK | `opentelemetry-opencensus-shim` | <!--VERSION_UNSTABLE-->1.49.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-opencensus-shim) |
|
||||
| [OpenTracing Shim](./opentracing-shim) | Bridge opentracing spans into the OpenTelemetry trace API | `opentelemetry-opentracing-shim` | <!--VERSION_STABLE-->1.49.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-opentracing-shim) |
|
||||
| [OpenCensus Shim](./opencensus-shim) | Bridge opencensus metrics into the OpenTelemetry metrics SDK | `opentelemetry-opencensus-shim` | <!--VERSION_UNSTABLE-->1.52.0-alpha<!--/VERSION_UNSTABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-opencensus-shim) |
|
||||
| [OpenTracing Shim](./opentracing-shim) | Bridge opentracing spans into the OpenTelemetry trace API | `opentelemetry-opentracing-shim` | <!--VERSION_STABLE-->1.52.0<!--/VERSION_STABLE--> | [](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-opentracing-shim) |
|
||||
</details>
|
||||
|
||||
## Dependencies
|
||||
|
@ -180,7 +181,7 @@ repositories {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation platform("io.opentelemetry:opentelemetry-bom:1.50.0-SNAPSHOT")
|
||||
implementation platform("io.opentelemetry:opentelemetry-bom:1.53.0-SNAPSHOT")
|
||||
implementation('io.opentelemetry:opentelemetry-api')
|
||||
}
|
||||
```
|
||||
|
@ -202,7 +203,7 @@ dependencies {
|
|||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-bom</artifactId>
|
||||
<version>1.50.0-SNAPSHOT</version>
|
||||
<version>1.53.0-SNAPSHOT</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
@ -254,16 +255,14 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for:
|
|||
* Keys to successful PRs
|
||||
* Guide to using gradle composite builds
|
||||
|
||||
### Code owners
|
||||
|
||||
#### Maintainers
|
||||
### Maintainers
|
||||
|
||||
- [Jack Berg](https://github.com/jack-berg), New Relic
|
||||
- [John Watson](https://github.com/jkwatson), Verta.ai
|
||||
|
||||
For more information about the maintainer role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#maintainer).
|
||||
|
||||
#### Approvers
|
||||
### Approvers
|
||||
|
||||
- [Jason Plumb](https://github.com/breedx-splk), Splunk
|
||||
- [Josh Suereth](https://github.com/jsuereth), Google
|
||||
|
@ -272,13 +271,13 @@ For more information about the maintainer role, see the [community repository](h
|
|||
|
||||
For more information about the approver role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#approver).
|
||||
|
||||
#### Triagers
|
||||
### Triagers
|
||||
|
||||
- [Gregor Zeitlinger](https://github.com/zeitlinger), Grafana Labs
|
||||
|
||||
For more information about the triager role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#triager).
|
||||
|
||||
#### Emeritus
|
||||
### Emeritus
|
||||
|
||||
- Maintainer [Bogdan Drutu](https://github.com/BogdanDrutu)
|
||||
- Maintainer [Carlos Alberto](https://github.com/carlosalberto)
|
||||
|
|
|
@ -57,6 +57,11 @@ and deadlocks.
|
|||
* Review and merge the pull request that it creates for updating the change log in main
|
||||
(note that if this is not a patch release then the change log on main may already be up-to-date,
|
||||
in which case no pull request will be created).
|
||||
* Once the release artifacts become available on Maven Central, the system will automatically
|
||||
generate a new pull request titled `Update apidiff baseline and documentation versions to
|
||||
released version $VERSION`. This pull request will contain updates to both the API diff baseline
|
||||
and version references in the documentation files (README.md). Please review and merge this
|
||||
automated pull request.
|
||||
* The [website](https://github.com/open-telemetry/opentelemetry.io) contains automation to update
|
||||
to the newly released version. Review and approve the pull request when available.
|
||||
* The [website](https://opentelemetry.io/docs/languages/java/configuration/#zero-code-sdk-autoconfigure)
|
||||
|
|
|
@ -28,7 +28,7 @@ class SdkDesignTest {
|
|||
* Ensures that all SDK methods that: - are defined in classes that extend or implement API model
|
||||
* and are public (to exclude protected builders) - are public (avoids issues with protected
|
||||
* methods returning classes unavailable to test's CL) - override or implement parent method
|
||||
* return only API, Context or generic Java type.
|
||||
* return only API, Context, Common, or generic Java type.
|
||||
*/
|
||||
@Test
|
||||
void sdkImplementationOfApiClassesShouldReturnApiTypeOnly() {
|
||||
|
@ -45,7 +45,11 @@ class SdkDesignTest {
|
|||
.and(implementOrOverride())
|
||||
.should()
|
||||
.haveRawReturnType(
|
||||
inPackage("io.opentelemetry.api..", "io.opentelemetry.context..", "java.."))
|
||||
inPackage(
|
||||
"io.opentelemetry.api..",
|
||||
"io.opentelemetry.context..",
|
||||
"io.opentelemetry.common..",
|
||||
"java.."))
|
||||
.orShould()
|
||||
.haveRawReturnType("void");
|
||||
|
||||
|
|
|
@ -122,6 +122,8 @@ public final class GlobalOpenTelemetry {
|
|||
*
|
||||
* <p>This method calls the given {@code supplier} and calls {@link #set(OpenTelemetry)}, all
|
||||
* while holding the {@link GlobalOpenTelemetry} mutex.
|
||||
*
|
||||
* @since 1.52.0
|
||||
*/
|
||||
public static void set(Supplier<OpenTelemetry> supplier) {
|
||||
synchronized (mutex) {
|
||||
|
|
|
@ -12,6 +12,9 @@ otelJava.moduleName.set("io.opentelemetry.api.incubator")
|
|||
dependencies {
|
||||
api(project(":api:all"))
|
||||
|
||||
// Supports optional InstrumentationConfigUtil#convertToModel
|
||||
compileOnly("com.fasterxml.jackson.core:jackson-databind")
|
||||
|
||||
annotationProcessor("com.google.auto.value:auto-value")
|
||||
|
||||
// To use parsed config file as input for InstrumentationConfigUtilTest
|
||||
|
@ -24,3 +27,16 @@ dependencies {
|
|||
|
||||
testImplementation("com.google.guava:guava")
|
||||
}
|
||||
|
||||
testing {
|
||||
suites {
|
||||
register<JvmTestSuite>("testConvertToModel") {
|
||||
dependencies {
|
||||
implementation("com.fasterxml.jackson.core:jackson-databind")
|
||||
implementation(project(":sdk-extensions:incubator"))
|
||||
implementation(project(":sdk-extensions:autoconfigure"))
|
||||
implementation("com.google.guava:guava")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,9 @@ package io.opentelemetry.api.incubator.config;
|
|||
|
||||
import static io.opentelemetry.api.internal.ConfigUtil.defaultIfNull;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -36,6 +38,11 @@ public interface DeclarativeConfigProperties {
|
|||
return EmptyDeclarativeConfigProperties.getInstance();
|
||||
}
|
||||
|
||||
/** Return a map representation of the {@code declarativeConfigProperties}. */
|
||||
static Map<String, Object> toMap(DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return DeclarativeConfigPropertyUtil.toMap(declarativeConfigProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link String} configuration property.
|
||||
*
|
||||
|
@ -222,4 +229,7 @@ public interface DeclarativeConfigProperties {
|
|||
* @return the configuration property keys
|
||||
*/
|
||||
Set<String> getPropertyKeys();
|
||||
|
||||
/** Return a {@link ComponentLoader} that should be used to load SPIs. */
|
||||
ComponentLoader getComponentLoader();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.api.incubator.config;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiFunction;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
final class DeclarativeConfigPropertyUtil {
|
||||
|
||||
private DeclarativeConfigPropertyUtil() {}
|
||||
|
||||
private static final List<BiFunction<String, DeclarativeConfigProperties, Object>>
|
||||
valueResolvers =
|
||||
Arrays.asList(
|
||||
DeclarativeConfigPropertyUtil::getString,
|
||||
DeclarativeConfigPropertyUtil::getBoolean,
|
||||
DeclarativeConfigPropertyUtil::getLong,
|
||||
DeclarativeConfigPropertyUtil::getDouble,
|
||||
DeclarativeConfigPropertyUtil::getStringList,
|
||||
DeclarativeConfigPropertyUtil::getBooleanList,
|
||||
DeclarativeConfigPropertyUtil::getLongList,
|
||||
DeclarativeConfigPropertyUtil::getDoubleList,
|
||||
DeclarativeConfigPropertyUtil::getStringList,
|
||||
DeclarativeConfigPropertyUtil::getStructuredList,
|
||||
DeclarativeConfigPropertyUtil::getStructured);
|
||||
|
||||
static Map<String, Object> toMap(DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
Set<String> propertyKeys = declarativeConfigProperties.getPropertyKeys();
|
||||
Map<String, Object> result = new HashMap<>(propertyKeys.size());
|
||||
for (String key : declarativeConfigProperties.getPropertyKeys()) {
|
||||
result.put(key, resolveValue(key, declarativeConfigProperties));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object resolveValue(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
for (int i = 0; i < valueResolvers.size(); i++) {
|
||||
try {
|
||||
Object value = valueResolvers.get(i).apply(key, declarativeConfigProperties);
|
||||
if (value != null) {
|
||||
return value;
|
||||
}
|
||||
} catch (DeclarativeConfigException e) {
|
||||
// Ignore and continue
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getString(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getString(key);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getBoolean(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getBoolean(key);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getLong(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getLong(key);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getDouble(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getDouble(key);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getStringList(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getScalarList(key, String.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getBooleanList(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getScalarList(key, Boolean.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getLongList(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getScalarList(key, Long.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getDoubleList(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return declarativeConfigProperties.getScalarList(key, Double.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getStructuredList(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return Optional.ofNullable(declarativeConfigProperties.getStructuredList(key))
|
||||
.map(list -> list.stream().map(DeclarativeConfigPropertyUtil::toMap).collect(toList()))
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Object getStructured(
|
||||
String key, DeclarativeConfigProperties declarativeConfigProperties) {
|
||||
return Optional.ofNullable(declarativeConfigProperties.getStructured(key))
|
||||
.map(DeclarativeConfigPropertyUtil::toMap)
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
package io.opentelemetry.api.incubator.config;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -15,6 +16,8 @@ final class EmptyDeclarativeConfigProperties implements DeclarativeConfigPropert
|
|||
|
||||
private static final EmptyDeclarativeConfigProperties INSTANCE =
|
||||
new EmptyDeclarativeConfigProperties();
|
||||
private static final ComponentLoader COMPONENT_LOADER =
|
||||
ComponentLoader.forClassLoader(EmptyDeclarativeConfigProperties.class.getClassLoader());
|
||||
|
||||
private EmptyDeclarativeConfigProperties() {}
|
||||
|
||||
|
@ -74,4 +77,9 @@ final class EmptyDeclarativeConfigProperties implements DeclarativeConfigPropert
|
|||
public Set<String> getPropertyKeys() {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComponentLoader getComponentLoader() {
|
||||
return COMPONENT_LOADER;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
package io.opentelemetry.api.incubator.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -148,4 +149,49 @@ public class InstrumentationConfigUtil {
|
|||
}
|
||||
|
||||
private InstrumentationConfigUtil() {}
|
||||
|
||||
/**
|
||||
* Return {@code .instrumentation.java.<instrumentationName>}, after converting it to the {@code
|
||||
* modelType} using the {@code objectMapper}. If no configuration exists for the {@code
|
||||
* instrumentationName}, returns {@code null}.
|
||||
*
|
||||
* <p>This method is a convenience method for a common instrumentation library workflow:
|
||||
*
|
||||
* <ul>
|
||||
* <li>During initialization, an instrumentation library is given an {@link ConfigProvider} and
|
||||
* must initialize according to the relevant config
|
||||
* <li>It checks if the user has provided configuration for it, and if so...
|
||||
* <li>It converts the configuration to an in-memory model representing all of its relevant
|
||||
* properties
|
||||
* <li>It initializes using the strongly typed in-memory model
|
||||
* </ul>
|
||||
*
|
||||
* <p>Conversion is done using {@link ObjectMapper#convertValue(Object, Class)} from {@code
|
||||
* com.fasterxml.jackson.databind}, and assumes the {@code modelType} is a POJO written /
|
||||
* annotated to support jackson databinding.
|
||||
*
|
||||
* <p>NOTE: callers MUST add their own dependency on {@code
|
||||
* com.fasterxml.jackson.core:jackson-databind}. This module's dependency is {@code compileOnly}
|
||||
* since jackson is a large dependency that many users will not require. It's very possible to
|
||||
* convert between {@link DeclarativeConfigProperties} (or a map representation from {@link
|
||||
* DeclarativeConfigProperties#toMap(DeclarativeConfigProperties)}) and a target model type
|
||||
* without jackson. This method is provided as an optional convenience method.
|
||||
*
|
||||
* @throws IllegalArgumentException if conversion fails. See {@link
|
||||
* ObjectMapper#convertValue(Object, Class)} for details.
|
||||
*/
|
||||
@Nullable
|
||||
public static <T> T getInstrumentationConfigModel(
|
||||
ConfigProvider configProvider,
|
||||
String instrumentationName,
|
||||
ObjectMapper objectMapper,
|
||||
Class<T> modelType) {
|
||||
DeclarativeConfigProperties properties =
|
||||
javaInstrumentationConfig(configProvider, instrumentationName);
|
||||
if (properties == null) {
|
||||
return null;
|
||||
}
|
||||
Map<String, Object> configPropertiesMap = DeclarativeConfigProperties.toMap(properties);
|
||||
return objectMapper.convertValue(configPropertiesMap, modelType);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,11 @@ class ExtendedDefaultLogger implements ExtendedLogger {
|
|||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(Severity severity, Context context) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExtendedLogRecordBuilder logRecordBuilder() {
|
||||
return NOOP_LOG_RECORD_BUILDER;
|
||||
|
|
|
@ -6,21 +6,41 @@
|
|||
package io.opentelemetry.api.incubator.logs;
|
||||
|
||||
import io.opentelemetry.api.logs.Logger;
|
||||
import io.opentelemetry.api.logs.Severity;
|
||||
import io.opentelemetry.context.Context;
|
||||
|
||||
/** Extended {@link Logger} with experimental APIs. */
|
||||
public interface ExtendedLogger extends Logger {
|
||||
|
||||
/**
|
||||
* Returns {@code true} if the logger is enabled.
|
||||
* Returns {@code true} if the logger is enabled for the given {@code context} and {@code
|
||||
* severity}.
|
||||
*
|
||||
* <p>This allows callers to avoid unnecessary compute when nothing is consuming the data. Because
|
||||
* the response is subject to change over the application, callers should call this before each
|
||||
* call to {@link #logRecordBuilder()}.
|
||||
*/
|
||||
default boolean isEnabled() {
|
||||
default boolean isEnabled(Severity severity, Context context) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Overload of {@link #isEnabled(Severity, Context)} assuming {@link Context#current()}. */
|
||||
default boolean isEnabled(Severity severity) {
|
||||
return isEnabled(severity, Context.current());
|
||||
}
|
||||
|
||||
/**
|
||||
* Overload of {@link #isEnabled(Severity, Context)} assuming {@link
|
||||
* Severity#UNDEFINED_SEVERITY_NUMBER} and {@link Context#current()}.
|
||||
*
|
||||
* @deprecated for removal after 1.55.0. Use {@link #isEnabled(Severity, Context)} or {@link
|
||||
* #isEnabled(Severity)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
default boolean isEnabled() {
|
||||
return isEnabled(Severity.UNDEFINED_SEVERITY_NUMBER);
|
||||
}
|
||||
|
||||
@Override
|
||||
ExtendedLogRecordBuilder logRecordBuilder();
|
||||
}
|
||||
|
|
|
@ -94,6 +94,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
private ExtendedDefaultMeter() {}
|
||||
|
||||
private static class NoopLongCounter implements ExtendedLongCounter {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(long value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -105,6 +110,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopDoubleCounter implements ExtendedDoubleCounter {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(double value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -186,6 +196,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopLongUpDownCounter implements ExtendedLongUpDownCounter {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(long value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -197,6 +212,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopDoubleUpDownCounter implements ExtendedDoubleUpDownCounter {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(double value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -281,6 +301,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopDoubleHistogram implements ExtendedDoubleHistogram {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void record(double value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -292,6 +317,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopLongHistogram implements ExtendedLongHistogram {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void record(long value, Attributes attributes, Context context) {}
|
||||
|
||||
|
@ -385,6 +415,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopDoubleGauge implements ExtendedDoubleGauge {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(double value) {}
|
||||
|
||||
|
@ -426,6 +461,11 @@ class ExtendedDefaultMeter implements Meter {
|
|||
}
|
||||
|
||||
private static class NoopLongGauge implements ExtendedLongGauge {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(long value) {}
|
||||
|
||||
|
|
|
@ -31,6 +31,11 @@ final class ExtendedDefaultTracer implements ExtendedTracer {
|
|||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExtendedSpanBuilder spanBuilder(String spanName) {
|
||||
return NoopSpanBuilder.create();
|
||||
|
|
|
@ -150,7 +150,8 @@ class InstrumentationConfigUtilTest {
|
|||
.isInstanceOfSatisfying(
|
||||
YamlDeclarativeConfigProperties.class,
|
||||
exampleConfig ->
|
||||
assertThat(exampleConfig.toMap()).isEqualTo(ImmutableMap.of("property", "value")));
|
||||
assertThat(DeclarativeConfigProperties.toMap(exampleConfig))
|
||||
.isEqualTo(ImmutableMap.of("property", "value")));
|
||||
assertThat(
|
||||
InstrumentationConfigUtil.javaInstrumentationConfig(kitchenSinkConfigProvider, "foo"))
|
||||
.isNull();
|
||||
|
|
|
@ -10,7 +10,9 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import io.opentelemetry.api.common.Value;
|
||||
import io.opentelemetry.api.logs.Logger;
|
||||
import io.opentelemetry.api.logs.LoggerProvider;
|
||||
import io.opentelemetry.api.logs.Severity;
|
||||
import io.opentelemetry.api.testing.internal.AbstractDefaultLoggerTest;
|
||||
import io.opentelemetry.context.Context;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ExtendedDefaultLoggerTest extends AbstractDefaultLoggerTest {
|
||||
|
@ -26,10 +28,18 @@ class ExtendedDefaultLoggerTest extends AbstractDefaultLoggerTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("deprecation") // testing deprecated code
|
||||
void incubatingApiIsLoaded() {
|
||||
Logger logger = LoggerProvider.noop().get("test");
|
||||
|
||||
assertThat(logger).isInstanceOf(ExtendedLogger.class);
|
||||
assertThat(logger)
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedLogger.class,
|
||||
extendedLogger -> {
|
||||
assertThat(extendedLogger.isEnabled(Severity.ERROR, Context.current())).isFalse();
|
||||
assertThat(extendedLogger.isEnabled(Severity.ERROR)).isFalse();
|
||||
assertThat(extendedLogger.isEnabled()).isFalse();
|
||||
});
|
||||
ExtendedLogRecordBuilder builder = (ExtendedLogRecordBuilder) logger.logRecordBuilder();
|
||||
assertThat(builder).isInstanceOf(ExtendedLogRecordBuilder.class);
|
||||
assertThat(builder.setBody(Value.of(0))).isSameAs(builder);
|
||||
|
|
|
@ -14,6 +14,7 @@ import io.opentelemetry.api.common.Attributes;
|
|||
import io.opentelemetry.api.incubator.common.ExtendedAttributeKey;
|
||||
import io.opentelemetry.api.incubator.common.ExtendedAttributes;
|
||||
import io.opentelemetry.api.logs.Logger;
|
||||
import io.opentelemetry.api.logs.Severity;
|
||||
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
|
||||
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
|
||||
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
|
||||
|
@ -53,24 +54,26 @@ class ExtendedLogsBridgeApiUsageTest {
|
|||
ExtendedLogger loggerB = (ExtendedLogger) loggerProvider.get("loggerB");
|
||||
|
||||
// Check if logger is enabled before emitting log and avoid unnecessary computation
|
||||
if (loggerA.isEnabled()) {
|
||||
if (loggerA.isEnabled(Severity.INFO)) {
|
||||
loggerA
|
||||
.logRecordBuilder()
|
||||
.setSeverity(Severity.INFO)
|
||||
.setBody("hello world!")
|
||||
.setAllAttributes(Attributes.builder().put("result", flipCoin()).build())
|
||||
.emit();
|
||||
}
|
||||
if (loggerB.isEnabled()) {
|
||||
if (loggerB.isEnabled(Severity.INFO)) {
|
||||
loggerB
|
||||
.logRecordBuilder()
|
||||
.setSeverity(Severity.INFO)
|
||||
.setBody("hello world!")
|
||||
.setAllAttributes(Attributes.builder().put("result", flipCoin()).build())
|
||||
.emit();
|
||||
}
|
||||
|
||||
// loggerA is enabled, loggerB is disabled
|
||||
assertThat(loggerA.isEnabled()).isTrue();
|
||||
assertThat(loggerB.isEnabled()).isFalse();
|
||||
assertThat(loggerA.isEnabled(Severity.INFO)).isTrue();
|
||||
assertThat(loggerB.isEnabled(Severity.INFO)).isFalse();
|
||||
|
||||
// Collected data only consists of logs from loggerA. Note, loggerB's logs would be
|
||||
// omitted from the results even if logs were emitted. The check if enabled simply avoids
|
||||
|
|
|
@ -11,7 +11,6 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
import io.opentelemetry.api.metrics.Meter;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.api.testing.internal.AbstractDefaultMeterTest;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ExtendedDefaultMeterTest extends AbstractDefaultMeterTest {
|
||||
|
@ -27,44 +26,53 @@ class ExtendedDefaultMeterTest extends AbstractDefaultMeterTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void incubatingApiIsLoaded() {
|
||||
void incubatingApiIsLoaded() {
|
||||
Meter meter = MeterProvider.noop().get("test");
|
||||
assertThat(meter).isSameAs(OpenTelemetry.noop().getMeter("test"));
|
||||
|
||||
Assertions.assertThat(meter.gaugeBuilder("test").ofLongs())
|
||||
.isInstanceOf(ExtendedLongGaugeBuilder.class);
|
||||
Assertions.assertThat(meter.gaugeBuilder("test").ofLongs().build())
|
||||
.isInstanceOf(ExtendedLongGauge.class);
|
||||
Assertions.assertThat(meter.gaugeBuilder("test"))
|
||||
.isInstanceOf(ExtendedDoubleGaugeBuilder.class);
|
||||
Assertions.assertThat(meter.gaugeBuilder("test").build())
|
||||
.isInstanceOf(ExtendedDoubleGauge.class);
|
||||
assertThat(meter.gaugeBuilder("test").ofLongs()).isInstanceOf(ExtendedLongGaugeBuilder.class);
|
||||
assertThat(meter.gaugeBuilder("test").ofLongs().build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedLongGauge.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
assertThat(meter.gaugeBuilder("test")).isInstanceOf(ExtendedDoubleGaugeBuilder.class);
|
||||
assertThat(meter.gaugeBuilder("test").build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedDoubleGauge.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
|
||||
Assertions.assertThat(meter.histogramBuilder("test").ofLongs())
|
||||
assertThat(meter.histogramBuilder("test").ofLongs())
|
||||
.isInstanceOf(ExtendedLongHistogramBuilder.class);
|
||||
Assertions.assertThat(meter.histogramBuilder("test").ofLongs().build())
|
||||
.isInstanceOf(ExtendedLongHistogram.class);
|
||||
Assertions.assertThat(meter.histogramBuilder("test"))
|
||||
.isInstanceOf(ExtendedDoubleHistogramBuilder.class);
|
||||
Assertions.assertThat(meter.histogramBuilder("test").build())
|
||||
.isInstanceOf(ExtendedDoubleHistogram.class);
|
||||
assertThat(meter.histogramBuilder("test").ofLongs().build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedLongHistogram.class,
|
||||
instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
assertThat(meter.histogramBuilder("test")).isInstanceOf(ExtendedDoubleHistogramBuilder.class);
|
||||
assertThat(meter.histogramBuilder("test").build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedDoubleHistogram.class,
|
||||
instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
|
||||
Assertions.assertThat(meter.counterBuilder("test"))
|
||||
.isInstanceOf(ExtendedLongCounterBuilder.class);
|
||||
Assertions.assertThat(meter.counterBuilder("test").build())
|
||||
.isInstanceOf(ExtendedLongCounter.class);
|
||||
Assertions.assertThat(meter.counterBuilder("test").ofDoubles())
|
||||
assertThat(meter.counterBuilder("test")).isInstanceOf(ExtendedLongCounterBuilder.class);
|
||||
assertThat(meter.counterBuilder("test").build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedLongCounter.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
assertThat(meter.counterBuilder("test").ofDoubles())
|
||||
.isInstanceOf(ExtendedDoubleCounterBuilder.class);
|
||||
Assertions.assertThat(meter.counterBuilder("test").ofDoubles().build())
|
||||
.isInstanceOf(ExtendedDoubleCounter.class);
|
||||
assertThat(meter.counterBuilder("test").ofDoubles().build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedDoubleCounter.class,
|
||||
instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
|
||||
Assertions.assertThat(meter.upDownCounterBuilder("test"))
|
||||
assertThat(meter.upDownCounterBuilder("test"))
|
||||
.isInstanceOf(ExtendedLongUpDownCounterBuilder.class);
|
||||
Assertions.assertThat(meter.upDownCounterBuilder("test").build())
|
||||
.isInstanceOf(ExtendedLongUpDownCounter.class);
|
||||
Assertions.assertThat(meter.upDownCounterBuilder("test").ofDoubles())
|
||||
assertThat(meter.upDownCounterBuilder("test").build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedLongUpDownCounter.class,
|
||||
instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
assertThat(meter.upDownCounterBuilder("test").ofDoubles())
|
||||
.isInstanceOf(ExtendedDoubleUpDownCounterBuilder.class);
|
||||
Assertions.assertThat(meter.upDownCounterBuilder("test").ofDoubles().build())
|
||||
.isInstanceOf(ExtendedDoubleUpDownCounter.class);
|
||||
assertThat(meter.upDownCounterBuilder("test").ofDoubles().build())
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedDoubleUpDownCounter.class,
|
||||
instrument -> assertThat(instrument.isEnabled()).isFalse());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
package io.opentelemetry.api.incubator.trace;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.testing.internal.AbstractDefaultTracerTest;
|
||||
|
@ -27,17 +29,20 @@ class ExtendedDefaultTracerTest extends AbstractDefaultTracerTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void incubatingApiIsLoaded() {
|
||||
void incubatingApiIsLoaded() {
|
||||
Tracer tracer = TracerProvider.noop().get("test");
|
||||
assertThat(tracer).isSameAs(OpenTelemetry.noop().getTracer("test"));
|
||||
|
||||
assertThat(tracer).isInstanceOf(ExtendedTracer.class);
|
||||
assertThat(tracer)
|
||||
.isInstanceOfSatisfying(
|
||||
ExtendedTracer.class,
|
||||
extendedTracer -> assertThat(extendedTracer.isEnabled()).isFalse());
|
||||
assertThat(tracer.spanBuilder("test")).isInstanceOf(ExtendedSpanBuilder.class);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void incubatingApi() {
|
||||
void incubatingApi() {
|
||||
ExtendedSpanBuilder spanBuilder =
|
||||
(ExtendedSpanBuilder) ExtendedDefaultTracer.getNoop().spanBuilder("test");
|
||||
assertThat(spanBuilder.setParentFrom(null, null)).isSameAs(spanBuilder);
|
||||
|
@ -45,21 +50,21 @@ class ExtendedDefaultTracerTest extends AbstractDefaultTracerTest {
|
|||
SpanRunnable<RuntimeException> spanRunnable = Mockito.mock(SpanRunnable.class);
|
||||
|
||||
spanBuilder.startAndRun(spanRunnable);
|
||||
Mockito.verify(spanRunnable).runInSpan();
|
||||
Mockito.reset(spanRunnable);
|
||||
verify(spanRunnable).runInSpan();
|
||||
reset(spanRunnable);
|
||||
|
||||
spanBuilder.startAndRun(spanRunnable, null);
|
||||
Mockito.verify(spanRunnable).runInSpan();
|
||||
Mockito.reset(spanRunnable);
|
||||
verify(spanRunnable).runInSpan();
|
||||
reset(spanRunnable);
|
||||
|
||||
SpanCallable<String, RuntimeException> spanCallable = Mockito.mock(SpanCallable.class);
|
||||
|
||||
spanBuilder.startAndCall(spanCallable);
|
||||
Mockito.verify(spanCallable).callInSpan();
|
||||
Mockito.reset(spanCallable);
|
||||
verify(spanCallable).callInSpan();
|
||||
reset(spanCallable);
|
||||
|
||||
spanBuilder.startAndCall(spanCallable, null);
|
||||
Mockito.verify(spanCallable).callInSpan();
|
||||
Mockito.reset(spanCallable);
|
||||
verify(spanCallable).callInSpan();
|
||||
reset(spanCallable);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.api.incubator;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import io.opentelemetry.api.incubator.config.ConfigProvider;
|
||||
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
|
||||
import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil;
|
||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
|
||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
|
||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
|
||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel;
|
||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class InstrumentationConfigUtilTest {
|
||||
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
@Test
|
||||
void toMap_RoundTrip() throws JsonProcessingException {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("string", "val");
|
||||
map.put("boolean", true);
|
||||
map.put("long", 1L);
|
||||
map.put("double", 1.1);
|
||||
map.put("null", null);
|
||||
map.put("stringList", Arrays.asList("val1", "val2"));
|
||||
map.put("boolList", Arrays.asList(true, false));
|
||||
map.put("longList", Arrays.asList(1L, 2L));
|
||||
map.put("doubleList", Arrays.asList(1.1d, 2.2d));
|
||||
map.put(
|
||||
"structuredList", Collections.singletonList(Collections.singletonMap("childKey", "val")));
|
||||
map.put("emptyList", Collections.emptyList());
|
||||
map.put("structured", Collections.singletonMap("childKey", "val"));
|
||||
map.put("emptyStructured", Collections.emptyMap());
|
||||
|
||||
String mapJson = MAPPER.writeValueAsString(map);
|
||||
DeclarativeConfigProperties properties =
|
||||
DeclarativeConfiguration.toConfigProperties(
|
||||
new ByteArrayInputStream(mapJson.getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
assertThat(DeclarativeConfigProperties.toMap(properties)).isEqualTo(map);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getInstrumentationConfigModel_UnsetConfig() {
|
||||
ConfigProvider configProvider = () -> null;
|
||||
|
||||
assertThat(
|
||||
InstrumentationConfigUtil.getInstrumentationConfigModel(
|
||||
configProvider, "my_instrumentation_library", MAPPER, Model.class))
|
||||
.isEqualTo(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getInstrumentationConfigModel_EmptyConfig() {
|
||||
ConfigProvider configProvider =
|
||||
withInstrumentationConfig("my_instrumentation_library", Collections.emptyMap());
|
||||
|
||||
assertThat(
|
||||
InstrumentationConfigUtil.getInstrumentationConfigModel(
|
||||
configProvider, "my_instrumentation_library", MAPPER, Model.class))
|
||||
.isEqualTo(new Model());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getInstrumentationConfigModel_KitchenSink() {
|
||||
ConfigProvider configProvider =
|
||||
withInstrumentationConfig(
|
||||
"my_instrumentation_library",
|
||||
ImmutableMap.<String, Object>builder()
|
||||
.put("string_property", "value")
|
||||
.put("boolean_property", true)
|
||||
.put("long_property", 1L)
|
||||
.put("double_property", 1.1d)
|
||||
.put("string_list_property", Arrays.asList("val1", "val2"))
|
||||
.put("boolean_list_property", Arrays.asList(true, false))
|
||||
.put("long_list_property", Arrays.asList(1L, 2L))
|
||||
.put("double_list_property", Arrays.asList(1.1d, 2.2d))
|
||||
.put("map_property", Collections.singletonMap("childKey", "val"))
|
||||
.put(
|
||||
"structured_list_property",
|
||||
Collections.singletonList(
|
||||
ImmutableMap.of("key", "the_key", "value", "the_value")))
|
||||
.build());
|
||||
|
||||
Model expected = new Model();
|
||||
expected.stringProperty = "value";
|
||||
expected.booleanProperty = true;
|
||||
expected.longProperty = 1L;
|
||||
expected.doubleProperty = 1.1d;
|
||||
expected.stringListProperty = Arrays.asList("val1", "val2");
|
||||
expected.booleanListProperty = Arrays.asList(true, false);
|
||||
expected.longListProperty = Arrays.asList(1L, 2L);
|
||||
expected.doubleListProperty = Arrays.asList(1.1d, 2.2d);
|
||||
expected.mapProperty = Collections.singletonMap("childKey", "val");
|
||||
ListEntryModel listEntryModel = new ListEntryModel();
|
||||
listEntryModel.key = "the_key";
|
||||
listEntryModel.value = "the_value";
|
||||
expected.structuredListProperty = Collections.singletonList(listEntryModel);
|
||||
|
||||
assertThat(
|
||||
InstrumentationConfigUtil.getInstrumentationConfigModel(
|
||||
configProvider, "my_instrumentation_library", MAPPER, Model.class))
|
||||
.isEqualTo(expected);
|
||||
}
|
||||
|
||||
private static ConfigProvider withInstrumentationConfig(
|
||||
String instrumentationName, Map<String, Object> instrumentationConfig) {
|
||||
ExperimentalLanguageSpecificInstrumentationModel javaConfig =
|
||||
new ExperimentalLanguageSpecificInstrumentationModel();
|
||||
javaConfig.setAdditionalProperty(instrumentationName, instrumentationConfig);
|
||||
|
||||
return SdkConfigProvider.create(
|
||||
new OpenTelemetryConfigurationModel()
|
||||
.withInstrumentationDevelopment(new InstrumentationModel().withJava(javaConfig)));
|
||||
}
|
||||
|
||||
private static class Model {
|
||||
@JsonProperty("string_property")
|
||||
private String stringProperty;
|
||||
|
||||
@JsonProperty("boolean_property")
|
||||
private Boolean booleanProperty;
|
||||
|
||||
@JsonProperty("long_property")
|
||||
private Long longProperty;
|
||||
|
||||
@JsonProperty("double_property")
|
||||
private Double doubleProperty;
|
||||
|
||||
@JsonProperty("string_list_property")
|
||||
private List<String> stringListProperty;
|
||||
|
||||
@JsonProperty("boolean_list_property")
|
||||
private List<Boolean> booleanListProperty;
|
||||
|
||||
@JsonProperty("long_list_property")
|
||||
private List<Long> longListProperty;
|
||||
|
||||
@JsonProperty("double_list_property")
|
||||
private List<Double> doubleListProperty;
|
||||
|
||||
;
|
||||
|
||||
@JsonProperty("map_property")
|
||||
private Map<String, Object> mapProperty;
|
||||
|
||||
@JsonProperty("structured_list_property")
|
||||
private List<ListEntryModel> structuredListProperty;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof Model)) {
|
||||
return false;
|
||||
}
|
||||
Model model = (Model) o;
|
||||
return Objects.equals(stringProperty, model.stringProperty)
|
||||
&& Objects.equals(booleanProperty, model.booleanProperty)
|
||||
&& Objects.equals(longProperty, model.longProperty)
|
||||
&& Objects.equals(doubleProperty, model.doubleProperty)
|
||||
&& Objects.equals(stringListProperty, model.stringListProperty)
|
||||
&& Objects.equals(booleanListProperty, model.booleanListProperty)
|
||||
&& Objects.equals(longListProperty, model.longListProperty)
|
||||
&& Objects.equals(doubleListProperty, model.doubleListProperty)
|
||||
&& Objects.equals(mapProperty, model.mapProperty)
|
||||
&& Objects.equals(structuredListProperty, model.structuredListProperty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(
|
||||
stringProperty,
|
||||
booleanProperty,
|
||||
longProperty,
|
||||
doubleProperty,
|
||||
stringListProperty,
|
||||
booleanListProperty,
|
||||
longListProperty,
|
||||
doubleListProperty,
|
||||
mapProperty,
|
||||
structuredListProperty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Model{"
|
||||
+ "stringProperty='"
|
||||
+ stringProperty
|
||||
+ '\''
|
||||
+ ", booleanProperty='"
|
||||
+ booleanProperty
|
||||
+ '\''
|
||||
+ ", longProperty='"
|
||||
+ longProperty
|
||||
+ '\''
|
||||
+ ", doubleProperty='"
|
||||
+ doubleProperty
|
||||
+ '\''
|
||||
+ ", stringListProperty="
|
||||
+ stringListProperty
|
||||
+ ", booleanListProperty="
|
||||
+ booleanListProperty
|
||||
+ ", longListProperty="
|
||||
+ longListProperty
|
||||
+ ", doubleListProperty="
|
||||
+ doubleListProperty
|
||||
+ ", mapProperty="
|
||||
+ mapProperty
|
||||
+ ", structuredListProperty="
|
||||
+ structuredListProperty
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
||||
private static final class ListEntryModel {
|
||||
@JsonProperty("key")
|
||||
private String key;
|
||||
|
||||
@JsonProperty("value")
|
||||
private String value;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
ListEntryModel that = (ListEntryModel) o;
|
||||
return Objects.equals(key, that.key) && Objects.equals(value, that.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ListEntryModel{" + "key='" + key + '\'' + ", value='" + value + '\'' + '}';
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ plugins {
|
|||
`kotlin-dsl`
|
||||
|
||||
// When updating, update below in dependencies too
|
||||
id("com.diffplug.spotless") version "7.0.4"
|
||||
id("com.diffplug.spotless") version "7.1.0"
|
||||
}
|
||||
|
||||
if (!hasLauncherForJavaVersion(17)) {
|
||||
|
@ -50,10 +50,10 @@ repositories {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(enforcedPlatform("com.squareup.wire:wire-bom:5.3.3"))
|
||||
implementation(enforcedPlatform("com.squareup.wire:wire-bom:5.3.5"))
|
||||
implementation("com.google.auto.value:auto-value-annotations:1.11.0")
|
||||
// When updating, update above in plugins too
|
||||
implementation("com.diffplug.spotless:spotless-plugin-gradle:7.0.4")
|
||||
implementation("com.diffplug.spotless:spotless-plugin-gradle:7.1.0")
|
||||
implementation("com.gradle.develocity:com.gradle.develocity.gradle.plugin:4.0.2")
|
||||
implementation("com.squareup:javapoet:1.13.0")
|
||||
implementation("com.squareup.wire:wire-compiler")
|
||||
|
|
|
@ -42,7 +42,7 @@ java {
|
|||
|
||||
checkstyle {
|
||||
configDirectory.set(file("$rootDir/buildscripts/"))
|
||||
toolVersion = "10.26.0"
|
||||
toolVersion = "10.26.1"
|
||||
isIgnoreFailures = false
|
||||
configProperties["rootDir"] = rootDir
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
plugins {
|
||||
id("otel.java-conventions")
|
||||
id("otel.publish-conventions")
|
||||
|
||||
id("otel.animalsniffer-conventions")
|
||||
}
|
||||
|
||||
description = "OpenTelemetry API Common"
|
||||
otelJava.moduleName.set("io.opentelemetry.common")
|
||||
|
||||
dependencies {
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.common;
|
||||
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
/** A loader for components that are discovered via SPI. */
|
||||
public interface ComponentLoader {
|
||||
/**
|
||||
* Load implementations of an SPI.
|
||||
*
|
||||
* @param spiClass the SPI class
|
||||
* @param <T> the SPI type
|
||||
* @return iterable of SPI implementations
|
||||
*/
|
||||
<T> Iterable<T> load(Class<T> spiClass);
|
||||
|
||||
/**
|
||||
* Create an instance for the {@code classLoader} using {@link ServiceLoader#load(Class,
|
||||
* ClassLoader)}.
|
||||
*/
|
||||
static ComponentLoader forClassLoader(ClassLoader classLoader) {
|
||||
return new ServiceLoaderComponentLoader(classLoader);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.common;
|
||||
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
class ServiceLoaderComponentLoader implements ComponentLoader {
|
||||
|
||||
private final ClassLoader classLoader;
|
||||
|
||||
ServiceLoaderComponentLoader(ClassLoader classLoader) {
|
||||
this.classLoader = classLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Iterable<T> load(Class<T> spiClass) {
|
||||
return ServiceLoader.load(spiClass, classLoader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ServiceLoaderComponentLoader{classLoader=" + classLoader + "}";
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ description = "OpenTelemetry Context (Incubator)"
|
|||
otelJava.moduleName.set("io.opentelemetry.context")
|
||||
|
||||
dependencies {
|
||||
api(project(":common"))
|
||||
// MustBeClosed
|
||||
compileOnly("com.google.errorprone:error_prone_annotations")
|
||||
|
||||
|
|
|
@ -37,9 +37,9 @@
|
|||
|
||||
package io.opentelemetry.context;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
|
@ -103,9 +103,10 @@ final class LazyStorage {
|
|||
return ContextStorage.defaultStorage();
|
||||
}
|
||||
|
||||
ComponentLoader componentLoader =
|
||||
ComponentLoader.forClassLoader(LazyStorage.class.getClassLoader());
|
||||
List<ContextStorageProvider> providers = new ArrayList<>();
|
||||
for (ContextStorageProvider provider :
|
||||
ServiceLoader.load(ContextStorageProvider.class, LazyStorage.class.getClassLoader())) {
|
||||
for (ContextStorageProvider provider : componentLoader.load(ContextStorageProvider.class)) {
|
||||
if (provider
|
||||
.getClass()
|
||||
.getName()
|
||||
|
|
|
@ -16,14 +16,14 @@ val DEPENDENCY_BOMS = listOf(
|
|||
"com.fasterxml.jackson:jackson-bom:2.19.1",
|
||||
"com.google.guava:guava-bom:33.4.8-jre",
|
||||
"com.google.protobuf:protobuf-bom:4.31.1",
|
||||
"com.squareup.okhttp3:okhttp-bom:4.12.0",
|
||||
"com.squareup.okio:okio-bom:3.13.0", // applies to transitive dependencies of okhttp
|
||||
"com.squareup.okhttp3:okhttp-bom:5.1.0",
|
||||
"com.squareup.okio:okio-bom:3.15.0", // applies to transitive dependencies of okhttp
|
||||
"io.grpc:grpc-bom:1.73.0",
|
||||
"io.netty:netty-bom:4.2.2.Final",
|
||||
"io.zipkin.brave:brave-bom:6.3.0",
|
||||
"io.zipkin.reporter2:zipkin-reporter-bom:3.5.1",
|
||||
"org.assertj:assertj-bom:3.27.3",
|
||||
"org.testcontainers:testcontainers-bom:1.21.2",
|
||||
"org.testcontainers:testcontainers-bom:1.21.3",
|
||||
"org.snakeyaml:snakeyaml-engine:2.9"
|
||||
)
|
||||
|
||||
|
@ -68,7 +68,7 @@ val DEPENDENCIES = listOf(
|
|||
"io.prometheus:prometheus-metrics-exposition-formats-no-protobuf:${prometheusServerVersion}",
|
||||
"javax.annotation:javax.annotation-api:1.3.2",
|
||||
"com.github.stefanbirkner:system-rules:1.19.0",
|
||||
"com.google.api.grpc:proto-google-common-protos:2.58.2",
|
||||
"com.google.api.grpc:proto-google-common-protos:2.59.1",
|
||||
"com.google.code.findbugs:jsr305:3.0.2",
|
||||
"com.google.guava:guava-beta-checker:1.0",
|
||||
"com.sun.net.httpserver:http:20070405",
|
||||
|
@ -78,7 +78,7 @@ val DEPENDENCIES = listOf(
|
|||
"eu.rekawek.toxiproxy:toxiproxy-java:2.1.7",
|
||||
"io.github.netmikey.logunit:logunit-jul:2.0.0",
|
||||
"io.jaegertracing:jaeger-client:1.8.1",
|
||||
"io.opentelemetry.contrib:opentelemetry-aws-xray-propagator:1.46.0-alpha",
|
||||
"io.opentelemetry.contrib:opentelemetry-aws-xray-propagator:1.47.0-alpha",
|
||||
"io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.34.0-alpha",
|
||||
"io.opentelemetry.proto:opentelemetry-proto:1.7.0-alpha",
|
||||
"io.opentracing:opentracing-api:0.33.0",
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Comparing source compatibility of opentelemetry-api-1.52.0.jar against opentelemetry-api-1.51.0.jar
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.api.GlobalOpenTelemetry (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) STATIC(+) void set(java.util.function.Supplier<io.opentelemetry.api.OpenTelemetry>)
|
|
@ -0,0 +1,7 @@
|
|||
Comparing source compatibility of opentelemetry-common-1.52.0.jar against
|
||||
+++ NEW INTERFACE: PUBLIC(+) ABSTRACT(+) io.opentelemetry.common.ComponentLoader (not serializable)
|
||||
+++ CLASS FILE FORMAT VERSION: 52.0 <- n.a.
|
||||
+++ NEW SUPERCLASS: java.lang.Object
|
||||
+++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.common.ComponentLoader forClassLoader(java.lang.ClassLoader)
|
||||
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Iterable<T> load(java.lang.Class<T>)
|
||||
GENERIC TEMPLATES: +++ T:java.lang.Object
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-context-1.52.0.jar against opentelemetry-context-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-common-1.52.0.jar against opentelemetry-exporter-common-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-logging-otlp-1.52.0.jar against opentelemetry-exporter-logging-otlp-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-logging-1.52.0.jar against opentelemetry-exporter-logging-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-otlp-common-1.52.0.jar against opentelemetry-exporter-otlp-common-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,19 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-otlp-1.52.0.jar against opentelemetry-exporter-otlp-1.51.0.jar
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.52.0.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.52.0.jar against opentelemetry-exporter-sender-jdk-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.52.0.jar against opentelemetry-exporter-sender-okhttp-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-zipkin-1.52.0.jar against opentelemetry-exporter-zipkin-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-extension-kotlin-1.52.0.jar against opentelemetry-extension-kotlin-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-extension-trace-propagators-1.52.0.jar against opentelemetry-extension-trace-propagators-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-opentracing-shim-1.52.0.jar against opentelemetry-opentracing-shim-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-common-1.52.0.jar against opentelemetry-sdk-common-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,4 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.52.0.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.51.0.jar
|
||||
*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.common.ComponentLoader getComponentLoader()
|
|
@ -0,0 +1,4 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-1.52.0.jar against opentelemetry-sdk-extension-autoconfigure-1.51.0.jar
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder setComponentLoader(io.opentelemetry.common.ComponentLoader)
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-jaeger-remote-sampler-1.52.0.jar against opentelemetry-sdk-extension-jaeger-remote-sampler-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-logs-1.52.0.jar against opentelemetry-sdk-logs-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-metrics-1.52.0.jar against opentelemetry-sdk-metrics-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-testing-1.52.0.jar against opentelemetry-sdk-testing-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-trace-1.52.0.jar against opentelemetry-sdk-trace-1.51.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-1.52.0.jar against opentelemetry-sdk-1.51.0.jar
|
||||
No changes.
|
|
@ -1,4 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-api-1.52.0-SNAPSHOT.jar against opentelemetry-api-1.51.0.jar
|
||||
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.api.GlobalOpenTelemetry (not serializable)
|
||||
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
|
||||
+++ NEW METHOD: PUBLIC(+) STATIC(+) void set(java.util.function.Supplier<io.opentelemetry.api.OpenTelemetry>)
|
||||
Comparing source compatibility of opentelemetry-api-1.53.0-SNAPSHOT.jar against opentelemetry-api-1.52.0.jar
|
||||
No changes.
|
|
@ -0,0 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-common-1.53.0-SNAPSHOT.jar against opentelemetry-common-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-context-1.52.0-SNAPSHOT.jar against opentelemetry-context-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-context-1.53.0-SNAPSHOT.jar against opentelemetry-context-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-common-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-common-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-logging-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-logging-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-logging-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-logging-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-otlp-common-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-common-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-otlp-common-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-common-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-otlp-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-otlp-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-exporter-zipkin-1.52.0-SNAPSHOT.jar against opentelemetry-exporter-zipkin-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-exporter-zipkin-1.53.0-SNAPSHOT.jar against opentelemetry-exporter-zipkin-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-extension-kotlin-1.52.0-SNAPSHOT.jar against opentelemetry-extension-kotlin-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-extension-kotlin-1.53.0-SNAPSHOT.jar against opentelemetry-extension-kotlin-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-extension-trace-propagators-1.52.0-SNAPSHOT.jar against opentelemetry-extension-trace-propagators-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-extension-trace-propagators-1.53.0-SNAPSHOT.jar against opentelemetry-extension-trace-propagators-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-opentracing-shim-1.52.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-opentracing-shim-1.53.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-common-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-common-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-extension-jaeger-remote-sampler-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-extension-jaeger-remote-sampler-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-extension-jaeger-remote-sampler-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-extension-jaeger-remote-sampler-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-logs-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-logs-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-logs-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-logs-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-metrics-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-metrics-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-testing-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-testing-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-trace-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-trace-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.52.0.jar
|
||||
No changes.
|
|
@ -1,2 +1,2 @@
|
|||
Comparing source compatibility of opentelemetry-sdk-1.52.0-SNAPSHOT.jar against opentelemetry-sdk-1.51.0.jar
|
||||
Comparing source compatibility of opentelemetry-sdk-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-1.52.0.jar
|
||||
No changes.
|
|
@ -8,9 +8,9 @@ package io.opentelemetry.exporter.internal.compression;
|
|||
import static io.opentelemetry.api.internal.Utils.checkArgument;
|
||||
import static java.util.stream.Collectors.joining;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -24,7 +24,9 @@ import javax.annotation.Nullable;
|
|||
*/
|
||||
public final class CompressorUtil {
|
||||
|
||||
private static final Map<String, Compressor> compressorRegistry = buildCompressorRegistry();
|
||||
private static final Map<String, Compressor> compressorRegistry =
|
||||
buildCompressorRegistry(
|
||||
ComponentLoader.forClassLoader(CompressorUtil.class.getClassLoader()));
|
||||
|
||||
private CompressorUtil() {}
|
||||
|
||||
|
@ -36,8 +38,26 @@ public final class CompressorUtil {
|
|||
*/
|
||||
@Nullable
|
||||
public static Compressor validateAndResolveCompressor(String compressionMethod) {
|
||||
Set<String> supportedEncodings = compressorRegistry.keySet();
|
||||
Compressor compressor = compressorRegistry.get(compressionMethod);
|
||||
return validateAndResolveCompressor(compressionMethod, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that the {@code compressionMethod} is "none" or matches a registered compressor.
|
||||
*
|
||||
* @param compressionMethod the compression method to validate and resolve
|
||||
* @param componentLoader the component loader to use for loading SPI implementations, or null to
|
||||
* use the default
|
||||
* @return {@code null} if {@code compressionMethod} is "none" or the registered compressor
|
||||
* @throws IllegalArgumentException if no match is found
|
||||
*/
|
||||
@Nullable
|
||||
public static Compressor validateAndResolveCompressor(
|
||||
String compressionMethod, @Nullable ComponentLoader componentLoader) {
|
||||
Map<String, Compressor> registry =
|
||||
componentLoader == null ? compressorRegistry : buildCompressorRegistry(componentLoader);
|
||||
|
||||
Set<String> supportedEncodings = registry.keySet();
|
||||
Compressor compressor = registry.get(compressionMethod);
|
||||
checkArgument(
|
||||
"none".equals(compressionMethod) || compressor != null,
|
||||
"Unsupported compressionMethod. Compression method must be \"none\" or one of: "
|
||||
|
@ -45,10 +65,9 @@ public final class CompressorUtil {
|
|||
return compressor;
|
||||
}
|
||||
|
||||
private static Map<String, Compressor> buildCompressorRegistry() {
|
||||
private static Map<String, Compressor> buildCompressorRegistry(ComponentLoader componentLoader) {
|
||||
Map<String, Compressor> compressors = new HashMap<>();
|
||||
for (CompressorProvider spi :
|
||||
ServiceLoader.load(CompressorProvider.class, CompressorUtil.class.getClassLoader())) {
|
||||
for (CompressorProvider spi : componentLoader.load(CompressorProvider.class)) {
|
||||
Compressor compressor = spi.getInstance();
|
||||
compressors.put(compressor.getEncoding(), compressor);
|
||||
}
|
||||
|
|
|
@ -10,9 +10,12 @@ import io.grpc.ManagedChannel;
|
|||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.internal.ConfigUtil;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
|
||||
import io.opentelemetry.exporter.internal.TlsConfigHelper;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorProvider;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorUtil;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
|
||||
import io.opentelemetry.sdk.common.export.RetryPolicy;
|
||||
|
@ -26,7 +29,6 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -67,7 +69,8 @@ public class GrpcExporterBuilder<T extends Marshaler> {
|
|||
private Supplier<MeterProvider> meterProviderSupplier = GlobalOpenTelemetry::getMeterProvider;
|
||||
private InternalTelemetryVersion internalTelemetryVersion = InternalTelemetryVersion.LEGACY;
|
||||
|
||||
private ClassLoader serviceClassLoader = GrpcExporterBuilder.class.getClassLoader();
|
||||
private ComponentLoader componentLoader =
|
||||
ComponentLoader.forClassLoader(GrpcExporterBuilder.class.getClassLoader());
|
||||
@Nullable private ExecutorService executorService;
|
||||
|
||||
// Use Object type since gRPC may not be on the classpath.
|
||||
|
@ -115,6 +118,17 @@ public class GrpcExporterBuilder<T extends Marshaler> {
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the method used to compress payloads. If unset, compression is disabled. Compression
|
||||
* method "gzip" and "none" are supported out of the box. Support for additional compression
|
||||
* methods is available by implementing {@link Compressor} and {@link CompressorProvider}.
|
||||
*/
|
||||
public GrpcExporterBuilder<T> setCompression(String compressionMethod) {
|
||||
Compressor compressor =
|
||||
CompressorUtil.validateAndResolveCompressor(compressionMethod, componentLoader);
|
||||
return setCompression(compressor);
|
||||
}
|
||||
|
||||
public GrpcExporterBuilder<T> setTrustManagerFromCerts(byte[] trustedCertificatesPem) {
|
||||
tlsConfigHelper.setTrustManagerFromCerts(trustedCertificatesPem);
|
||||
return this;
|
||||
|
@ -158,8 +172,8 @@ public class GrpcExporterBuilder<T extends Marshaler> {
|
|||
return this;
|
||||
}
|
||||
|
||||
public GrpcExporterBuilder<T> setServiceClassLoader(ClassLoader servieClassLoader) {
|
||||
this.serviceClassLoader = servieClassLoader;
|
||||
public GrpcExporterBuilder<T> setComponentLoader(ComponentLoader componentLoader) {
|
||||
this.componentLoader = componentLoader;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -268,7 +282,7 @@ public class GrpcExporterBuilder<T extends Marshaler> {
|
|||
if (grpcChannel != null) {
|
||||
joiner.add("grpcChannel=" + grpcChannel);
|
||||
}
|
||||
joiner.add("serviceClassLoader=" + serviceClassLoader);
|
||||
joiner.add("componentLoader=" + componentLoader);
|
||||
if (executorService != null) {
|
||||
joiner.add("executorService=" + executorService);
|
||||
}
|
||||
|
@ -302,8 +316,7 @@ public class GrpcExporterBuilder<T extends Marshaler> {
|
|||
*/
|
||||
private GrpcSenderProvider resolveGrpcSenderProvider() {
|
||||
Map<String, GrpcSenderProvider> grpcSenderProviders = new HashMap<>();
|
||||
for (GrpcSenderProvider spi :
|
||||
ServiceLoader.load(GrpcSenderProvider.class, serviceClassLoader)) {
|
||||
for (GrpcSenderProvider spi : componentLoader.load(GrpcSenderProvider.class)) {
|
||||
grpcSenderProviders.put(spi.getClass().getName(), spi);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,9 +8,12 @@ package io.opentelemetry.exporter.internal.http;
|
|||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.internal.ConfigUtil;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
|
||||
import io.opentelemetry.exporter.internal.TlsConfigHelper;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorProvider;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorUtil;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
|
||||
import io.opentelemetry.sdk.common.export.ProxyOptions;
|
||||
|
@ -24,7 +27,6 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -64,7 +66,8 @@ public final class HttpExporterBuilder<T extends Marshaler> {
|
|||
@Nullable private RetryPolicy retryPolicy = RetryPolicy.getDefault();
|
||||
private Supplier<MeterProvider> meterProviderSupplier = GlobalOpenTelemetry::getMeterProvider;
|
||||
private InternalTelemetryVersion internalTelemetryVersion = InternalTelemetryVersion.LEGACY;
|
||||
private ClassLoader serviceClassLoader = HttpExporterBuilder.class.getClassLoader();
|
||||
private ComponentLoader componentLoader =
|
||||
ComponentLoader.forClassLoader(HttpExporterBuilder.class.getClassLoader());
|
||||
@Nullable private ExecutorService executorService;
|
||||
|
||||
public HttpExporterBuilder(
|
||||
|
@ -95,6 +98,17 @@ public final class HttpExporterBuilder<T extends Marshaler> {
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the method used to compress payloads. If unset, compression is disabled. Compression
|
||||
* method "gzip" and "none" are supported out of the box. Support for additional compression
|
||||
* methods is available by implementing {@link Compressor} and {@link CompressorProvider}.
|
||||
*/
|
||||
public HttpExporterBuilder<T> setCompression(String compressionMethod) {
|
||||
Compressor compressor =
|
||||
CompressorUtil.validateAndResolveCompressor(compressionMethod, componentLoader);
|
||||
return setCompression(compressor);
|
||||
}
|
||||
|
||||
public HttpExporterBuilder<T> addConstantHeaders(String key, String value) {
|
||||
constantHeaders.put(key, value);
|
||||
return this;
|
||||
|
@ -143,8 +157,8 @@ public final class HttpExporterBuilder<T extends Marshaler> {
|
|||
return this;
|
||||
}
|
||||
|
||||
public HttpExporterBuilder<T> setServiceClassLoader(ClassLoader servieClassLoader) {
|
||||
this.serviceClassLoader = servieClassLoader;
|
||||
public HttpExporterBuilder<T> setComponentLoader(ComponentLoader componentLoader) {
|
||||
this.componentLoader = componentLoader;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -265,7 +279,7 @@ public final class HttpExporterBuilder<T extends Marshaler> {
|
|||
if (retryPolicy != null) {
|
||||
joiner.add("retryPolicy=" + retryPolicy);
|
||||
}
|
||||
joiner.add("serviceClassLoader=" + serviceClassLoader);
|
||||
joiner.add("componentLoader=" + componentLoader);
|
||||
if (executorService != null) {
|
||||
joiner.add("executorService=" + executorService);
|
||||
}
|
||||
|
@ -299,8 +313,7 @@ public final class HttpExporterBuilder<T extends Marshaler> {
|
|||
*/
|
||||
private HttpSenderProvider resolveHttpSenderProvider() {
|
||||
Map<String, HttpSenderProvider> httpSenderProviders = new HashMap<>();
|
||||
for (HttpSenderProvider spi :
|
||||
ServiceLoader.load(HttpSenderProvider.class, serviceClassLoader)) {
|
||||
for (HttpSenderProvider spi : componentLoader.load(HttpSenderProvider.class)) {
|
||||
httpSenderProviders.put(spi.getClass().getName(), spi);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.exporter.internal.compression;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class CompressorUtilTest {
|
||||
|
||||
private final ComponentLoader componentLoader =
|
||||
ComponentLoader.forClassLoader(CompressorUtilTest.class.getClassLoader());
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_none() {
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("none")).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_gzip() {
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("gzip"))
|
||||
.isEqualTo(GzipCompressor.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_invalid() {
|
||||
assertThatThrownBy(() -> CompressorUtil.validateAndResolveCompressor("invalid"))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Unsupported compressionMethod");
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_withClassLoader_none() {
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("none", componentLoader)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_withClassLoader_gzip() {
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("gzip", componentLoader))
|
||||
.isEqualTo(GzipCompressor.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_withClassLoader_invalid() {
|
||||
assertThatThrownBy(
|
||||
() -> CompressorUtil.validateAndResolveCompressor("invalid", componentLoader))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Unsupported compressionMethod");
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_emptyClassLoader() {
|
||||
// Create a class loader that cannot load CompressorProvider services
|
||||
ComponentLoader emptyComponentLoader =
|
||||
ComponentLoader.forClassLoader(new URLClassLoader(new URL[0], null));
|
||||
|
||||
// Gzip should still work because it's hardcoded
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("gzip", emptyComponentLoader))
|
||||
.isEqualTo(GzipCompressor.getInstance());
|
||||
|
||||
// None should still work because it doesn't require loading services
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("none", emptyComponentLoader)).isNull();
|
||||
|
||||
// Any SPI-based compressor should not be available
|
||||
assertThatThrownBy(
|
||||
() -> CompressorUtil.validateAndResolveCompressor("base64", emptyComponentLoader))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Unsupported compressionMethod");
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateAndResolveCompressor_delegatesCorrectly() {
|
||||
// Test that single-parameter method delegates to two-parameter method
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("gzip"))
|
||||
.isEqualTo(CompressorUtil.validateAndResolveCompressor("gzip", componentLoader));
|
||||
|
||||
assertThat(CompressorUtil.validateAndResolveCompressor("none"))
|
||||
.isEqualTo(CompressorUtil.validateAndResolveCompressor("none", componentLoader));
|
||||
}
|
||||
}
|
|
@ -6,11 +6,16 @@
|
|||
package io.opentelemetry.exporter.internal.grpc;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.GzipCompressor;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.sdk.internal.StandardComponentId;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
@ -36,7 +41,7 @@ class GrpcExporterBuilderTest {
|
|||
|
||||
@Test
|
||||
void compressionNone() {
|
||||
builder.setCompression(null);
|
||||
builder.setCompression((Compressor) null);
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
@ -50,8 +55,45 @@ class GrpcExporterBuilderTest {
|
|||
|
||||
@Test
|
||||
void compressionEnabledAndDisabled() {
|
||||
builder.setCompression(GzipCompressor.getInstance()).setCompression(null);
|
||||
builder.setCompression(GzipCompressor.getInstance()).setCompression((Compressor) null);
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_none() {
|
||||
builder.setCompression("none");
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_gzip() {
|
||||
builder.setCompression("gzip");
|
||||
|
||||
assertThat(builder).extracting("compressor").isEqualTo(GzipCompressor.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_invalid() {
|
||||
assertThatThrownBy(() -> builder.setCompression("invalid-compression"))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Unsupported compressionMethod");
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_usesServiceClassLoader() {
|
||||
// Create a class loader that cannot load CompressorProvider services
|
||||
ComponentLoader emptyComponentLoader =
|
||||
ComponentLoader.forClassLoader(new URLClassLoader(new URL[0], null));
|
||||
builder.setComponentLoader(emptyComponentLoader);
|
||||
|
||||
// This should still work because gzip compressor is hardcoded
|
||||
builder.setCompression("gzip");
|
||||
assertThat(builder).extracting("compressor").isEqualTo(GzipCompressor.getInstance());
|
||||
|
||||
// This should still work because "none" doesn't require loading services
|
||||
builder.setCompression("none");
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.exporter.internal.http;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.GzipCompressor;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.sdk.internal.StandardComponentId;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class HttpExporterBuilderTest {
|
||||
|
||||
private HttpExporterBuilder<Marshaler> builder;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
builder =
|
||||
new HttpExporterBuilder<>(
|
||||
StandardComponentId.ExporterType.OTLP_HTTP_SPAN_EXPORTER, "http://localhost:4318");
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionDefault() {
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionNone() {
|
||||
builder.setCompression((Compressor) null);
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionGzip() {
|
||||
builder.setCompression(GzipCompressor.getInstance());
|
||||
|
||||
assertThat(builder).extracting("compressor").isEqualTo(GzipCompressor.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionEnabledAndDisabled() {
|
||||
builder.setCompression(GzipCompressor.getInstance()).setCompression((Compressor) null);
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_none() {
|
||||
builder.setCompression("none");
|
||||
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_gzip() {
|
||||
builder.setCompression("gzip");
|
||||
|
||||
assertThat(builder).extracting("compressor").isEqualTo(GzipCompressor.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_invalid() {
|
||||
assertThatThrownBy(() -> builder.setCompression("invalid-compression"))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Unsupported compressionMethod");
|
||||
}
|
||||
|
||||
@Test
|
||||
void compressionString_usesServiceClassLoader() {
|
||||
// Create a class loader that cannot load CompressorProvider services
|
||||
ComponentLoader emptyComponentLoader =
|
||||
ComponentLoader.forClassLoader(new URLClassLoader(new URL[0], null));
|
||||
builder.setComponentLoader(emptyComponentLoader);
|
||||
|
||||
// This should still work because gzip compressor is hardcoded
|
||||
builder.setCompression("gzip");
|
||||
assertThat(builder).extracting("compressor").isEqualTo(GzipCompressor.getInstance());
|
||||
|
||||
// This should still work because "none" doesn't require loading services
|
||||
builder.setCompression("none");
|
||||
assertThat(builder).extracting("compressor").isNull();
|
||||
}
|
||||
}
|
|
@ -9,11 +9,10 @@ import static java.util.Collections.emptyMap;
|
|||
import static java.util.Collections.singletonMap;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Streams;
|
||||
import io.github.netmikey.logunit.api.LogCapturer;
|
||||
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||
|
@ -29,10 +28,10 @@ import java.io.UnsupportedEncodingException;
|
|||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
import javax.annotation.Nullable;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
|
@ -306,7 +305,7 @@ abstract class AbstractOtlpStdoutExporterTest<T> {
|
|||
|
||||
@Test
|
||||
void componentProviderConfig() {
|
||||
DeclarativeConfigProperties properties = mock(DeclarativeConfigProperties.class);
|
||||
DeclarativeConfigProperties properties = spy(DeclarativeConfigProperties.empty());
|
||||
T exporter = exporterFromComponentProvider(properties);
|
||||
|
||||
assertThat(exporter).extracting("wrapperJsonObject").isEqualTo(true);
|
||||
|
@ -330,22 +329,22 @@ abstract class AbstractOtlpStdoutExporterTest<T> {
|
|||
@SuppressWarnings("unchecked")
|
||||
protected T exporterFromComponentProvider(DeclarativeConfigProperties properties) {
|
||||
return (T)
|
||||
((ComponentProvider<?>)
|
||||
loadSpi(ComponentProvider.class)
|
||||
.filter(
|
||||
p -> {
|
||||
ComponentProvider<?> c = (ComponentProvider<?>) p;
|
||||
return "otlp_file/development".equals(c.getName())
|
||||
&& c.getType().equals(componentProviderType);
|
||||
})
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("No provider found")))
|
||||
StreamSupport.stream(
|
||||
properties.getComponentLoader().load(ComponentProvider.class).spliterator(), false)
|
||||
.filter(
|
||||
p -> {
|
||||
ComponentProvider<?> c = p;
|
||||
return "otlp_file/development".equals(c.getName())
|
||||
&& c.getType().equals(componentProviderType);
|
||||
})
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("No provider found"))
|
||||
.create(properties);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected T exporterFromProvider(ConfigProperties config) {
|
||||
Object provider = loadProvider();
|
||||
Object provider = loadProvider(config);
|
||||
|
||||
try {
|
||||
return (T)
|
||||
|
@ -358,8 +357,9 @@ abstract class AbstractOtlpStdoutExporterTest<T> {
|
|||
}
|
||||
}
|
||||
|
||||
private Object loadProvider() {
|
||||
return loadSpi(providerClass)
|
||||
private Object loadProvider(ConfigProperties config) {
|
||||
return StreamSupport.stream(
|
||||
config.getComponentLoader().load(providerClass).spliterator(), false)
|
||||
.filter(
|
||||
p -> {
|
||||
try {
|
||||
|
@ -372,8 +372,4 @@ abstract class AbstractOtlpStdoutExporterTest<T> {
|
|||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("No provider found"));
|
||||
}
|
||||
|
||||
protected static Stream<?> loadSpi(Class<?> type) {
|
||||
return Streams.stream(ServiceLoader.load(type, type.getClassLoader()).iterator());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.exporter.logging.otlp;
|
|||
|
||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
@ -81,7 +81,7 @@ class OtlpStdoutMetricExporterTest
|
|||
|
||||
@Test
|
||||
void componentProviderMetricConfig() {
|
||||
DeclarativeConfigProperties properties = mock(DeclarativeConfigProperties.class);
|
||||
DeclarativeConfigProperties properties = spy(DeclarativeConfigProperties.empty());
|
||||
when(properties.getString("temporality_preference")).thenReturn("DELTA");
|
||||
when(properties.getString("default_histogram_aggregation"))
|
||||
.thenReturn("BASE2_EXPONENTIAL_BUCKET_HISTOGRAM");
|
||||
|
|
|
@ -10,9 +10,8 @@ import static java.util.Objects.requireNonNull;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorProvider;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorUtil;
|
||||
import io.opentelemetry.exporter.internal.http.HttpExporterBuilder;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.exporter.otlp.internal.OtlpUserAgent;
|
||||
|
@ -112,13 +111,12 @@ public final class OtlpHttpLogRecordExporterBuilder {
|
|||
|
||||
/**
|
||||
* Sets the method used to compress payloads. If unset, compression is disabled. Compression
|
||||
* method "gzip" and "none" are supported out of the box. Support for additional compression
|
||||
* methods is available by implementing {@link Compressor} and {@link CompressorProvider}.
|
||||
* method "gzip" and "none" are supported out of the box. Additional compression methods can be
|
||||
* supported by providing custom {@link Compressor} implementations via the service loader.
|
||||
*/
|
||||
public OtlpHttpLogRecordExporterBuilder setCompression(String compressionMethod) {
|
||||
requireNonNull(compressionMethod, "compressionMethod");
|
||||
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
|
||||
delegate.setCompression(compressor);
|
||||
delegate.setCompression(compressionMethod);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -245,13 +243,20 @@ public final class OtlpHttpLogRecordExporterBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the {@link ClassLoader} used to load the sender API.
|
||||
* Set the {@link ClassLoader} used to load the sender API. Variant of {@link
|
||||
* #setComponentLoader(ComponentLoader)}.
|
||||
*
|
||||
* @since 1.48.0
|
||||
*/
|
||||
public OtlpHttpLogRecordExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
|
||||
requireNonNull(serviceClassLoader, "serviceClassLoader");
|
||||
delegate.setServiceClassLoader(serviceClassLoader);
|
||||
return setComponentLoader(ComponentLoader.forClassLoader(serviceClassLoader));
|
||||
}
|
||||
|
||||
/** Set the {@link ComponentLoader} used to load the sender API. */
|
||||
public OtlpHttpLogRecordExporterBuilder setComponentLoader(ComponentLoader componentLoader) {
|
||||
requireNonNull(componentLoader, "componentLoader");
|
||||
delegate.setComponentLoader(componentLoader);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,9 +10,8 @@ import static java.util.Objects.requireNonNull;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorProvider;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorUtil;
|
||||
import io.opentelemetry.exporter.internal.http.HttpExporterBuilder;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.exporter.otlp.internal.OtlpUserAgent;
|
||||
|
@ -132,13 +131,12 @@ public final class OtlpHttpMetricExporterBuilder {
|
|||
|
||||
/**
|
||||
* Sets the method used to compress payloads. If unset, compression is disabled. Compression
|
||||
* method "gzip" and "none" are supported out of the box. Support for additional compression
|
||||
* methods is available by implementing {@link Compressor} and {@link CompressorProvider}.
|
||||
* method "gzip" and "none" are supported out of the box. Additional compression methods can be
|
||||
* supported by providing custom {@link Compressor} implementations via the service loader.
|
||||
*/
|
||||
public OtlpHttpMetricExporterBuilder setCompression(String compressionMethod) {
|
||||
requireNonNull(compressionMethod, "compressionMethod");
|
||||
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
|
||||
delegate.setCompression(compressor);
|
||||
delegate.setCompression(compressionMethod);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -304,13 +302,20 @@ public final class OtlpHttpMetricExporterBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the {@link ClassLoader} used to load the sender API.
|
||||
* Set the {@link ClassLoader} used to load the sender API. Variant of {@link
|
||||
* #setComponentLoader(ComponentLoader)}.
|
||||
*
|
||||
* @since 1.48.0
|
||||
*/
|
||||
public OtlpHttpMetricExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
|
||||
requireNonNull(serviceClassLoader, "serviceClassLoader");
|
||||
delegate.setServiceClassLoader(serviceClassLoader);
|
||||
return setComponentLoader(ComponentLoader.forClassLoader(serviceClassLoader));
|
||||
}
|
||||
|
||||
/** Set the {@link ComponentLoader} used to load the sender API. */
|
||||
public OtlpHttpMetricExporterBuilder setComponentLoader(ComponentLoader componentLoader) {
|
||||
requireNonNull(componentLoader, "componentLoader");
|
||||
delegate.setComponentLoader(componentLoader);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,9 +10,8 @@ import static java.util.Objects.requireNonNull;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.compression.Compressor;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorProvider;
|
||||
import io.opentelemetry.exporter.internal.compression.CompressorUtil;
|
||||
import io.opentelemetry.exporter.internal.http.HttpExporterBuilder;
|
||||
import io.opentelemetry.exporter.internal.marshal.Marshaler;
|
||||
import io.opentelemetry.exporter.otlp.internal.OtlpUserAgent;
|
||||
|
@ -112,13 +111,12 @@ public final class OtlpHttpSpanExporterBuilder {
|
|||
|
||||
/**
|
||||
* Sets the method used to compress payloads. If unset, compression is disabled. Compression
|
||||
* method "gzip" and "none" are supported out of the box. Support for additional compression
|
||||
* methods is available by implementing {@link Compressor} and {@link CompressorProvider}.
|
||||
* method "gzip" and "none" are supported out of the box. Additional compression methods can be
|
||||
* supported by providing custom {@link Compressor} implementations via the service loader.
|
||||
*/
|
||||
public OtlpHttpSpanExporterBuilder setCompression(String compressionMethod) {
|
||||
requireNonNull(compressionMethod, "compressionMethod");
|
||||
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
|
||||
delegate.setCompression(compressor);
|
||||
delegate.setCompression(compressionMethod);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -246,13 +244,20 @@ public final class OtlpHttpSpanExporterBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the {@link ClassLoader} used to load the sender API.
|
||||
* Set the {@link ClassLoader} used to load the sender API. Variant of {@link
|
||||
* #setComponentLoader(ComponentLoader)}.
|
||||
*
|
||||
* @since 1.48.0
|
||||
*/
|
||||
public OtlpHttpSpanExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
|
||||
requireNonNull(serviceClassLoader, "serviceClassLoader");
|
||||
delegate.setServiceClassLoader(serviceClassLoader);
|
||||
return setComponentLoader(ComponentLoader.forClassLoader(serviceClassLoader));
|
||||
}
|
||||
|
||||
/** Set the {@link ComponentLoader} used to load the sender API. */
|
||||
public OtlpHttpSpanExporterBuilder setComponentLoader(ComponentLoader componentLoader) {
|
||||
requireNonNull(componentLoader, "componentLoader");
|
||||
delegate.setComponentLoader(componentLoader);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
package io.opentelemetry.exporter.otlp.internal;
|
||||
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
|
||||
|
@ -53,6 +54,7 @@ public final class OtlpConfigUtil {
|
|||
public static void configureOtlpExporterBuilder(
|
||||
String dataType,
|
||||
ConfigProperties config,
|
||||
Consumer<ComponentLoader> setComponentLoader,
|
||||
Consumer<String> setEndpoint,
|
||||
BiConsumer<String, String> addHeader,
|
||||
Consumer<String> setCompression,
|
||||
|
@ -61,6 +63,8 @@ public final class OtlpConfigUtil {
|
|||
BiConsumer<byte[], byte[]> setClientTls,
|
||||
Consumer<RetryPolicy> setRetryPolicy,
|
||||
Consumer<MemoryMode> setMemoryMode) {
|
||||
setComponentLoader.accept(config.getComponentLoader());
|
||||
|
||||
String protocol = getOtlpProtocol(dataType, config);
|
||||
boolean isHttpProtobuf = protocol.equals(PROTOCOL_HTTP_PROTOBUF);
|
||||
URL endpoint =
|
||||
|
|
|
@ -11,6 +11,7 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.readFileByt
|
|||
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.validateEndpoint;
|
||||
|
||||
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
|
||||
import io.opentelemetry.common.ComponentLoader;
|
||||
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
|
||||
|
@ -47,6 +48,7 @@ public final class OtlpDeclarativeConfigUtil {
|
|||
public static void configureOtlpExporterBuilder(
|
||||
String dataType,
|
||||
DeclarativeConfigProperties config,
|
||||
Consumer<ComponentLoader> setComponentLoader,
|
||||
Consumer<String> setEndpoint,
|
||||
BiConsumer<String, String> addHeader,
|
||||
Consumer<String> setCompression,
|
||||
|
@ -56,6 +58,8 @@ public final class OtlpDeclarativeConfigUtil {
|
|||
Consumer<RetryPolicy> setRetryPolicy,
|
||||
Consumer<MemoryMode> setMemoryMode,
|
||||
boolean isHttpProtobuf) {
|
||||
setComponentLoader.accept(config.getComponentLoader());
|
||||
|
||||
URL endpoint = validateEndpoint(config.getString("endpoint"), isHttpProtobuf);
|
||||
if (endpoint != null) {
|
||||
setEndpoint.accept(endpoint.toString());
|
||||
|
|
|
@ -39,6 +39,7 @@ public class OtlpGrpcLogRecordExporterComponentProvider
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_LOGS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -39,6 +39,7 @@ public class OtlpGrpcMetricExporterComponentProvider implements ComponentProvide
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_METRICS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -38,6 +38,7 @@ public class OtlpGrpcSpanExporterComponentProvider implements ComponentProvider<
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_TRACES,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -39,6 +39,7 @@ public class OtlpHttpLogRecordExporterComponentProvider
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_LOGS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -39,6 +39,7 @@ public class OtlpHttpMetricExporterComponentProvider implements ComponentProvide
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_METRICS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -38,6 +38,7 @@ public class OtlpHttpSpanExporterComponentProvider implements ComponentProvider<
|
|||
OtlpDeclarativeConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_TRACES,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -45,6 +45,7 @@ public class OtlpLogRecordExporterProvider
|
|||
OtlpConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_LOGS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
@ -62,6 +63,7 @@ public class OtlpLogRecordExporterProvider
|
|||
OtlpConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_LOGS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
|
@ -38,6 +38,7 @@ public class OtlpMetricExporterProvider implements ConfigurableMetricExporterPro
|
|||
OtlpConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_METRICS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
@ -58,6 +59,7 @@ public class OtlpMetricExporterProvider implements ConfigurableMetricExporterPro
|
|||
OtlpConfigUtil.configureOtlpExporterBuilder(
|
||||
DATA_TYPE_METRICS,
|
||||
config,
|
||||
builder::setComponentLoader,
|
||||
builder::setEndpoint,
|
||||
builder::addHeader,
|
||||
builder::setCompression,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue