diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c87b9935e8..9441d40269 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -79,7 +79,7 @@ body: - type: input attributes: label: Runtime Version - description: What .NET runtime version did you use? (e.g. `net462`, `net48`, `netcoreapp3.1`, `net6.0` etc. You can find this information from the `*.csproj` file) + description: What .NET runtime version did you use? (e.g. `net462`, `net48`, `net8.0` etc. You can find this information from the `*.csproj` file) validations: required: true diff --git a/.github/codecov.yml b/.github/codecov.yml index b235a093c0..ae835620c7 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -24,7 +24,6 @@ comment: ignore: - "**.md" - - "src/Shared" # copied from main OTel project and has code coverage there - "test" - "examples" - "build" @@ -32,26 +31,41 @@ ignore: - ".vscode" flags: - unittests-Solution: + unittests-Exporter.Geneva: carryforward: true paths: - - src + - src/OpenTelemetry.Exporter.Geneva - unittests-Exporter.Geneva: + unittests-Exporter.InfluxDB: carryforward: true paths: - - src/OpenTelemetry.Exporter.Geneva + - src/OpenTelemetry.Exporter.InfluxDB + + unittests-Exporter.Instana: + carryforward: true + paths: + - src/OpenTelemetry.Exporter.Instana unittests-Exporter.OneCollector: carryforward: true paths: - src/OpenTelemetry.Exporter.OneCollector + unittests-Exporter.Stackdriver: + carryforward: true + paths: + - src/OpenTelemetry.Exporter.Stackdriver + unittests-Extensions: carryforward: true paths: - src/OpenTelemetry.Extensions + unittests-Extensions.Enrichment: + carryforward: true + paths: + - src/OpenTelemetry.Extensions.Enrichment + unittests-Instrumentation.AspNet: carryforward: true paths: @@ -63,26 +77,59 @@ flags: paths: - src/OpenTelemetry.Instrumentation.AspNetCore + unittests-Instrumentation.AWS: + carryforward: true + paths: + - src/OpenTelemetry.Extensions.AWS + - src/OpenTelemetry.Instrumentation.AWS + - src/OpenTelemetry.Instrumentation.AWSLambda + + # Note: No unit tests currently for Cassandra being run in CI. + #unittests-Instrumentation.Cassandra: + # carryforward: true + # paths: + # - src/OpenTelemetry.Instrumentation.Cassandra + unittests-Instrumentation.ConfluentKafka: carryforward: true paths: - src/OpenTelemetry.Instrumentation.ConfluentKafka + unittests-Instrumentation.ElasticsearchClient: + carryforward: true + paths: + - src/OpenTelemetry.Instrumentation.ElasticsearchClient + + unittests-Instrumentation.EntityFrameworkCore: + carryforward: true + paths: + - src/OpenTelemetry.Instrumentation.EntityFrameworkCore + unittests-Instrumentation.EventCounters: carryforward: true paths: - src/OpenTelemetry.Instrumentation.EventCounters - unittests-Instrumentation.Http: + unittests-Instrumentation.GrpcCore: carryforward: true paths: - - src/OpenTelemetry.Instrumentation.Http + - src/OpenTelemetry.Instrumentation.GrpcCore unittests-Instrumentation.GrpcNetClient: carryforward: true paths: - src/OpenTelemetry.Instrumentation.GrpcNetClient + unittests-Instrumentation.Hangfire: + carryforward: true + paths: + - src/OpenTelemetry.Instrumentation.Hangfire + + unittests-Instrumentation.Http: + carryforward: true + paths: + - src/OpenTelemetry.Instrumentation.Http + unittests-Instrumentation.Owin: carryforward: true paths: @@ -93,6 +140,11 @@ flags: paths: - src/OpenTelemetry.Instrumentation.Process + unittests-Instrumentation.Quartz: + carryforward: true + paths: + - src/OpenTelemetry.Instrumentation.Quartz + unittests-Instrumentation.Runtime: carryforward: true paths: @@ -119,11 +171,21 @@ flags: - src/OpenTelemetry.PersistentStorage.Abstractions - src/OpenTelemetry.PersistentStorage.FileSystem + unittests-Resources.AWS: + carryforward: true + paths: + - src/OpenTelemetry.Resources.AWS + unittests-Resources.Azure: carryforward: true paths: - src/OpenTelemetry.Resources.Azure + unittests-Resources.Container: + carryforward: true + paths: + - src/OpenTelemetry.Resources.Container + unittests-Resources.Gcp: carryforward: true paths: @@ -149,7 +211,18 @@ flags: paths: - src/OpenTelemetry.Resources.ProcessRuntime - unittests-SemanticConventions: + unittests-Sampler.AWS: + carryforward: true + paths: + - src/OpenTelemetry.Sampler.AWS + + # Note: No unit tests currently for SemanticConventions being run in CI. + #unittests-SemanticConventions: + # carryforward: true + # paths: + # - src/OpenTelemetry.SemanticConventions + + unittests-Contrib.Shared.Tests: carryforward: true paths: - - src/OpenTelemetry.SemanticConventions + - src/Shared diff --git a/.github/component_owners.yml b/.github/component_owners.yml index ba7131f8eb..237de74f1f 100644 --- a/.github/component_owners.yml +++ b/.github/component_owners.yml @@ -29,6 +29,7 @@ components: src/OpenTelemetry.Instrumentation.AWS/: - srprash - ppittle + - muhammad-othman src/OpenTelemetry.Instrumentation.AWSLambda/: - rypdal - Oberon00 @@ -131,6 +132,7 @@ components: test/OpenTelemetry.Instrumentation.AWS.Tests/: - srprash - ppittle + - muhammad-othman test/OpenTelemetry.Instrumentation.AWSLambda.Tests/: - rypdal - Oberon00 diff --git a/.github/workflows/Component.BuildTest.yml b/.github/workflows/Component.BuildTest.yml index b4b916c293..8d7a245595 100644 --- a/.github/workflows/Component.BuildTest.yml +++ b/.github/workflows/Component.BuildTest.yml @@ -6,6 +6,10 @@ on: project-name: required: true type: string + run-tests: + required: false + default: true + type: boolean code-cov-name: required: true type: string @@ -18,7 +22,7 @@ on: required: false type: string tfm-list: - default: '[ "net462", "net6.0", "net8.0" ]' + default: '[ "net462", "net8.0" ]' required: false type: string @@ -87,6 +91,7 @@ jobs: run: dotnet build ${{ steps.resolve-project.outputs.project }} --configuration Release --no-restore - name: dotnet test ${{ steps.resolve-project.outputs.title }} + if: ${{ inputs.run-tests }} run: dotnet test ${{ steps.resolve-project.outputs.project }} --collect:"Code Coverage" --results-directory:TestResults --framework ${{ matrix.version }} --configuration Release --no-restore --no-build --logger:"console;verbosity=detailed" -- RunConfiguration.DisableAppDomain=true - name: dotnet pack ${{ steps.resolve-project.outputs.title }} @@ -94,14 +99,15 @@ jobs: run: dotnet pack ${{ steps.resolve-project.outputs.project }} --configuration Release --no-restore --no-build -p:EnablePackageValidation=true - name: Install coverage tool + if: ${{ inputs.run-tests }} run: dotnet tool install -g dotnet-coverage - name: Merging test results - if: ${{ hashFiles('./TestResults/**/*.coverage') != '' }} + if: ${{ inputs.run-tests && hashFiles('./TestResults/**/*.coverage') != '' }} run: dotnet-coverage merge -f cobertura -o ./TestResults/Cobertura.xml ./TestResults/**/*.coverage - name: Upload code coverage ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }} - if: ${{ hashFiles('./TestResults/Cobertura.xml') != '' }} + if: ${{ inputs.run-tests && hashFiles('./TestResults/Cobertura.xml') != '' }} uses: codecov/codecov-action@v4 continue-on-error: true # Note: Don't fail for upload failures env: diff --git a/.github/workflows/ci-Exporter.OneCollector-Integration.yml b/.github/workflows/ci-Exporter.OneCollector-Integration.yml index 4f1a2dd9d2..bac716d202 100644 --- a/.github/workflows/ci-Exporter.OneCollector-Integration.yml +++ b/.github/workflows/ci-Exporter.OneCollector-Integration.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false # ensures the entire test matrix is run, even if one permutation fails matrix: os: [ windows-latest, ubuntu-latest ] - version: [ net462, net6.0, net8.0 ] + version: [ net462, net8.0 ] exclude: - os: ubuntu-latest version: net462 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 28a3db1968..a158adc921 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,12 +30,10 @@ jobs: exporter-onecollector: ['*/OpenTelemetry.Exporter.OneCollector*/**', '!**/*.md'] exporter-stackdriver: ['*/OpenTelemetry.Exporter.Stackdriver*/**', '!**/*.md'] extensions: ['*/OpenTelemetry.Extensions/**', '*/OpenTelemetry.Extensions.Tests/**', '!**/*.md'] - extensions-aws: ['*/OpenTelemetry.Extensions.AWS*/**', '!**/*.md'] extensions-enrichment: ['*/OpenTelemetry.Extensions.Enrichment*/**', '!**/*.md'] instrumentation-aspnet: ['*/OpenTelemetry.Instrumentation.AspNet/**', '*/OpenTelemetry.Instrumentation.AspNet.Tests/**', '*/OpenTelemetry.Instrumentation.OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule.*/**', 'examples/AspNet/**', '!**/*.md'] instrumentation-aspnetcore: ['*/OpenTelemetry.Instrumentation.AspNetCore*/**', '!**/*.md'] - instrumentation-aws: ['*/OpenTelemetry.Instrumentation.AWS/**', '*/OpenTelemetry.Instrumentation.AWS.Tests/**', '!**/*.md'] - instrumentation-aws-lambda: ['*/OpenTelemetry.Instrumentation.AWSLambda/**', '*/OpenTelemetry.Instrumentation.AWSLambda.Tests/**', '!**/*.md'] + instrumentation-aws: ['*/OpenTelemetry.Extensions.AWS*/**', '*/OpenTelemetry.Instrumentation.AWS*/**', '!**/*.md'] instrumentation-cassandra: ['*/OpenTelemetry.Instrumentation.Cassandra*/**', '!**/*.md'] instrumentation-confluentkafka: ['*/OpenTelemetry.Instrumentation.ConfluentKafka*/**', 'examples/kafka/**', '!**/*.md'] instrumentation-elasticsearchclient: ['*/OpenTelemetry.Instrumentation.ElasticsearchClient*/**', '!**/*.md'] @@ -61,7 +59,7 @@ jobs: resources-operatingsystem: ['*/OpenTelemetry.Resources.OperatingSystem/**', '*/OpenTelemetry.Resources.OperatingSystem.Tests/**', '!**/*.md'] resources-process: ['*/OpenTelemetry.Resources.Process/**', '*/OpenTelemetry.Resources.Process.Tests/**', '!**/*.md'] resources-processruntime: ['*/OpenTelemetry.Resources.ProcessRuntime/**', '*/OpenTelemetry.Resources.ProcessRuntime.Tests/**', '!**/*.md'] - sampler-aws: ['*/OpenTelemetry.Sampler.AWS**/**', '!**/*.md'] + sampler-aws: ['*/OpenTelemetry.Sampler.AWS*/**', '!**/*.md'] semanticconventions: ['*/OpenTelemetry.SemanticConventions*/**', '!**/*.md'] lint-md: @@ -151,17 +149,6 @@ jobs: project-name: Component[OpenTelemetry.Extensions] code-cov-name: Extensions - build-test-extensions-aws: - needs: detect-changes - if: | - contains(needs.detect-changes.outputs.changes, 'extensions-aws') - || contains(needs.detect-changes.outputs.changes, 'build') - || contains(needs.detect-changes.outputs.changes, 'shared') - uses: ./.github/workflows/Component.BuildTest.yml - with: - project-name: Component[OpenTelemetry.Extensions.AWS] - code-cov-name: Extensions.AWS - build-test-extensions-enrichment: needs: detect-changes if: | @@ -196,7 +183,7 @@ jobs: with: project-name: OpenTelemetry.Instrumentation.AspNetCore code-cov-name: Instrumentation.AspNetCore - tfm-list: '[ "net6.0", "net8.0" ]' + tfm-list: '[ "net8.0" ]' build-test-instrumentation-aws: needs: detect-changes @@ -206,21 +193,9 @@ jobs: || contains(needs.detect-changes.outputs.changes, 'shared') uses: ./.github/workflows/Component.BuildTest.yml with: - project-name: Component[OpenTelemetry.Instrumentation.AWS] + project-name: OpenTelemetry.Instrumentation.AWS code-cov-name: Instrumentation.AWS - build-test-instrumentation-awslambda: - needs: detect-changes - if: | - contains(needs.detect-changes.outputs.changes, 'instrumentation-awslambda') - || contains(needs.detect-changes.outputs.changes, 'build') - || contains(needs.detect-changes.outputs.changes, 'shared') - uses: ./.github/workflows/Component.BuildTest.yml - with: - project-name: Component[OpenTelemetry.Instrumentation.AWSLambda] - code-cov-name: Instrumentation.AWSLambda - tfm-list: '[ "net6.0", "net8.0" ]' - build-test-instrumentation-cassandra: needs: detect-changes if: | @@ -231,6 +206,11 @@ jobs: with: project-name: Component[OpenTelemetry.Instrumentation.Cassandra] code-cov-name: Instrumentation.Cassandra + run-tests: false + # Note: There is a unit test project for Cassandra but it only contains + # integration tests, which get skipped. This results in empty coverage + # files which messes with codecov. Enable tests if any real unit tests + # get added. build-test-instrumentation-confluentkafka: needs: detect-changes @@ -285,7 +265,7 @@ jobs: with: project-name: OpenTelemetry.Instrumentation.EventCounters code-cov-name: Instrumentation.EventCounters - tfm-list: '[ "net6.0", "net8.0" ]' + tfm-list: '[ "net8.0" ]' build-test-instrumentation-grpccore: needs: detect-changes @@ -524,7 +504,7 @@ jobs: build-test-sampler-aws: needs: detect-changes if: | - contains(needs.detect-changes.outputs.changes, 'resources-sampler-aws') + contains(needs.detect-changes.outputs.changes, 'sampler-aws') || contains(needs.detect-changes.outputs.changes, 'build') || contains(needs.detect-changes.outputs.changes, 'shared') uses: ./.github/workflows/Component.BuildTest.yml @@ -542,6 +522,7 @@ jobs: with: project-name: OpenTelemetry.SemanticConventions code-cov-name: SemanticConventions + run-tests: false # Note: No test project build-test-contrib-shared-tests: needs: detect-changes @@ -563,7 +544,6 @@ jobs: || contains(needs.detect-changes.outputs.changes, 'extensions-enrichment') || contains(needs.detect-changes.outputs.changes, 'instrumentation-aspnetcore') || contains(needs.detect-changes.outputs.changes, 'instrumentation-aws') - || contains(needs.detect-changes.outputs.changes, 'instrumentation-awslambda') || contains(needs.detect-changes.outputs.changes, 'instrumentation-confluentkafka') || contains(needs.detect-changes.outputs.changes, 'instrumentation-eventcounters') || contains(needs.detect-changes.outputs.changes, 'instrumentation-grpcnetclient') @@ -598,12 +578,10 @@ jobs: build-test-exporter-onecollector, build-test-exporter-stackdriver, build-test-extensions, - build-test-extensions-aws, build-test-extensions-enrichment, build-test-instrumentation-aspnet, build-test-instrumentation-aspnetcore, build-test-instrumentation-aws, - build-test-instrumentation-awslambda, build-test-instrumentation-cassandra, build-test-instrumentation-confluentkafka, build-test-instrumentation-elasticsearchclient, diff --git a/build/Common.nonprod.props b/build/Common.nonprod.props index 4ba068d4b2..255792353f 100644 --- a/build/Common.nonprod.props +++ b/build/Common.nonprod.props @@ -25,7 +25,8 @@ Refer to https://docs.microsoft.com/en-us/nuget/concepts/package-versioning for semver syntax. --> [0.13.12,0.14) - 8.0.0 + 8.0.1 + 8.0.1 [17.11.1,18.0) $(OpenTelemetryCoreLatestVersion) net8.0;net6.0 diff --git a/build/Common.props b/build/Common.props index 9a5fbde756..d224b292ad 100644 --- a/build/Common.props +++ b/build/Common.props @@ -35,8 +35,8 @@ [5.0.0,6.0) [8.0.1,) [2.1.0,5.0) - 8.0.0 - 8.0.0 + [8.0.0,) + [8.0.0,) [1.0.3,2.0) [4.2.2,5.0) [3.11.0-beta1.23525.2] @@ -49,8 +49,13 @@ [3.16.0,4.0) [1.2.0-beta.556,2.0) [4.3.4,) - 4.7.0 - [6.0.0,) + [4.7.0,) + + + [4.7.2,) + [4.7.2,) + [6.0.10,) + [8.0.5,) diff --git a/build/Common.targets b/build/Common.targets index faf2349bae..37e016c07d 100644 --- a/build/Common.targets +++ b/build/Common.targets @@ -1,3 +1,23 @@ + + + + + + + + diff --git a/build/Projects/OpenTelemetry.Instrumentation.AWS.proj b/build/Projects/OpenTelemetry.Instrumentation.AWS.proj new file mode 100644 index 0000000000..3b569606ba --- /dev/null +++ b/build/Projects/OpenTelemetry.Instrumentation.AWS.proj @@ -0,0 +1,41 @@ + + + + $([System.IO.Directory]::GetParent($(MSBuildThisFileDirectory)).Parent.Parent.FullName) + Instrumentation.AWS- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/docker-compose.net6.0.yml b/build/docker-compose.net6.0.yml deleted file mode 100644 index 099f100727..0000000000 --- a/build/docker-compose.net6.0.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.7' - -services: - tests: - build: - args: - PUBLISH_FRAMEWORK: net6.0 - TEST_SDK_VERSION: "6.0" - BUILD_SDK_VERSION: "8.0" diff --git a/examples/AspNet/Examples.AspNet.csproj b/examples/AspNet/Examples.AspNet.csproj index f25b7b5887..265a3c3319 100644 --- a/examples/AspNet/Examples.AspNet.csproj +++ b/examples/AspNet/Examples.AspNet.csproj @@ -57,7 +57,7 @@ - + diff --git a/examples/kafka/Examples.ConfluentKafka.csproj b/examples/kafka/Examples.ConfluentKafka.csproj index c10dbfcb21..3f60ecbc1b 100644 --- a/examples/kafka/Examples.ConfluentKafka.csproj +++ b/examples/kafka/Examples.ConfluentKafka.csproj @@ -10,12 +10,10 @@ - + - - diff --git a/examples/wcf/client-core/Examples.Wcf.Client.DotNet.csproj b/examples/wcf/client-core/Examples.Wcf.Client.DotNet.csproj index ac31365665..75dc57fc09 100644 --- a/examples/wcf/client-core/Examples.Wcf.Client.DotNet.csproj +++ b/examples/wcf/client-core/Examples.Wcf.Client.DotNet.csproj @@ -8,11 +8,9 @@ - - + + - - diff --git a/opentelemetry-dotnet-contrib.sln b/opentelemetry-dotnet-contrib.sln index 011dc08d79..2d829e94fd 100644 --- a/opentelemetry-dotnet-contrib.sln +++ b/opentelemetry-dotnet-contrib.sln @@ -55,7 +55,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{824BD1DE build\Common.props = build\Common.props build\Common.targets = build\Common.targets build\debug.snk = build\debug.snk - build\docker-compose.net6.0.yml = build\docker-compose.net6.0.yml build\docker-compose.net8.0.yml = build\docker-compose.net8.0.yml build\opentelemetry-icon-color.png = build\opentelemetry-icon-color.png build\OpenTelemetryContrib.prod.ruleset = build\OpenTelemetryContrib.prod.ruleset @@ -295,6 +294,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projects", "Projects", "{04 build\Projects\OpenTelemetry.Extensions.Enrichment.proj = build\Projects\OpenTelemetry.Extensions.Enrichment.proj build\Projects\OpenTelemetry.Instrumentation.AspNet.proj = build\Projects\OpenTelemetry.Instrumentation.AspNet.proj build\Projects\OpenTelemetry.Instrumentation.AspNetCore.proj = build\Projects\OpenTelemetry.Instrumentation.AspNetCore.proj + build\Projects\OpenTelemetry.Instrumentation.AWS.proj = build\Projects\OpenTelemetry.Instrumentation.AWS.proj build\Projects\OpenTelemetry.Instrumentation.ConfluentKafka.proj = build\Projects\OpenTelemetry.Instrumentation.ConfluentKafka.proj build\Projects\OpenTelemetry.Instrumentation.EventCounters.proj = build\Projects\OpenTelemetry.Instrumentation.EventCounters.proj build\Projects\OpenTelemetry.Instrumentation.GrpcCore.proj = build\Projects\OpenTelemetry.Instrumentation.GrpcCore.proj diff --git a/src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md b/src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md index 47b1b1f495..e1fbedc7df 100644 --- a/src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md @@ -5,6 +5,15 @@ * Drop support for .NET 6 as this target is no longer supported. ([#2117](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2117)) +* Added support for exporting metrics via + [user_events](https://docs.kernel.org/trace/user_events.html) on Linux when + OTLP protobuf encoding is enabled via the + `PrivatePreviewEnableOtlpProtobufEncoding=true` connection string switch. With + this, `PrivatePreviewEnableOtlpProtobufEncoding=true` is now supported on both + Widows and Linux. Windows uses ETW as transport, while Linux uses user_events + as transport. + ([#2113](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2113)) + ## 1.9.0 Released 2024-Jun-21 diff --git a/src/OpenTelemetry.Exporter.Geneva/EventNameExportMode.cs b/src/OpenTelemetry.Exporter.Geneva/EventNameExportMode.cs index ab0183c1e5..dd87d4e8c9 100644 --- a/src/OpenTelemetry.Exporter.Geneva/EventNameExportMode.cs +++ b/src/OpenTelemetry.Exporter.Geneva/EventNameExportMode.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - namespace OpenTelemetry.Exporter.Geneva; /// diff --git a/src/OpenTelemetry.Exporter.Geneva/ExceptionStackExportMode.cs b/src/OpenTelemetry.Exporter.Geneva/ExceptionStackExportMode.cs index de9e62607c..9030a32b9c 100644 --- a/src/OpenTelemetry.Exporter.Geneva/ExceptionStackExportMode.cs +++ b/src/OpenTelemetry.Exporter.Geneva/ExceptionStackExportMode.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - namespace OpenTelemetry.Exporter.Geneva; /// diff --git a/src/OpenTelemetry.Exporter.Geneva/External/TraceLoggingDynamic.cs b/src/OpenTelemetry.Exporter.Geneva/External/TraceLoggingDynamic.cs index e2cea7bb1f..ef2395dad8 100644 --- a/src/OpenTelemetry.Exporter.Geneva/External/TraceLoggingDynamic.cs +++ b/src/OpenTelemetry.Exporter.Geneva/External/TraceLoggingDynamic.cs @@ -71,7 +71,6 @@ Most ETW decoding tools are unable to decode an event with more than 128 fields. */ -#nullable enable namespace OpenTelemetry.Exporter.Geneva.External; diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaBaseExporter.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaBaseExporter.cs index 452ae78f1e..0dcfe55ce3 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaBaseExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaBaseExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - namespace OpenTelemetry.Exporter.Geneva; /// diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaExporterHelperExtensions.cs index fda33995c1..380000d30c 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaExporterHelperExtensions.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaExporterOptions.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaExporterOptions.cs index 849b294894..2d508399f4 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaExporterOptions.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaExporterOptions.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Text; using OpenTelemetry.Internal; diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaLogExporter.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaLogExporter.cs index 199e46ea08..b7970d1169 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaLogExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaLogExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Runtime.InteropServices; using OpenTelemetry.Exporter.Geneva.MsgPack; using OpenTelemetry.Exporter.Geneva.Tld; diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaLoggingExtensions.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaLoggingExtensions.cs index bc6bc3371e..3a0e4d1189 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaLoggingExtensions.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaLoggingExtensions.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; diff --git a/src/OpenTelemetry.Exporter.Geneva/GenevaTraceExporter.cs b/src/OpenTelemetry.Exporter.Geneva/GenevaTraceExporter.cs index 5d472e2519..9393e0aa85 100644 --- a/src/OpenTelemetry.Exporter.Geneva/GenevaTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/GenevaTraceExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using System.Runtime.InteropServices; using OpenTelemetry.Exporter.Geneva.MsgPack; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/ConnectionStringBuilder.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/ConnectionStringBuilder.cs index fa8515ba0a..169f3f1a7e 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/ConnectionStringBuilder.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/ConnectionStringBuilder.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics.CodeAnalysis; using System.Globalization; using OpenTelemetry.Exporter.Geneva.Transports; @@ -244,6 +242,16 @@ public string ParseUnixDomainSocketPath() } } + public bool TryGetMetricsAccountAndNamespace( + [NotNullWhen(true)] out string? metricsAccount, + [NotNullWhen(true)] out string? metricsNamespace) + { + var hasAccount = this.parts.TryGetValue(nameof(this.Account), out metricsAccount); + var hasNamespace = this.parts.TryGetValue(nameof(this.Namespace), out metricsNamespace); + + return hasAccount && hasNamespace; + } + /// /// Replace first charater of string if it matches with with . /// diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/ExporterEventSource.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/ExporterEventSource.cs index 107acaf52d..19c4d4014d 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/ExporterEventSource.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/ExporterEventSource.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics.Tracing; using OpenTelemetry.Internal; @@ -18,6 +16,9 @@ internal sealed class ExporterEventSource : EventSource private const int EVENT_ID_ERROR = 4; // Other common exporter exceptions private const int EVENT_ID_OTLP_PROTOBUF_METRIC = 5; // Failed to serialize metric private const int EVENT_ID_COMPLETED_EXPORT = 6; // Completed export + private const int EVENT_ID_TRANSPORT_ERROR = 7; // Transport error + private const int EVENT_ID_TRANSPORT_EXCEPTION = 8; // Transport exception + private const int EVENT_ID_TRANSPORT_INFO = 9; // Transport info [NonEvent] public void FailedToSendTraceData(Exception ex) @@ -76,6 +77,16 @@ public void FailedToSerializeMetric(string metricName, Exception ex) } } + [NonEvent] + public void TransportException(string transportType, string message, Exception ex) + { + if (Log.IsEnabled(EventLevel.Error, EventKeywords.All)) + { + // TODO: Do not hit ETW size limit even for external library exception stack. + this.TransportException(transportType, message, ex.ToInvariantString()); + } + } + [Event(EVENT_ID_TRACE, Message = "Exporter failed to send trace data. Exception: {0}", Level = EventLevel.Error)] public void FailedToSendTraceData(string error) { @@ -111,4 +122,22 @@ public void ExportCompleted(string exporterName) { this.WriteEvent(EVENT_ID_COMPLETED_EXPORT, exporterName); } + + [Event(EVENT_ID_TRANSPORT_ERROR, Message = "Transport '{0}' error. Message: {1}", Level = EventLevel.Error)] + public void TransportError(string transportType, string error) + { + this.WriteEvent(EVENT_ID_TRANSPORT_ERROR, transportType, error); + } + + [Event(EVENT_ID_TRANSPORT_EXCEPTION, Message = "Transport '{0}' error. Message: {1}, Exception: {2}", Level = EventLevel.Error)] + public void TransportException(string transportType, string error, string ex) + { + this.WriteEvent(EVENT_ID_TRANSPORT_EXCEPTION, transportType, error, ex); + } + + [Event(EVENT_ID_TRANSPORT_INFO, Message = "Transport '{0}' information. Message: {1}", Level = EventLevel.Informational)] + public void TransportInformation(string transportType, string error) + { + this.WriteEvent(EVENT_ID_TRANSPORT_INFO, transportType, error); + } } diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MessagePackSerializer.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MessagePackSerializer.cs index ca0a5a4ce9..dd5c0312ac 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MessagePackSerializer.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MessagePackSerializer.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - #if NET using System.Buffers.Binary; #endif diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackExporter.cs index 3d7bb7def1..cf91ac510d 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - #if NET using System.Collections.Frozen; #endif diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackLogExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackLogExporter.cs index 4371d7d373..0c845aaa9f 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackLogExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackLogExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - #if NET using System.Collections.Frozen; #endif @@ -175,7 +173,6 @@ internal ArraySegment SerializeLogRecord(LogRecord logRecord) // `LogRecord.State` and `LogRecord.StateValues` were marked Obsolete in https://github.com/open-telemetry/opentelemetry-dotnet/pull/4334 #pragma warning disable 0618 IReadOnlyList>? listKvp; - if (logRecord.StateValues != null) { listKvp = logRecord.StateValues; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackTraceExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackTraceExporter.cs index 9c0d15beef..675305ad16 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/MsgPack/MsgPackTraceExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - #if NET using System.Collections.Frozen; #endif diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantActivityExportProcessor.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantActivityExportProcessor.cs index 59e732a10d..fff9eebf9c 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantActivityExportProcessor.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantActivityExportProcessor.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; namespace OpenTelemetry.Exporter.Geneva; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantExportProcessor.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantExportProcessor.cs index b53e74861f..b0da2159fc 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantExportProcessor.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/ReentrantExportProcessor.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Linq.Expressions; using System.Reflection; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Schema.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Schema.cs index 39a9fb2931..b665743364 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Schema.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Schema.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - namespace OpenTelemetry.Exporter.Geneva; internal static class Schema diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/TableNameSerializer.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/TableNameSerializer.cs index 15282d29ae..db60ffe605 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/TableNameSerializer.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/TableNameSerializer.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using System.Runtime.CompilerServices; using System.Text; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/JsonSerializer.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/JsonSerializer.cs index 8249dc0b50..35a2d8a960 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/JsonSerializer.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/JsonSerializer.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Globalization; using System.Runtime.CompilerServices; using System.Text; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldExporter.cs index 9c3712a94c..ca52b09a1f 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldLogExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldLogExporter.cs index 96e7062a11..4aeb5895e8 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldLogExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldLogExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldTraceExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldTraceExporter.cs index 062e97c875..4e1ae97ceb 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/TldTraceExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics; using System.Globalization; using System.Text; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/UncheckedASCIIEncoding.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/UncheckedASCIIEncoding.cs index 04085f22c2..25c4f19591 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/UncheckedASCIIEncoding.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Tld/UncheckedASCIIEncoding.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Text; using OpenTelemetry.Internal; diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/EtwDataTransport.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/EtwDataTransport.cs index d25d88fcf3..16797ef848 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/EtwDataTransport.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/EtwDataTransport.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - #if NET using System.Diagnostics.CodeAnalysis; #endif diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/IDataTransport.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/IDataTransport.cs index 36746697ee..daccc87059 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/IDataTransport.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/IDataTransport.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - namespace OpenTelemetry.Exporter.Geneva.Transports; internal interface IDataTransport diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketDataTransport.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketDataTransport.cs index 741daa7516..cf395e03f8 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketDataTransport.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketDataTransport.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Diagnostics.CodeAnalysis; using System.Net; using System.Net.Sockets; @@ -73,7 +71,7 @@ private bool Connect() } catch (Exception ex) { - ExporterEventSource.Log.ExporterException("UDS Connect failed.", ex); + ExporterEventSource.Log.TransportException(nameof(UnixDomainSocketDataTransport), "Attempt to connect to socket failed. Connection will be retried periodically until established.", ex); return false; } diff --git a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketEndPoint.cs b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketEndPoint.cs index 62f87ce1f1..a4d6ca0fc6 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketEndPoint.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Internal/Transports/UnixDomainSocketEndPoint.cs @@ -3,8 +3,6 @@ #if !NET -#nullable enable - using System.Text; using OpenTelemetry.Internal; diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporter.cs index ade4ff8593..ed78dda6ee 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporter.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Reflection; using System.Text.RegularExpressions; using OpenTelemetry.Exporter.Geneva.Metrics; diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterExtensions.cs index 9f876453d4..c2642a17ed 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterExtensions.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using OpenTelemetry.Internal; diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterOptions.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterOptions.cs index ca14f2d939..f00ab46b77 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterOptions.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/GenevaMetricExporterOptions.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#nullable enable - using System.Globalization; using OpenTelemetry.Internal; diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/MetricSerializer.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/MetricSerializer.cs index 07912927c2..14634665da 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/MetricSerializer.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/MetricSerializer.cs @@ -174,11 +174,11 @@ internal static class MetricSerializer /// Index of the buffer. /// The value. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SerializeString(byte[] buffer, ref int bufferIndex, string value) + public static void SerializeString(byte[] buffer, ref int bufferIndex, string? value) { if (!string.IsNullOrEmpty(value)) { - if (bufferIndex + value.Length + sizeof(short) >= buffer.Length) + if (bufferIndex + value!.Length + sizeof(short) >= buffer.Length) { // TODO: What should we do when the data is invalid? } @@ -391,12 +391,13 @@ public static unsafe void SerializeFloat64(byte[] buffer, ref int bufferIndex, d /// Index of the buffer. /// The value. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SerializeBase128String(byte[] buffer, ref int bufferIndex, string value) + public static void SerializeBase128String(byte[] buffer, ref int bufferIndex, string? value) { if (!string.IsNullOrEmpty(value)) { - if (bufferIndex + value.Length + sizeof(short) >= buffer.Length) + if (bufferIndex + value!.Length + sizeof(short) >= buffer.Length) { + // TODO: What should we do when the data is invalid? } var encodedValue = Encoding.UTF8.GetBytes(value); diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufMetricExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufMetricExporter.cs index a6bdffad6c..174e5ded5c 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufMetricExporter.cs @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +using System.Diagnostics; using System.Runtime.InteropServices; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; @@ -15,17 +16,32 @@ internal sealed class OtlpProtobufMetricExporter : IDisposable private readonly Func getResource; - public OtlpProtobufMetricExporter(Func getResource, ConnectionStringBuilder connectionStringBuilder, IReadOnlyDictionary prepopulatedMetricDimensions) + public OtlpProtobufMetricExporter( + Func getResource, + ConnectionStringBuilder connectionStringBuilder, + IReadOnlyDictionary? prepopulatedMetricDimensions) { + Debug.Assert(getResource != null, "getResource was null"); + + this.getResource = getResource!; + +#if NET6_0_OR_GREATER + IMetricDataTransport transport = !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + ? MetricUnixUserEventsDataTransport.Instance + : MetricWindowsEventTracingDataTransport.Instance; +#else if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - // Temporary until we add support for user_events. throw new NotSupportedException("Exporting data in protobuf format is not supported on Linux."); } - this.getResource = getResource; + var transport = MetricWindowsEventTracingDataTransport.Instance; +#endif - this.otlpProtobufSerializer = new OtlpProtobufSerializer(MetricWindowsEventTracingDataTransport.Instance, connectionStringBuilder, prepopulatedMetricDimensions); + this.otlpProtobufSerializer = new OtlpProtobufSerializer( + transport, + connectionStringBuilder, + prepopulatedMetricDimensions); } public ExportResult Export(in Batch batch) diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufSerializer.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufSerializer.cs index 4680b09887..73123d6b5f 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufSerializer.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/OtlpProtobuf/OtlpProtobufSerializer.cs @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +using System.Diagnostics; using System.Globalization; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; @@ -14,13 +15,13 @@ internal sealed class OtlpProtobufSerializer private const int TagAndLengthSize = 4; private readonly Dictionary> scopeMetrics = new(); - private readonly string metricNamespace; - private readonly string metricAccount; - private readonly byte[] prepopulatedNumberDataPointAttributes; + private readonly string? metricNamespace; + private readonly string? metricAccount; + private readonly byte[]? prepopulatedNumberDataPointAttributes; private readonly int prepopulatedNumberDataPointAttributesLength; - private readonly byte[] prepopulatedHistogramDataPointAttributes; + private readonly byte[]? prepopulatedHistogramDataPointAttributes; private readonly int prepopulatedHistogramDataPointAttributesLength; - private readonly byte[] prepopulatedExponentialHistogramDataPointAttributes; + private readonly byte[]? prepopulatedExponentialHistogramDataPointAttributes; private readonly int prepopulatedExponentialHistogramDataPointAttributesLength; private int resourceMetricTagAndLengthIndex; private int scopeMetricsTagAndLengthIndex; @@ -34,9 +35,14 @@ internal sealed class OtlpProtobufSerializer private int metricPointValueIndex; private ExportResult metricExportResult; - public OtlpProtobufSerializer(IMetricDataTransport metricDataTransport, ConnectionStringBuilder connectionStringBuilder, IReadOnlyDictionary prepopulatedMetricDimensions) + public OtlpProtobufSerializer( + IMetricDataTransport metricDataTransport, + ConnectionStringBuilder? connectionStringBuilder, + IReadOnlyDictionary? prepopulatedMetricDimensions) { - this.MetricDataTransport = metricDataTransport; + Debug.Assert(metricDataTransport != null, "metricDataTransport was null"); + + this.MetricDataTransport = metricDataTransport!; // Taking a arbitrary number here for writing attributes. byte[] temp = new byte[20000]; @@ -44,40 +50,31 @@ public OtlpProtobufSerializer(IMetricDataTransport metricDataTransport, Connecti { // Initialize numberDataPoint attributes. int cursor = 0; - SerializeTags(temp, ref cursor, prepopulatedMetricDimensions, FieldNumberConstants.NumberDataPoint_attributes); + SerializeTags(temp, ref cursor, prepopulatedMetricDimensions!, FieldNumberConstants.NumberDataPoint_attributes); this.prepopulatedNumberDataPointAttributes = new byte[cursor]; Array.Copy(temp, this.prepopulatedNumberDataPointAttributes, cursor); this.prepopulatedNumberDataPointAttributesLength = cursor; // Initialize histogramDataPoint attributes. cursor = 0; - SerializeTags(temp, ref cursor, prepopulatedMetricDimensions, FieldNumberConstants.HistogramDataPoint_attributes); + SerializeTags(temp, ref cursor, prepopulatedMetricDimensions!, FieldNumberConstants.HistogramDataPoint_attributes); this.prepopulatedHistogramDataPointAttributes = new byte[cursor]; Array.Copy(temp, this.prepopulatedHistogramDataPointAttributes, cursor); this.prepopulatedHistogramDataPointAttributesLength = cursor; cursor = 0; - SerializeTags(temp, ref cursor, prepopulatedMetricDimensions, FieldNumberConstants.ExponentialHistogramDataPoint_attributes); + SerializeTags(temp, ref cursor, prepopulatedMetricDimensions!, FieldNumberConstants.ExponentialHistogramDataPoint_attributes); this.prepopulatedExponentialHistogramDataPointAttributes = new byte[cursor]; Array.Copy(temp, this.prepopulatedExponentialHistogramDataPointAttributes, cursor); this.prepopulatedExponentialHistogramDataPointAttributesLength = cursor; } - try - { - if (connectionStringBuilder != null && connectionStringBuilder.Namespace != null) - { - this.metricNamespace = connectionStringBuilder.Namespace; - } - - if (connectionStringBuilder != null && connectionStringBuilder.Account != null) - { - this.metricAccount = connectionStringBuilder.Account; - } - } - catch + if (connectionStringBuilder?.TryGetMetricsAccountAndNamespace( + out var metricsAccount, + out var metricsNamespace) == true) { - // TODO: add log. + this.metricAccount = metricsAccount; + this.metricNamespace = metricsNamespace; } } @@ -99,7 +96,7 @@ internal static void WriteInstrumentDetails(byte[] buffer, ref int cursor, Metri } } - internal static void SerializeInstrumentationScope(byte[] buffer, ref int cursor, string name, IEnumerable> meterTags) + internal static void SerializeInstrumentationScope(byte[] buffer, ref int cursor, string name, IEnumerable>? meterTags) { int tagAndLengthIndex = cursor; cursor += TagAndLengthSize; @@ -145,7 +142,7 @@ internal static void SerializeTag(byte[] buffer, ref int cursor, string key, obj { case char: case string: - ProtobufSerializerHelper.WriteStringTag(buffer, ref cursor, FieldNumberConstants.AnyValue_string_value, Convert.ToString(value, CultureInfo.InvariantCulture)); + ProtobufSerializerHelper.WriteStringTag(buffer, ref cursor, FieldNumberConstants.AnyValue_string_value, Convert.ToString(value, CultureInfo.InvariantCulture)!); break; case bool b: ProtobufSerializerHelper.WriteBoolWithTag(buffer, ref cursor, FieldNumberConstants.AnyValue_bool_value, (bool)value); @@ -165,7 +162,17 @@ internal static void SerializeTag(byte[] buffer, ref int cursor, string key, obj ProtobufSerializerHelper.WriteDoubleWithTag(buffer, ref cursor, FieldNumberConstants.AnyValue_double_value, Convert.ToDouble(value, CultureInfo.InvariantCulture)); break; default: - ProtobufSerializerHelper.WriteStringTag(buffer, ref cursor, FieldNumberConstants.AnyValue_string_value, Convert.ToString(value, CultureInfo.InvariantCulture)); + string repr; + try + { + repr = Convert.ToString(value, CultureInfo.InvariantCulture) ?? string.Empty; + } + catch + { + repr = $"ERROR: type {value.GetType().FullName} is not supported"; + } + + ProtobufSerializerHelper.WriteStringTag(buffer, ref cursor, FieldNumberConstants.AnyValue_string_value, repr); break; // TODO: Handle array type. @@ -277,11 +284,11 @@ private static void SerializeExemplar(byte[] buffer, ref int cursor, in Exemp { // Casting to ulong is ok here as the bit representation for long versus ulong will be the same // The difference would in the way the bit representation is interpreted on decoding side (signed versus unsigned) - ProtobufSerializerHelper.WriteFixed64WithTag(buffer, ref cursor, FieldNumberConstants.Exemplar_as_int, (ulong)(long)(object)value); + ProtobufSerializerHelper.WriteFixed64WithTag(buffer, ref cursor, FieldNumberConstants.Exemplar_as_int, (ulong)(long)(object)value!); } else if (typeof(T) == typeof(double)) { - ProtobufSerializerHelper.WriteDoubleWithTag(buffer, ref cursor, FieldNumberConstants.Exemplar_as_double, (double)(object)value); + ProtobufSerializerHelper.WriteDoubleWithTag(buffer, ref cursor, FieldNumberConstants.Exemplar_as_double, (double)(object)value!); } var time = (ulong)exemplar.Timestamp.ToUnixTimeNanoseconds(); @@ -306,11 +313,14 @@ private static void SerializeExemplarTags(byte[] buffer, ref int cursor, ReadOnl { foreach (var tag in tags) { - SerializeTag(buffer, ref cursor, tag.Key, tag.Value, FieldNumberConstants.Exemplar_attributes); + if (tag.Value != null) + { + SerializeTag(buffer, ref cursor, tag.Key, tag.Value, FieldNumberConstants.Exemplar_attributes); + } } } - private static void SerializeTags(byte[] buffer, ref int cursor, IEnumerable> attributes, int fieldNumber) + private static void SerializeTags(byte[] buffer, ref int cursor, IEnumerable>? attributes, int fieldNumber) { if (attributes != null) { @@ -661,11 +671,11 @@ private void WriteNumberDataPoint(byte[] buffer, ref int cursor, int fieldNum { // Casting to ulong is ok here as the bit representation for long versus ulong will be the same // The difference would in the way the bit representation is interpreted on decoding side (signed versus unsigned) - ProtobufSerializerHelper.WriteFixed64WithTag(buffer, ref cursor, FieldNumberConstants.NumberDataPoint_as_int, (ulong)(long)(object)value); + ProtobufSerializerHelper.WriteFixed64WithTag(buffer, ref cursor, FieldNumberConstants.NumberDataPoint_as_int, (ulong)(long)(object)value!); } else if (typeof(T) == typeof(double)) { - ProtobufSerializerHelper.WriteDoubleWithTag(buffer, ref cursor, FieldNumberConstants.NumberDataPoint_as_double, (double)(object)value); + ProtobufSerializerHelper.WriteDoubleWithTag(buffer, ref cursor, FieldNumberConstants.NumberDataPoint_as_double, (double)(object)value!); } var startTime = (ulong)metricPoint.StartTime.ToUnixTimeNanoseconds(); @@ -740,7 +750,7 @@ private void SerializeResource(byte[] buffer, ref int cursor, Resource resource) cursor += TagAndLengthSize; int valueIndex = cursor; - SerializeTags(buffer, ref cursor, resource.Attributes, FieldNumberConstants.Resource_attributes); + SerializeTags(buffer, ref cursor, resource.Attributes!, FieldNumberConstants.Resource_attributes); // TODO: check to see if should de-dupe in case the values are also provided via resource attributes. if (this.metricAccount != null) diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/TlvMetricExporter.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/TlvMetricExporter.cs index 78fcd1cce8..1fb5931871 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/TlvMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/TlvMetricExporter.cs @@ -14,15 +14,17 @@ internal sealed class TlvMetricExporter : IDisposable private readonly ushort prepopulatedDimensionsCount; private readonly int fixedPayloadStartIndex; private readonly IMetricDataTransport metricDataTransport; - private readonly List serializedPrepopulatedDimensionsKeys; - private readonly List serializedPrepopulatedDimensionsValues; + private readonly List? serializedPrepopulatedDimensionsKeys; + private readonly List? serializedPrepopulatedDimensionsValues; private readonly byte[] buffer = new byte[GenevaMetricExporter.BufferSize]; private readonly string defaultMonitoringAccount; private readonly string defaultMetricNamespace; private bool isDisposed; - internal TlvMetricExporter(ConnectionStringBuilder connectionStringBuilder, IReadOnlyDictionary prepopulatedMetricDimensions) + internal TlvMetricExporter( + ConnectionStringBuilder connectionStringBuilder, + IReadOnlyDictionary? prepopulatedMetricDimensions) { this.defaultMonitoringAccount = connectionStringBuilder.Account; this.defaultMetricNamespace = connectionStringBuilder.Namespace; @@ -581,6 +583,21 @@ private static void SerializeHistogramBucketWithTLV(in HistogramBucket bucket, b MetricSerializer.SerializeUInt32(buffer, ref bufferIndex, Convert.ToUInt32(bucket.BucketCount)); } + private static string? ConvertTagValueToString(object? value) + { + string? repr; + try + { + repr = Convert.ToString(value, CultureInfo.InvariantCulture); + } + catch + { + repr = $"ERROR: type {value?.GetType().FullName} is not supported"; + } + + return repr; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] private void SerializeDimensionsAndGetCustomAccountNamespace(in ReadOnlyTagCollection tags, byte[] buffer, ref int bufferIndex, out string monitoringAccount, out string metricNamespace) { @@ -602,7 +619,7 @@ private void SerializeDimensionsAndGetCustomAccountNamespace(in ReadOnlyTagColle // Serialize PrepopulatedDimensions keys for (ushort i = 0; i < this.prepopulatedDimensionsCount; i++) { - MetricSerializer.SerializeEncodedString(buffer, ref bufferIndex, this.serializedPrepopulatedDimensionsKeys[i]); + MetricSerializer.SerializeEncodedString(buffer, ref bufferIndex, this.serializedPrepopulatedDimensionsKeys![i]); } if (this.prepopulatedDimensionsCount > 0) @@ -635,7 +652,7 @@ private void SerializeDimensionsAndGetCustomAccountNamespace(in ReadOnlyTagColle // Serialize PrepopulatedDimensions values for (ushort i = 0; i < this.prepopulatedDimensionsCount; i++) { - MetricSerializer.SerializeEncodedString(buffer, ref bufferIndex, this.serializedPrepopulatedDimensionsValues[i]); + MetricSerializer.SerializeEncodedString(buffer, ref bufferIndex, this.serializedPrepopulatedDimensionsValues![i]); } // Serialize MetricPoint Dimension values @@ -661,8 +678,8 @@ private void SerializeDimensionsAndGetCustomAccountNamespace(in ReadOnlyTagColle continue; } - var dimensionValue = Convert.ToString(tag.Value, CultureInfo.InvariantCulture); - if (dimensionValue.Length > GenevaMetricExporter.MaxDimensionValueSize) + var dimensionValue = ConvertTagValueToString(tag.Value); + if (dimensionValue?.Length > GenevaMetricExporter.MaxDimensionValueSize) { // TODO: Data Validation } @@ -693,8 +710,11 @@ private List SerializePrepopulatedDimensionsValues(IEnumerable v var serializedValues = new List(this.prepopulatedDimensionsCount); foreach (var value in values) { - var valueAsString = Convert.ToString(value, CultureInfo.InvariantCulture); - serializedValues.Add(Encoding.UTF8.GetBytes(valueAsString)); + var valueAsString = ConvertTagValueToString(value); + if (valueAsString != null) + { + serializedValues.Add(Encoding.UTF8.GetBytes(valueAsString)); + } } return serializedValues; diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricUnixUserEventsDataTransport.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricUnixUserEventsDataTransport.cs new file mode 100644 index 0000000000..fd81474ccb --- /dev/null +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricUnixUserEventsDataTransport.cs @@ -0,0 +1,68 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#if NET + +using System.Text; +using Microsoft.LinuxTracepoints.Provider; + +namespace OpenTelemetry.Exporter.Geneva; + +internal sealed class MetricUnixUserEventsDataTransport : IMetricDataTransport +{ + public const uint MetricsProtocol = 0U; + public const string MetricsVersion = "v0.19.00"; + public const string MetricsTracepointName = "otlp_metrics"; + public const string MetricsTracepointNameArgs = $"{MetricsTracepointName} u32 protocol;char[8] version;__rel_loc u8[] buffer"; + + private static readonly ReadOnlyMemory MetricsVersionUtf8 = Encoding.UTF8.GetBytes(MetricsVersion); + private readonly PerfTracepoint metricsTracepoint; + + private MetricUnixUserEventsDataTransport() + { + this.metricsTracepoint = new PerfTracepoint(MetricsTracepointNameArgs); + if (this.metricsTracepoint.RegisterResult != 0) + { + // ENOENT (2): No such file or directory + if (this.metricsTracepoint.RegisterResult == 2) + { + throw new NotSupportedException( + $"Tracepoint registration for 'otlp_metrics' failed with result: '{this.metricsTracepoint.RegisterResult}'. Verify your distribution/kernel supports user_events: https://docs.kernel.org/trace/user_events.html."); + } + + ExporterEventSource.Log.TransportInformation( + nameof(MetricUnixUserEventsDataTransport), + $"Tracepoint registration operation for 'otlp_metrics' returned result '{this.metricsTracepoint.RegisterResult}' which is considered recoverable. Entering running state."); + } + } + + public static MetricUnixUserEventsDataTransport Instance { get; } = new(); + + public void Send(MetricEventType eventType, byte[] body, int size) + { + throw new NotSupportedException(); + } + + public void SendOtlpProtobufEvent(byte[] body, int size) + { + if (this.metricsTracepoint.IsEnabled) + { + var buffer = new ReadOnlySpan(body, 0, size); + + var bufferRelLoc = 0u | ((uint)buffer.Length << 16); + + this.metricsTracepoint.Write( + [MetricsProtocol], + MetricsVersionUtf8.Span, + [bufferRelLoc], + buffer); + } + } + + public void Dispose() + { + this.metricsTracepoint.Dispose(); + } +} + +#endif diff --git a/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricWindowsEventTracingDataTransport.cs b/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricWindowsEventTracingDataTransport.cs index becbcf7ead..0ad18c47c2 100644 --- a/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricWindowsEventTracingDataTransport.cs +++ b/src/OpenTelemetry.Exporter.Geneva/Metrics/Transport/MetricWindowsEventTracingDataTransport.cs @@ -102,7 +102,7 @@ protected override void Dispose(bool disposing) // No managed resources to release. // The singleton instance is kept alive for the lifetime of the application. // Set the instance to null so that future calls to the singleton property can fail explicitly. - Instance = null; + Instance = null!; } this.isDisposed = true; diff --git a/src/OpenTelemetry.Exporter.Geneva/OpenTelemetry.Exporter.Geneva.csproj b/src/OpenTelemetry.Exporter.Geneva/OpenTelemetry.Exporter.Geneva.csproj index 00e0b3e8ab..ed29b2587a 100644 --- a/src/OpenTelemetry.Exporter.Geneva/OpenTelemetry.Exporter.Geneva.csproj +++ b/src/OpenTelemetry.Exporter.Geneva/OpenTelemetry.Exporter.Geneva.csproj @@ -5,7 +5,7 @@ net8.0;$(NetStandardMinimumSupportedVersion) - $(TargetFrameworks);net462 + $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) true An OpenTelemetry .NET exporter that exports to local ETW or UDS. THIRD-PARTY-NOTICES.TXT @@ -13,12 +13,11 @@ $(NoWarn);SA1123;SA1310 Exporter.Geneva- 1.9.0 - disable - + diff --git a/src/OpenTelemetry.Exporter.Geneva/README.md b/src/OpenTelemetry.Exporter.Geneva/README.md index 5d7e1efdb1..2ba0725906 100644 --- a/src/OpenTelemetry.Exporter.Geneva/README.md +++ b/src/OpenTelemetry.Exporter.Geneva/README.md @@ -268,14 +268,25 @@ On Linux provide an `Endpoint` in addition to the `Account` and `Namespace`. For example: `Endpoint=unix:{UDS Path};Account={MetricAccount};Namespace={MetricNamespace}`. -Set `PrivatePreviewEnableOtlpProtobufEncoding=true` to opt-in to the -experimental feature for changing the underlying serialization format to binary -protobuf following the schema defined in [OTLP +##### OtlpProtobufEncoding + +On Windows set `PrivatePreviewEnableOtlpProtobufEncoding=true` on the +`ConnectionString` to opt-in to the experimental feature for changing the +underlying serialization format to binary protobuf following the schema defined +in [OTLP specification](https://github.com/open-telemetry/opentelemetry-proto/blob/v1.1.0/opentelemetry/proto/metrics/v1/metrics.proto). -> [!NOTE] - > `PrivatePreviewEnableOtlpProtobufEncoding` is currently - > only supported in Windows environment. +As of `1.10.0` `PrivatePreviewEnableOtlpProtobufEncoding=true` is also supported +on Linux. On Linux when using `PrivatePreviewEnableOtlpProtobufEncoding=true` an +`Endpoint` is **NOT** required to be provided on `ConnectionString`. For +example: `Endpoint=unix:Account={MetricAccount};Namespace={MetricNamespace}`. + +> [!IMPORTANT] +> When `PrivatePreviewEnableOtlpProtobufEncoding` is enabled on Linux metrics +> are written using +> [user_events](https://docs.kernel.org/trace/user_events.html). `user_events` +> are a newer feature of the Linux kernel and require a distro with the feature +> enabled. #### `MetricExportIntervalMilliseconds` (optional) diff --git a/src/OpenTelemetry.Exporter.InfluxDB/CHANGELOG.md b/src/OpenTelemetry.Exporter.InfluxDB/CHANGELOG.md index 553e33cc2e..414cccd813 100644 --- a/src/OpenTelemetry.Exporter.InfluxDB/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.InfluxDB/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +* Added a direct reference to `System.Text.Json` at `8.0.5` for the + `netstandard2.0` target in response to + [CVE-2024-43485](https://github.com/advisories/GHSA-8g4q-xg66-9fp4). + ([#2202](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2202)) + ## 1.0.0-alpha.4 Released 2024-Oct-02 diff --git a/src/OpenTelemetry.Exporter.InfluxDB/OpenTelemetry.Exporter.InfluxDB.csproj b/src/OpenTelemetry.Exporter.InfluxDB/OpenTelemetry.Exporter.InfluxDB.csproj index 5d6c507da1..f9aa46548e 100644 --- a/src/OpenTelemetry.Exporter.InfluxDB/OpenTelemetry.Exporter.InfluxDB.csproj +++ b/src/OpenTelemetry.Exporter.InfluxDB/OpenTelemetry.Exporter.InfluxDB.csproj @@ -17,6 +17,9 @@ + + + diff --git a/src/OpenTelemetry.Exporter.OneCollector/CHANGELOG.md b/src/OpenTelemetry.Exporter.OneCollector/CHANGELOG.md index 79451efd20..0803ff2ac5 100644 --- a/src/OpenTelemetry.Exporter.OneCollector/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OneCollector/CHANGELOG.md @@ -5,6 +5,29 @@ * Drop support for .NET 6 as this target is no longer supported. ([#2123](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2123)) +* Bumped the `System.Text.Json` reference to `6.0.10` for runtimes older than + `net8.0` and added a direct reference for `System.Text.Json` at `8.0.5` on + `net8.0` in response to + [CVE-2024-43485](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-43485). + ([#2196](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2196)) + +* Fixed a bug causing extension data specified on `LogRecord`s in a batch to + also be applied to subsequent `LogRecord`s in the same batch. + ([#2205](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2205)) + +## 1.9.3 + +Released 2024-Oct-11 + +* Fixed a bug causing extension data specified on `LogRecord`s in a batch to + also be applied to subsequent `LogRecord`s in the same batch. + ([#2208](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2208)) + +* Bumped the `System.Text.Json` reference to `6.0.10` for the `net462`, + `netstandard2.0`, and `netstandard2.1` targets in response to + [CVE-2024-43485](https://github.com/advisories/GHSA-8g4q-xg66-9fp4). + ([#2208](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2208)) + ## 1.10.0-alpha.1 Released 2024-Sep-06 diff --git a/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializationState.cs b/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializationState.cs index cfcfc7b496..95f98513b3 100644 --- a/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializationState.cs +++ b/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializationState.cs @@ -142,6 +142,14 @@ public void Reset(string itemType, Utf8JsonWriter writer) { this.itemType = itemType; this.Writer = writer; + } + + public void BeginItem() + { + if (this.allValues.Count <= 0) + { + return; + } for (int i = 0; i < this.nextKeysToAllValuesLookupIndex; i++) { diff --git a/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializer.cs b/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializer.cs index 81dd686122..bcda85d369 100644 --- a/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializer.cs +++ b/src/OpenTelemetry.Exporter.OneCollector/Internal/Serialization/CommonSchemaJsonSerializer.cs @@ -53,6 +53,8 @@ public void SerializeBatchOfItemsToStream( while (state.TryGetNextItem(out var item)) { + jsonSerializerState.BeginItem(); + this.SerializeItemToJson(resource, item!, jsonSerializerState); var currentItemSizeInBytes = writer.BytesCommitted + writer.BytesPending + 1; diff --git a/src/OpenTelemetry.Exporter.OneCollector/OpenTelemetry.Exporter.OneCollector.csproj b/src/OpenTelemetry.Exporter.OneCollector/OpenTelemetry.Exporter.OneCollector.csproj index 5cea309c2c..0e6b5ca94b 100644 --- a/src/OpenTelemetry.Exporter.OneCollector/OpenTelemetry.Exporter.OneCollector.csproj +++ b/src/OpenTelemetry.Exporter.OneCollector/OpenTelemetry.Exporter.OneCollector.csproj @@ -1,8 +1,8 @@ - net8.0;netstandard2.1;netstandard2.0 - $(TargetFrameworks);net462 + net8.0;netstandard2.1;$(NetStandardMinimumSupportedVersion) + $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) true An OpenTelemetry .NET exporter that sends telemetry to Microsoft OneCollector. Exporter.OneCollector- @@ -13,7 +13,8 @@ this at the call site but there is a bug. This could possibly be cleaned up in the future (hopefully .NET 9) see https://github.com/dotnet/runtime/issues/92509 --> $(NoWarn);SYSLIB1100;SYSLIB1101 - 1.9.2 + 1.9.3 + $(SystemTextJsonLatestNet6OutOfBandPkgVer) @@ -23,12 +24,11 @@ - - + diff --git a/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj b/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj index 15c3b04992..7e41243dd9 100644 --- a/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj +++ b/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj @@ -2,7 +2,7 @@ - net8.0;$(NetStandardMinimumSupportedVersion);net462 + net8.0;$(NetStandardMinimumSupportedVersion);$(NetFrameworkMinimumSupportedVersion) An OpenTelemetry .NET exporter that sends telemetry to Google Stackdriver. $(PackageTags);Stackdriver;Google;GCP;distributed-tracing Exporter.Stackdriver- diff --git a/src/OpenTelemetry.Extensions.AWS/CHANGELOG.md b/src/OpenTelemetry.Extensions.AWS/CHANGELOG.md index a889ec48bb..90a29a6b95 100644 --- a/src/OpenTelemetry.Extensions.AWS/CHANGELOG.md +++ b/src/OpenTelemetry.Extensions.AWS/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +* Drop support for .NET 6 as this target is no longer supported and add .NET 8 target. + ([#2125](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2125)) + +* Removed the unused `System.Text.Json` reference. + ([#2209](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2209)) + ## 1.3.0-beta.2 Released 2024-Sep-24 @@ -12,9 +18,6 @@ Released 2024-Sep-24 * Updated OpenTelemetry core component version(s) to `1.9.0`. ([#1888](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1888)) -* Drop support for .NET 6 as this target is no longer supported and add .NET 8 target. - ([#2125](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2125)) - ## 1.3.0-beta.1 Released 2023-Aug-02 diff --git a/src/OpenTelemetry.Extensions.AWS/OpenTelemetry.Extensions.AWS.csproj b/src/OpenTelemetry.Extensions.AWS/OpenTelemetry.Extensions.AWS.csproj index ad5ce16572..a9ab877267 100644 --- a/src/OpenTelemetry.Extensions.AWS/OpenTelemetry.Extensions.AWS.csproj +++ b/src/OpenTelemetry.Extensions.AWS/OpenTelemetry.Extensions.AWS.csproj @@ -2,10 +2,10 @@ - net8.0;netstandard2.0 + net8.0;$(NetStandardMinimumSupportedVersion) $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) OpenTelemetry extensions for AWS. - Extensions.AWS- + Instrumentation.AWS- - net8.0;netstandard2.0 - $(TargetFrameworks);net462 + net8.0;$(NetStandardMinimumSupportedVersion) + $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) OpenTelemetry .NET SDK preview features and extensions. Extensions- diff --git a/src/OpenTelemetry.Instrumentation.AWS/OpenTelemetry.Instrumentation.AWS.csproj b/src/OpenTelemetry.Instrumentation.AWS/OpenTelemetry.Instrumentation.AWS.csproj index 1b9b5cc120..c5b345c636 100644 --- a/src/OpenTelemetry.Instrumentation.AWS/OpenTelemetry.Instrumentation.AWS.csproj +++ b/src/OpenTelemetry.Instrumentation.AWS/OpenTelemetry.Instrumentation.AWS.csproj @@ -5,7 +5,7 @@ net8.0;$(NetStandardMinimumSupportedVersion) $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) AWS client instrumentation for OpenTelemetry .NET. - Instrumentation.AWS- + Instrumentation.AWS- + true + + + + - diff --git a/src/OpenTelemetry.Instrumentation.ElasticsearchClient/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.ElasticsearchClient/CHANGELOG.md index 744daabdcb..5d444bb333 100644 --- a/src/OpenTelemetry.Instrumentation.ElasticsearchClient/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.ElasticsearchClient/CHANGELOG.md @@ -15,6 +15,11 @@ * Updated OpenTelemetry core component version(s) to `1.9.0`. ([#1888](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1888)) +* Lowered the `System.Text.Json` reference to `4.7.2` for `net462` and + `netstandard2.0` targets in response to + [CVE-2024-43485](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-43485). + ([#2198](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2198)) + ## 1.0.0-beta.5 Released 2023-Oct-24 diff --git a/src/OpenTelemetry.Instrumentation.ElasticsearchClient/OpenTelemetry.Instrumentation.ElasticsearchClient.csproj b/src/OpenTelemetry.Instrumentation.ElasticsearchClient/OpenTelemetry.Instrumentation.ElasticsearchClient.csproj index 26630e1596..df75e3f75f 100644 --- a/src/OpenTelemetry.Instrumentation.ElasticsearchClient/OpenTelemetry.Instrumentation.ElasticsearchClient.csproj +++ b/src/OpenTelemetry.Instrumentation.ElasticsearchClient/OpenTelemetry.Instrumentation.ElasticsearchClient.csproj @@ -7,9 +7,10 @@ Elasticsearch instrumentation for OpenTelemetry .NET. $(PackageTags);distributed-tracing Instrumentation.ElasticsearchClient- + $(SystemTextJsonMinimumOutOfBandPkgVer) - true @@ -17,7 +18,6 @@ - diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/OpenTelemetry.Instrumentation.EntityFrameworkCore.csproj b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/OpenTelemetry.Instrumentation.EntityFrameworkCore.csproj index a14e26ba44..4af147744b 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/OpenTelemetry.Instrumentation.EntityFrameworkCore.csproj +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/OpenTelemetry.Instrumentation.EntityFrameworkCore.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + $(NetStandardMinimumSupportedVersion) Microsoft.EntityFrameworkCore instrumentation for OpenTelemetry .NET. $(PackageTags);distributed-tracing Instrumentation.EntityFrameworkCore- diff --git a/src/OpenTelemetry.Instrumentation.GrpcNetClient/OpenTelemetry.Instrumentation.GrpcNetClient.csproj b/src/OpenTelemetry.Instrumentation.GrpcNetClient/OpenTelemetry.Instrumentation.GrpcNetClient.csproj index 9c5bf71676..20785b022b 100644 --- a/src/OpenTelemetry.Instrumentation.GrpcNetClient/OpenTelemetry.Instrumentation.GrpcNetClient.csproj +++ b/src/OpenTelemetry.Instrumentation.GrpcNetClient/OpenTelemetry.Instrumentation.GrpcNetClient.csproj @@ -2,7 +2,7 @@ - net8.0;netstandard2.1;netstandard2.0 + net8.0;netstandard2.1;$(NetStandardMinimumSupportedVersion) gRPC for .NET client instrumentation for OpenTelemetry .NET. $(PackageTags);distributed-tracing Instrumentation.GrpcNetClient- diff --git a/src/OpenTelemetry.Instrumentation.Owin/OpenTelemetry.Instrumentation.Owin.csproj b/src/OpenTelemetry.Instrumentation.Owin/OpenTelemetry.Instrumentation.Owin.csproj index 184409a304..1a20f2eb55 100644 --- a/src/OpenTelemetry.Instrumentation.Owin/OpenTelemetry.Instrumentation.Owin.csproj +++ b/src/OpenTelemetry.Instrumentation.Owin/OpenTelemetry.Instrumentation.Owin.csproj @@ -1,13 +1,13 @@ $(NetFrameworkMinimumSupportedVersion) - OpenTelemetry instrumentation for OWIN + OpenTelemetry instrumentation for OWIN. $(PackageTags);distributed-tracing;OWIN Instrumentation.Owin- - + true diff --git a/src/OpenTelemetry.Instrumentation.Quartz/OpenTelemetry.Instrumentation.Quartz.csproj b/src/OpenTelemetry.Instrumentation.Quartz/OpenTelemetry.Instrumentation.Quartz.csproj index ef13ab8526..c840575770 100644 --- a/src/OpenTelemetry.Instrumentation.Quartz/OpenTelemetry.Instrumentation.Quartz.csproj +++ b/src/OpenTelemetry.Instrumentation.Quartz/OpenTelemetry.Instrumentation.Quartz.csproj @@ -2,7 +2,7 @@ $(NetStandardMinimumSupportedVersion) - OpenTelemetry Quartz.NET Instrumentation + OpenTelemetry Quartz.NET Instrumentation. $(PackageTags);distributed-tracing Instrumentation.Quartz- diff --git a/src/OpenTelemetry.Instrumentation.Wcf/OpenTelemetry.Instrumentation.Wcf.csproj b/src/OpenTelemetry.Instrumentation.Wcf/OpenTelemetry.Instrumentation.Wcf.csproj index 3bbf68e673..b9558189a8 100644 --- a/src/OpenTelemetry.Instrumentation.Wcf/OpenTelemetry.Instrumentation.Wcf.csproj +++ b/src/OpenTelemetry.Instrumentation.Wcf/OpenTelemetry.Instrumentation.Wcf.csproj @@ -8,8 +8,8 @@ Instrumentation.Wcf- - + true diff --git a/src/OpenTelemetry.Resources.AWS/CHANGELOG.md b/src/OpenTelemetry.Resources.AWS/CHANGELOG.md index 96cd089d1b..76396646ea 100644 --- a/src/OpenTelemetry.Resources.AWS/CHANGELOG.md +++ b/src/OpenTelemetry.Resources.AWS/CHANGELOG.md @@ -9,6 +9,12 @@ and add .NET Standard 2.0 target. ([#2164](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2164)) +* Bumped the `System.Text.Json` reference to `6.0.10` for runtimes older than + `net8.0` and added a direct reference for `System.Text.Json` at `8.0.5` on + `net8.0` in response to + [CVE-2024-43485](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-43485). + ([#2196](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2196)) + ## 1.5.0-beta.1 Released 2024-Jun-04 diff --git a/src/OpenTelemetry.Resources.AWS/OpenTelemetry.Resources.AWS.csproj b/src/OpenTelemetry.Resources.AWS/OpenTelemetry.Resources.AWS.csproj index c263ea30e0..d5d62b153a 100644 --- a/src/OpenTelemetry.Resources.AWS/OpenTelemetry.Resources.AWS.csproj +++ b/src/OpenTelemetry.Resources.AWS/OpenTelemetry.Resources.AWS.csproj @@ -6,6 +6,7 @@ $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) OpenTelemetry Resource Detectors for AWS ElasticBeanstalk, EC2, ECS, EKS. Resources.AWS- + $(SystemTextJsonLatestNet6OutOfBandPkgVer) - diff --git a/src/OpenTelemetry.Resources.Gcp/CHANGELOG.md b/src/OpenTelemetry.Resources.Gcp/CHANGELOG.md index fb7b8986e5..3daabc8726 100644 --- a/src/OpenTelemetry.Resources.Gcp/CHANGELOG.md +++ b/src/OpenTelemetry.Resources.Gcp/CHANGELOG.md @@ -6,7 +6,13 @@ is accessible via `AddGcpDetector` extension method on `ResourceBuilder`. ([#1691](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1691)) -For more details, please refer to the [README](README.md). - * Updated OpenTelemetry core component version(s) to `1.9.0`. ([#1888](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1888)) + +* Drop support for .NET 6 as this target is no longer supported and add .NET 8 target. + ([#2167](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2167)) + +* Added direct reference to `System.Text.Json` for the `net8.0` target with + minimum version of `8.0.5` in response to + [CVE-2024-43485](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-43485). + ([#2198](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2198)) diff --git a/src/OpenTelemetry.Resources.Gcp/OpenTelemetry.Resources.Gcp.csproj b/src/OpenTelemetry.Resources.Gcp/OpenTelemetry.Resources.Gcp.csproj index 940fb756f3..6f573b04b6 100644 --- a/src/OpenTelemetry.Resources.Gcp/OpenTelemetry.Resources.Gcp.csproj +++ b/src/OpenTelemetry.Resources.Gcp/OpenTelemetry.Resources.Gcp.csproj @@ -5,6 +5,7 @@ OpenTelemetry Resource Detectors for Google Cloud Platform environments. $(PackageTags);ResourceDetector Resources.Gcp- + $(SystemTextJsonMinimumOutOfBandPkgVer) - diff --git a/src/OpenTelemetry.Sampler.AWS/CHANGELOG.md b/src/OpenTelemetry.Sampler.AWS/CHANGELOG.md index 01fdb8bef2..1a1de86b04 100644 --- a/src/OpenTelemetry.Sampler.AWS/CHANGELOG.md +++ b/src/OpenTelemetry.Sampler.AWS/CHANGELOG.md @@ -5,6 +5,15 @@ * Drop support for .NET 6 as this target is no longer supported and add .NET 8 target. ([#2172](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2172)) +* Bumped the `System.Text.Json` reference to `6.0.10` for runtimes older than + `net8.0` and added a direct reference for `System.Text.Json` at `8.0.5` on + `net8.0` in response to + [CVE-2024-43485](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-43485). + ([#2197](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2197)) + +* Removed the `System.Net.Http` package reference from all targets. + ([#2197](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2197)) + ## 0.1.0-alpha.2 Released 2024-Sep-09 diff --git a/src/OpenTelemetry.Sampler.AWS/OpenTelemetry.Sampler.AWS.csproj b/src/OpenTelemetry.Sampler.AWS/OpenTelemetry.Sampler.AWS.csproj index 791d699747..dc886777ef 100644 --- a/src/OpenTelemetry.Sampler.AWS/OpenTelemetry.Sampler.AWS.csproj +++ b/src/OpenTelemetry.Sampler.AWS/OpenTelemetry.Sampler.AWS.csproj @@ -6,6 +6,7 @@ $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) OpenTelemetry remote sampler for AWS X-Ray. Sampler.AWS- + $(SystemTextJsonLatestNet6OutOfBandPkgVer) $(SupportedNetTargetsWithoutNet6) - $(TargetFrameworks);net48;net472;net471;net47;net462 + $(TargetFrameworks);net48;net472;net471;net47;$(NetFrameworkMinimumSupportedVersion) Exe Benchmark project for OpenTelemetry .NET OneCollectorExporter. diff --git a/test/OpenTelemetry.Exporter.OneCollector.Tests/CommonSchemaJsonSerializationStateTests.cs b/test/OpenTelemetry.Exporter.OneCollector.Tests/CommonSchemaJsonSerializationStateTests.cs index 06694d1d46..6f87d12d02 100644 --- a/test/OpenTelemetry.Exporter.OneCollector.Tests/CommonSchemaJsonSerializationStateTests.cs +++ b/test/OpenTelemetry.Exporter.OneCollector.Tests/CommonSchemaJsonSerializationStateTests.cs @@ -17,6 +17,8 @@ public void AddExtensionAttributeTest() var state = new CommonSchemaJsonSerializationState("Test", writer); + state.BeginItem(); + state.AddExtensionAttribute(new KeyValuePair("ext.something.field1", 1)); state.AddExtensionAttribute(new KeyValuePair("ext.something.field2", 2)); state.AddExtensionAttribute(new KeyValuePair("ext.something.field3", 3)); @@ -42,8 +44,11 @@ public void AddExtensionAttributeTest() stream.SetLength(0); writer.Reset(stream); + state.Reset("Test", writer); + state.BeginItem(); + Assert.Equal(0, state.ExtensionPropertyCount); Assert.Equal(0, state.ExtensionAttributeCount); diff --git a/test/OpenTelemetry.Exporter.OneCollector.Tests/LogRecordCommonSchemaJsonSerializerTests.cs b/test/OpenTelemetry.Exporter.OneCollector.Tests/LogRecordCommonSchemaJsonSerializerTests.cs index 0a7e92b2ab..87d557461e 100644 --- a/test/OpenTelemetry.Exporter.OneCollector.Tests/LogRecordCommonSchemaJsonSerializerTests.cs +++ b/test/OpenTelemetry.Exporter.OneCollector.Tests/LogRecordCommonSchemaJsonSerializerTests.cs @@ -274,7 +274,7 @@ public void LogRecordExtensionsJsonTest() .Build(); string json = GetLogRecordJson( - 1, + 2, (index, logRecord) => { logRecord.Attributes = new List> { new KeyValuePair("ext.state.field", "stateValue1") }; @@ -283,7 +283,8 @@ public void LogRecordExtensionsJsonTest() scopeProvider); Assert.Equal( - """{"ver":"4.0","name":"Namespace.Name","time":"2032-01-18T10:11:12Z","iKey":"o:tenant-token","data":{"severityText":"Trace","severityNumber":1},"ext":{"state":{"field":"stateValue1"},"resource":{"field":"resourceValue1"},"scope":{"field":"scopeValue1"}}}""" + "\n", + """{"ver":"4.0","name":"Namespace.Name","time":"2032-01-18T10:11:12Z","iKey":"o:tenant-token","data":{"severityText":"Trace","severityNumber":1},"ext":{"state":{"field":"stateValue1"},"resource":{"field":"resourceValue1"},"scope":{"field":"scopeValue1"}}}""" + "\n" + + """{"ver":"4.0","name":"Namespace.Name","time":"2032-01-18T10:11:12Z","iKey":"o:tenant-token","data":{"severityText":"Trace","severityNumber":1},"ext":{"state":{"field":"stateValue1"},"resource":{"field":"resourceValue1"},"scope":{"field":"scopeValue1"}}}""" + "\n", json); } diff --git a/test/OpenTelemetry.Exporter.OneCollector.Tests/OpenTelemetry.Exporter.OneCollector.Tests.csproj b/test/OpenTelemetry.Exporter.OneCollector.Tests/OpenTelemetry.Exporter.OneCollector.Tests.csproj index 15509b13c8..c3f1264678 100644 --- a/test/OpenTelemetry.Exporter.OneCollector.Tests/OpenTelemetry.Exporter.OneCollector.Tests.csproj +++ b/test/OpenTelemetry.Exporter.OneCollector.Tests/OpenTelemetry.Exporter.OneCollector.Tests.csproj @@ -3,7 +3,7 @@ $(SupportedNetTargetsWithoutNet6) - $(TargetFrameworks);net48;net472;net471;net47;net462 + $(TargetFrameworks);net48;net472;net471;net47;$(NetFrameworkMinimumSupportedVersion) Unit test project for OpenTelemetry .NET OneCollectorExporter. diff --git a/test/OpenTelemetry.Extensions.AWS.Tests/OpenTelemetry.Extensions.AWS.Tests.csproj b/test/OpenTelemetry.Extensions.AWS.Tests/OpenTelemetry.Extensions.AWS.Tests.csproj index 3beba0091d..8489e41f72 100644 --- a/test/OpenTelemetry.Extensions.AWS.Tests/OpenTelemetry.Extensions.AWS.Tests.csproj +++ b/test/OpenTelemetry.Extensions.AWS.Tests/OpenTelemetry.Extensions.AWS.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/test/OpenTelemetry.Extensions.Enrichment.Tests/OpenTelemetry.Extensions.Enrichment.Tests.csproj b/test/OpenTelemetry.Extensions.Enrichment.Tests/OpenTelemetry.Extensions.Enrichment.Tests.csproj index 5cc3e698c7..6382acc150 100644 --- a/test/OpenTelemetry.Extensions.Enrichment.Tests/OpenTelemetry.Extensions.Enrichment.Tests.csproj +++ b/test/OpenTelemetry.Extensions.Enrichment.Tests/OpenTelemetry.Extensions.Enrichment.Tests.csproj @@ -11,10 +11,6 @@ - - - - diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj index dd8ec60246..2b7c71f91e 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/test/OpenTelemetry.Instrumentation.Cassandra.Tests/OpenTelemetry.Instrumentation.Cassandra.Tests.csproj b/test/OpenTelemetry.Instrumentation.Cassandra.Tests/OpenTelemetry.Instrumentation.Cassandra.Tests.csproj index f61ba57d48..ca925749b8 100644 --- a/test/OpenTelemetry.Instrumentation.Cassandra.Tests/OpenTelemetry.Instrumentation.Cassandra.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.Cassandra.Tests/OpenTelemetry.Instrumentation.Cassandra.Tests.csproj @@ -1,20 +1,16 @@ - - $(SupportedNetTargetsWithoutNet6) - $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) - - + + $(SupportedNetTargetsWithoutNet6) + $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion) + - - - diff --git a/test/OpenTelemetry.Instrumentation.ConfluentKafka.Tests/OpenTelemetry.Instrumentation.ConfluentKafka.Tests.csproj b/test/OpenTelemetry.Instrumentation.ConfluentKafka.Tests/OpenTelemetry.Instrumentation.ConfluentKafka.Tests.csproj index f74df494f5..e9faf0e74c 100644 --- a/test/OpenTelemetry.Instrumentation.ConfluentKafka.Tests/OpenTelemetry.Instrumentation.ConfluentKafka.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.ConfluentKafka.Tests/OpenTelemetry.Instrumentation.ConfluentKafka.Tests.csproj @@ -21,10 +21,8 @@ - - - - + + diff --git a/test/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests.csproj b/test/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests.csproj index 7fab9bb83a..3ccfc7b093 100644 --- a/test/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests.csproj @@ -6,11 +6,8 @@ Unit test project for OpenTelemetry Microsoft.EntityFrameworkCore instrumentation. - - - - + diff --git a/test/OpenTelemetry.Instrumentation.Http.Tests/OpenTelemetry.Instrumentation.Http.Tests.csproj b/test/OpenTelemetry.Instrumentation.Http.Tests/OpenTelemetry.Instrumentation.Http.Tests.csproj index 7e65697a06..c219109b35 100644 --- a/test/OpenTelemetry.Instrumentation.Http.Tests/OpenTelemetry.Instrumentation.Http.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.Http.Tests/OpenTelemetry.Instrumentation.Http.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/test/OpenTelemetry.Instrumentation.Owin.Tests/OpenTelemetry.Instrumentation.Owin.Tests.csproj b/test/OpenTelemetry.Instrumentation.Owin.Tests/OpenTelemetry.Instrumentation.Owin.Tests.csproj index 3ffbc965b5..ea99af551e 100644 --- a/test/OpenTelemetry.Instrumentation.Owin.Tests/OpenTelemetry.Instrumentation.Owin.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.Owin.Tests/OpenTelemetry.Instrumentation.Owin.Tests.csproj @@ -1,8 +1,8 @@ - Unit test project for OpenTelemetry OWIN instrumentation $(NetFrameworkMinimumSupportedVersion) + Unit test project for OpenTelemetry OWIN instrumentation. diff --git a/test/OpenTelemetry.Instrumentation.SqlClient.Tests/OpenTelemetry.Instrumentation.SqlClient.Tests.csproj b/test/OpenTelemetry.Instrumentation.SqlClient.Tests/OpenTelemetry.Instrumentation.SqlClient.Tests.csproj index 730389a718..365d9b93e3 100644 --- a/test/OpenTelemetry.Instrumentation.SqlClient.Tests/OpenTelemetry.Instrumentation.SqlClient.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.SqlClient.Tests/OpenTelemetry.Instrumentation.SqlClient.Tests.csproj @@ -20,6 +20,11 @@ + + + + + diff --git a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj index 48ff8eaecc..cfbd7c6aa5 100644 --- a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj @@ -21,8 +21,6 @@ - - diff --git a/test/Shared/PlatformHelpers.cs b/test/Shared/PlatformHelpers.cs index 60d876c609..a737fa49f3 100644 --- a/test/Shared/PlatformHelpers.cs +++ b/test/Shared/PlatformHelpers.cs @@ -37,7 +37,7 @@ public static bool IsProcessElevated(TestPlatform platform) private static class SystemNativeUnix { #pragma warning disable CA5392 // Use DefaultDllImportSearchPaths attribute for P/Invokes - [DllImport("libc", SetLastError = true)] + [DllImport("libc", EntryPoint = "geteuid", SetLastError = true)] internal static extern uint GetEUid(); #pragma warning restore CA5392 // Use DefaultDllImportSearchPaths attribute for P/Invokes }