diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2c09a8945c..bc622e2e7a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -177,7 +177,15 @@ updates: directory: "/resource_detectors" schedule: interval: weekly +- package-ecosystem: bundler + directory: "/resources/azure" + schedule: + interval: weekly - package-ecosystem: bundler directory: "/resources/container" schedule: interval: weekly +- package-ecosystem: bundler + directory: "/resources/google_cloud_platform" + schedule: + interval: weekly diff --git a/.github/workflows/ci-contrib-canary.yml b/.github/workflows/ci-contrib-canary.yml index a0fe8b8ad5..ebf4f534a2 100644 --- a/.github/workflows/ci-contrib-canary.yml +++ b/.github/workflows/ci-contrib-canary.yml @@ -20,7 +20,7 @@ jobs: name: "propagator-${{ matrix.gem }} / ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -64,7 +64,9 @@ jobs: matrix: gem: - resource_detectors + - resource-detector-azure - resource-detector-container + - resource-detector-google_cloud_platform os: - ubuntu-latest - macos-latest @@ -72,7 +74,7 @@ jobs: name: "opentelemetry-${{ matrix.gem }} / ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/ci-contrib.yml b/.github/workflows/ci-contrib.yml index 0be521fa09..c2a86e1b07 100644 --- a/.github/workflows/ci-contrib.yml +++ b/.github/workflows/ci-contrib.yml @@ -22,7 +22,7 @@ jobs: name: "propagator-${{ matrix.gem }} / ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -55,13 +55,15 @@ jobs: matrix: gem: - resource_detectors + - resource-detector-azure - resource-detector-container + - resource-detector-google_cloud_platform os: - ubuntu-latest name: "opentelemetry-${{ matrix.gem }} / ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/ci-instrumentation-canary.yml b/.github/workflows/ci-instrumentation-canary.yml index 6beffb1e32..4dd45a7226 100644 --- a/.github/workflows/ci-instrumentation-canary.yml +++ b/.github/workflows/ci-instrumentation-canary.yml @@ -57,7 +57,7 @@ jobs: name: ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/ci-instrumentation-with-services-canary.yml b/.github/workflows/ci-instrumentation-with-services-canary.yml index db9be3e562..b375afb7cc 100644 --- a/.github/workflows/ci-instrumentation-with-services-canary.yml +++ b/.github/workflows/ci-instrumentation-with-services-canary.yml @@ -28,7 +28,7 @@ jobs: name: ${{ matrix.gem }} / ubuntu-latest / services runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/ci-instrumentation-with-services.yml b/.github/workflows/ci-instrumentation-with-services.yml index 4284fee84f..3b1f9a3422 100644 --- a/.github/workflows/ci-instrumentation-with-services.yml +++ b/.github/workflows/ci-instrumentation-with-services.yml @@ -22,7 +22,7 @@ jobs: name: other / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -68,7 +68,7 @@ jobs: name: mysql / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -105,7 +105,7 @@ jobs: name: kafka / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -158,7 +158,7 @@ jobs: name: redis / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -202,7 +202,7 @@ jobs: name: postgresql / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: @@ -243,7 +243,7 @@ jobs: name: rabbitmq / ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/ci-instrumentation.yml b/.github/workflows/ci-instrumentation.yml index 53b0244c5c..b5bacdeb22 100644 --- a/.github/workflows/ci-instrumentation.yml +++ b/.github/workflows/ci-instrumentation.yml @@ -48,7 +48,7 @@ jobs: name: ${{ matrix.gem }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Test Ruby 3.2" uses: ./.github/actions/test_gem with: diff --git a/.github/workflows/installation-tests.yml b/.github/workflows/installation-tests.yml index 83152651d3..c5f792896f 100644 --- a/.github/workflows/installation-tests.yml +++ b/.github/workflows/installation-tests.yml @@ -21,7 +21,7 @@ jobs: name: ${{ matrix.ruby-version }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby-version }} diff --git a/.github/workflows/release-hook-on-closed.yml b/.github/workflows/release-hook-on-closed.yml index cb22c6e4c7..bbbcfd7356 100644 --- a/.github/workflows/release-hook-on-closed.yml +++ b/.github/workflows/release-hook-on-closed.yml @@ -16,7 +16,7 @@ jobs: with: ruby-version: ${{ env.ruby_version }} - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Toys run: "gem install --no-document toys" - name: Process release request diff --git a/.github/workflows/release-hook-on-push.yml b/.github/workflows/release-hook-on-push.yml index 0c5929047a..1dfc480fde 100644 --- a/.github/workflows/release-hook-on-push.yml +++ b/.github/workflows/release-hook-on-push.yml @@ -17,7 +17,7 @@ jobs: with: ruby-version: ${{ env.ruby_version }} - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Toys run: "gem install --no-document toys" - name: Update open releases diff --git a/.github/workflows/release-perform.yml b/.github/workflows/release-perform.yml index c7dfe73052..4e8b37bc62 100644 --- a/.github/workflows/release-perform.yml +++ b/.github/workflows/release-perform.yml @@ -26,7 +26,7 @@ jobs: with: ruby-version: ${{ env.ruby_version }} - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Toys run: "gem install --no-document toys" - name: Perform release diff --git a/.github/workflows/release-request.yml b/.github/workflows/release-request.yml index b98f0ee473..964847450e 100644 --- a/.github/workflows/release-request.yml +++ b/.github/workflows/release-request.yml @@ -20,7 +20,7 @@ jobs: with: ruby-version: ${{ env.ruby_version }} - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Toys run: "gem install --no-document toys" - name: Open release pull request diff --git a/.github/workflows/release-retry.yml b/.github/workflows/release-retry.yml index d74b98d3f1..dd5c3a81c3 100644 --- a/.github/workflows/release-retry.yml +++ b/.github/workflows/release-retry.yml @@ -23,7 +23,7 @@ jobs: with: ruby-version: ${{ env.ruby_version }} - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Toys run: "gem install --no-document toys" - name: Retry release diff --git a/.instrumentation_generator/templates/gemspec.tt b/.instrumentation_generator/templates/gemspec.tt index ee02f42b21..6305d176eb 100644 --- a/.instrumentation_generator/templates/gemspec.tt +++ b/.instrumentation_generator/templates/gemspec.tt @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> <%= opentelemetry_version %>' spec.add_dependency 'opentelemetry-instrumentation-base', '~> <%= instrumentation_base_version %>' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.0' @@ -38,7 +38,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'webmock', '~> 3.7.6' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/.toys/.data/releases.yml b/.toys/.data/releases.yml index f927c51127..8b78685f38 100644 --- a/.toys/.data/releases.yml +++ b/.toys/.data/releases.yml @@ -114,10 +114,6 @@ gems: directory: instrumentation/active_model_serializers version_constant: [OpenTelemetry, Instrumentation, ActiveModelSerializers, VERSION] - - name: opentelemetry-instrumentation-all - directory: instrumentation/all - version_constant: [OpenTelemetry, Instrumentation, All, VERSION] - - name: opentelemetry-instrumentation-concurrent_ruby directory: instrumentation/concurrent_ruby version_constant: [OpenTelemetry, Instrumentation, ConcurrentRuby, VERSION] @@ -195,6 +191,10 @@ gems: directory: instrumentation/sinatra version_constant: [OpenTelemetry, Instrumentation, Sinatra, VERSION] + - name: opentelemetry-instrumentation-all + directory: instrumentation/all + version_constant: [OpenTelemetry, Instrumentation, All, VERSION] + - name: opentelemetry-propagator-ottrace directory: propagator/ottrace version_constant: [OpenTelemetry, Propagator, OTTrace, VERSION] @@ -208,7 +208,17 @@ gems: version_rb_path: lib/opentelemetry/resource/detectors/version.rb version_constant: [OpenTelemetry, Resource, Detectors, VERSION] + - name: opentelemetry-resource-detector-azure + directory: resources/azure + version_rb_path: lib/opentelemetry/resource/detector/azure/version.rb + version_constant: [OpenTelemetry, Resource, Detector, Azure, VERSION] + - name: opentelemetry-resource-detector-container directory: resources/container version_rb_path: lib/opentelemetry/resource/detector/container/version.rb version_constant: [OpenTelemetry, Resource, Detector, Container, VERSION] + + - name: opentelemetry-resource-detector-google_cloud_platform + directory: resources/google_cloud_platform + version_rb_path: lib/opentelemetry/resource/detector/google_cloud_platform/version.rb + version_constant: [OpenTelemetry, Resource, Detector, GoogleCloudPlatform, VERSION] diff --git a/.toys/.toys.rb b/.toys/.toys.rb index 0131aac9c4..76d3765c52 100644 --- a/.toys/.toys.rb +++ b/.toys/.toys.rb @@ -1,6 +1,7 @@ -toys_version! ">= 0.14.5" +toys_version! "0.14.7" load_git remote: "https://github.com/dazuma/toys.git", path: ".toys/release", as: "release", + commit: "toys/v0.14.7", update: 3600 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1c9acf194d..3919290613 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ As with other OpenTelemetry clients, opentelemetry-ruby follows the ### Focus on Capabilities, Not Structure Compliance OpenTelemetry is an evolving specification, one where the desires and -use cases are clear, but the method to satisfy those uses cases are not. +use cases are clear, but the method to satisfy those use cases are not. As such, Contributions should provide functionality and behavior that conforms to the specification, but the interface and structure are flexible. @@ -344,6 +344,56 @@ For releases to succeed, new gems MUST include the following: * A `CHANGELOG.md` file. * A `yard` rake task. +## Dependabot Updates + +This repository uses [Dependabot](https://dependabot.com/) to keep dependencies up to date, however there shared development dependencies are often scattered across multiple gems. Dependabot does not currently support the ability to group dependencies for gems in multiple subdirectories, so we use a custom script to bulk update dependencies across all gems. + +E.g. if you want to update Rubocop to version 1.56.1, you would run: + +```console + +$> bin/update-dependencies rubocop 1.56.1 + +Review your changes and commit +Press any key to continue + +``` + +This will then run a bulk update on all of the gems in the repository, and then prompt you to review the changes and stage them for a commit: + +```console + +diff --git a/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec b/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec +index 42c5ecba..74fcc743 100644 +--- a/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec ++++ b/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec +@@ -28,7 +28,7 @@ Gem::Specification.new do |spec| + spec.add_development_dependency 'bundler', '~> 2.4' + spec.add_development_dependency 'minitest', '~> 5.0' + spec.add_development_dependency 'rake', '~> 13.0' +- spec.add_development_dependency 'rubocop', '~> 1.50.0' ++ spec.add_development_dependency 'rubocop', '~> 1.56.1' + spec.add_development_dependency 'simplecov', '~> 0.22.0' + spec.add_development_dependency 'yard', '~> 0.9' + spec.add_development_dependency 'yard-doctest', '~> 0.1.6' +(1/1) Stage this hunk [y,n,q,a,d,e,?]? y + +diff --git a/propagator/xray/opentelemetry-propagator-xray.gemspec b/propagator/xray/opentelemetry-propagator-xray.gemspec +index e29acbfc..85622d25 100644 +--- a/propagator/xray/opentelemetry-propagator-xray.gemspec ++++ b/propagator/xray/opentelemetry-propagator-xray.gemspec +@@ -31,7 +31,7 @@ Gem::Specification.new do |spec| + spec.add_development_dependency 'bundler', '~> 2.4' + spec.add_development_dependency 'minitest', '~> 5.0' + spec.add_development_dependency 'rake', '~> 13.0' +- spec.add_development_dependency 'rubocop', '~> 1.50.0' ++ spec.add_development_dependency 'rubocop', '~> 1.56.1' + spec.add_development_dependency 'simplecov', '~> 0.22.0' + spec.add_development_dependency 'yard', '~> 0.9' + spec.add_development_dependency 'yard-doctest', '~> 0.1.6' +(1/1) Stage this hunk [y,n,q,a,d,e,?]? y +``` + [cncf-cla]: https://identity.linuxfoundation.org/projects/cncf [github-draft]: https://github.blog/2019-02-14-introducing-draft-pull-requests/ [kube-github-workflow-pr]: https://github.com/kubernetes/community/blob/master/contributors/guide/github-workflow.md#7-create-a-pull-request diff --git a/Gemfile b/Gemfile index e76b496d71..d39b109d82 100644 --- a/Gemfile +++ b/Gemfile @@ -7,4 +7,4 @@ source 'https://rubygems.org' gem 'rake', '~> 13.0' -gem 'rubocop', '~> 1.55.1' +gem 'rubocop', '~> 1.56.2' diff --git a/bin/update-dependencies b/bin/update-dependencies new file mode 100755 index 0000000000..446fc8d037 --- /dev/null +++ b/bin/update-dependencies @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -z "$1" ] ; then + echo "gem name is required!" && exit 1; +fi + +if [ -z "$2" ] ; then + echo "gem version is required!" && exit 2; +fi + +for gemspec in $(git ls-files \*.gemspec) +do + sed -i -E "s/'$1', '~> [[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+'/'$1', '~> $2'/" "$gemspec" +done + +echo "Review your changes and commit" +read -n 1 -s -r -p "Press any key to continue" +echo "" +git add -p diff --git a/instrumentation/action_pack/opentelemetry-instrumentation-action_pack.gemspec b/instrumentation/action_pack/opentelemetry-instrumentation-action_pack.gemspec index 3462f99b98..f12531d063 100644 --- a/instrumentation/action_pack/opentelemetry-instrumentation-action_pack.gemspec +++ b/instrumentation/action_pack/opentelemetry-instrumentation-action_pack.gemspec @@ -29,18 +29,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_dependency 'opentelemetry-instrumentation-rack', '~> 0.21' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rails', '>= 6' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/action_view/opentelemetry-instrumentation-action_view.gemspec b/instrumentation/action_view/opentelemetry-instrumentation-action_view.gemspec index a38ee15389..26502b7141 100644 --- a/instrumentation/action_view/opentelemetry-instrumentation-action_view.gemspec +++ b/instrumentation/action_view/opentelemetry-instrumentation-action_view.gemspec @@ -29,18 +29,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-active_support', '~> 0.1' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rails', '>= 6' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/active_job/CHANGELOG.md b/instrumentation/active_job/CHANGELOG.md index eaef35814e..fdc4420c92 100644 --- a/instrumentation/active_job/CHANGELOG.md +++ b/instrumentation/active_job/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-active_job +### v0.6.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.5.2 / 2023-08-03 * FIXED: Add code semconv attributes diff --git a/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/patches/active_job_callbacks.rb b/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/patches/active_job_callbacks.rb index f2a242310e..c3f612599c 100644 --- a/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/patches/active_job_callbacks.rb +++ b/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/patches/active_job_callbacks.rb @@ -14,7 +14,7 @@ def self.prepended(base) base.class_eval do around_enqueue do |job, block| span_kind = job.class.queue_adapter_name == 'inline' ? :client : :producer - span_name = "#{otel_config[:span_naming] == :job_class ? job.class : job.queue_name} send" + span_name = "#{otel_config[:span_naming] == :job_class ? job.class : job.queue_name} publish" span_attributes = job_attributes(job) otel_tracer.in_span(span_name, attributes: span_attributes, kind: span_kind) do OpenTelemetry.propagation.inject(job.metadata) diff --git a/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/version.rb b/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/version.rb index fc7a6fa2ef..5d7f6add46 100644 --- a/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/version.rb +++ b/instrumentation/active_job/lib/opentelemetry/instrumentation/active_job/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module ActiveJob - VERSION = '0.5.2' + VERSION = '0.6.0' end end end diff --git a/instrumentation/active_job/opentelemetry-instrumentation-active_job.gemspec b/instrumentation/active_job/opentelemetry-instrumentation-active_job.gemspec index f4465beb74..2e0ab8892c 100644 --- a/instrumentation/active_job/opentelemetry-instrumentation-active_job.gemspec +++ b/instrumentation/active_job/opentelemetry-instrumentation-active_job.gemspec @@ -29,18 +29,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activejob', '>= 6.0.0' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'pry' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/active_job/test/instrumentation/active_job/patches/active_job_callbacks_test.rb b/instrumentation/active_job/test/instrumentation/active_job/patches/active_job_callbacks_test.rb index 7a01df9474..f2c6f996cf 100644 --- a/instrumentation/active_job/test/instrumentation/active_job/patches/active_job_callbacks_test.rb +++ b/instrumentation/active_job/test/instrumentation/active_job/patches/active_job_callbacks_test.rb @@ -16,7 +16,7 @@ let(:config) { { propagation_style: :link, force_flush: false, span_naming: :queue } } let(:exporter) { EXPORTER } let(:spans) { exporter.finished_spans } - let(:send_span) { spans.find { |s| s.name == 'default send' } } + let(:publish_span) { spans.find { |s| s.name == 'default publish' } } let(:process_span) { spans.find { |s| s.name == 'default process' } } before do @@ -41,7 +41,7 @@ it 'traces enqueuing and processing the job' do TestJob.perform_later - _(send_span).wont_be_nil + _(publish_span).wont_be_nil _(process_span).wont_be_nil end end @@ -50,7 +50,7 @@ it 'only traces processing the job' do TestJob.perform_now - _(send_span).must_be_nil + _(publish_span).must_be_nil _(process_span).wont_be_nil _(process_span.attributes['code.namespace']).must_equal('TestJob') _(process_span.attributes['code.function']).must_equal('perform_now') @@ -97,14 +97,14 @@ TestJob.perform_later - _(send_span.kind).must_equal(:client) + _(publish_span.kind).must_equal(:client) _(process_span.kind).must_equal(:server) end it 'sets correct span kinds for all other jobs' do TestJob.perform_later - _(send_span.kind).must_equal(:producer) + _(publish_span.kind).must_equal(:producer) _(process_span.kind).must_equal(:consumer) end end @@ -113,7 +113,7 @@ it 'sets the messaging.operation attribute only when processing the job' do TestJob.perform_later - _(send_span.attributes['messaging.operation']).must_be_nil + _(publish_span.attributes['messaging.operation']).must_be_nil _(process_span.attributes['messaging.operation']).must_equal('process') end @@ -121,7 +121,7 @@ it 'is sets correctly for inline jobs' do TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['net.transport']).must_equal('inproc') end end @@ -129,7 +129,7 @@ it 'is set correctly for async jobs' do TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['net.transport']).must_equal('inproc') end end @@ -139,7 +139,7 @@ it 'is unset for unprioritized jobs' do TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['messaging.active_job.priority']).must_be_nil end end @@ -147,7 +147,7 @@ it 'is set for jobs with a priority' do TestJob.set(priority: 1).perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['messaging.active_job.priority']).must_equal(1) end end @@ -157,7 +157,7 @@ it 'is unset for jobs that do not specify a wait time' do TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['messaging.active_job.scheduled_at']).must_be_nil end end @@ -166,8 +166,8 @@ job = TestJob.set(wait: 0.second).perform_later # Only the sending span is a 'scheduled' thing - _(send_span.attributes['messaging.active_job.scheduled_at']).must_equal(job.scheduled_at) - assert(send_span.attributes['messaging.active_job.scheduled_at']) + _(publish_span.attributes['messaging.active_job.scheduled_at']).must_equal(job.scheduled_at) + assert(publish_span.attributes['messaging.active_job.scheduled_at']) # The processing span isn't a 'scheduled' thing _(process_span.attributes['messaging.active_job.scheduled_at']).must_be_nil @@ -185,7 +185,7 @@ ActiveJob::Base.queue_adapter = :inline TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['messaging.system']).must_equal('inline') end end @@ -193,7 +193,7 @@ it 'is set correctly for the async adapter' do TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['messaging.system']).must_equal('async') end end @@ -232,7 +232,7 @@ it 'generally sets other attributes as expected' do job = TestJob.perform_later - [send_span, process_span].each do |span| + [publish_span, process_span].each do |span| _(span.attributes['code.namespace']).must_equal('TestJob') _(span.attributes['messaging.destination_kind']).must_equal('queue') _(span.attributes['messaging.system']).must_equal('async') @@ -245,8 +245,8 @@ describe 'when queue - default' do it 'names spans according to the job queue' do TestJob.set(queue: :foo).perform_later - send_span = exporter.finished_spans.find { |s| s.name == 'foo send' } - _(send_span).wont_be_nil + publish_span = exporter.finished_spans.find { |s| s.name == 'foo publish' } + _(publish_span).wont_be_nil process_span = exporter.finished_spans.find { |s| s.name == 'foo process' } _(process_span).wont_be_nil @@ -258,8 +258,8 @@ it 'names span according to the job class' do TestJob.set(queue: :foo).perform_later - send_span = exporter.finished_spans.find { |s| s.name == 'TestJob send' } - _(send_span).wont_be_nil + publish_span = exporter.finished_spans.find { |s| s.name == 'TestJob publish' } + _(publish_span).wont_be_nil process_span = exporter.finished_spans.find { |s| s.name == 'TestJob process' } _(process_span).wont_be_nil @@ -309,11 +309,11 @@ it 'creates span links in separate traces' do TestJob.perform_later - _(send_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) _(process_span.total_recorded_links).must_equal(1) - _(process_span.links[0].span_context.trace_id).must_equal(send_span.trace_id) - _(process_span.links[0].span_context.span_id).must_equal(send_span.span_id) + _(process_span.links[0].span_context.trace_id).must_equal(publish_span.trace_id) + _(process_span.links[0].span_context.span_id).must_equal(publish_span.span_id) end it 'propagates baggage' do @@ -322,11 +322,11 @@ BaggageJob.perform_later end - _(send_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) _(process_span.total_recorded_links).must_equal(1) - _(process_span.links[0].span_context.trace_id).must_equal(send_span.trace_id) - _(process_span.links[0].span_context.span_id).must_equal(send_span.span_id) + _(process_span.links[0].span_context.trace_id).must_equal(publish_span.trace_id) + _(process_span.links[0].span_context.span_id).must_equal(publish_span.span_id) _(process_span.attributes['success']).must_equal(true) end end @@ -339,8 +339,8 @@ _(process_span.total_recorded_links).must_equal(0) - _(send_span.trace_id).must_equal(process_span.trace_id) - _(process_span.parent_span_id).must_equal(send_span.span_id) + _(publish_span.trace_id).must_equal(process_span.trace_id) + _(process_span.parent_span_id).must_equal(publish_span.span_id) end it 'propagates baggage' do @@ -350,8 +350,8 @@ end _(process_span.total_recorded_links).must_equal(0) - _(send_span.trace_id).must_equal(process_span.trace_id) - _(process_span.parent_span_id).must_equal(send_span.span_id) + _(publish_span.trace_id).must_equal(process_span.trace_id) + _(process_span.parent_span_id).must_equal(publish_span.span_id) _(process_span.attributes['success']).must_equal(true) end end @@ -364,8 +364,8 @@ _(process_span.total_recorded_links).must_equal(0) - _(send_span.trace_id).wont_equal(process_span.trace_id) - _(process_span.parent_span_id).wont_equal(send_span.span_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) + _(process_span.parent_span_id).wont_equal(publish_span.span_id) end it 'still propagates baggage' do @@ -376,8 +376,8 @@ _(process_span.total_recorded_links).must_equal(0) - _(send_span.trace_id).wont_equal(process_span.trace_id) - _(process_span.parent_span_id).wont_equal(send_span.span_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) + _(process_span.parent_span_id).wont_equal(publish_span.span_id) _(process_span.attributes['success']).must_equal(true) end end diff --git a/instrumentation/active_model_serializers/opentelemetry-instrumentation-active_model_serializers.gemspec b/instrumentation/active_model_serializers/opentelemetry-instrumentation-active_model_serializers.gemspec index 2965e5814f..fa465c7ac5 100644 --- a/instrumentation/active_model_serializers/opentelemetry-instrumentation-active_model_serializers.gemspec +++ b/instrumentation/active_model_serializers/opentelemetry-instrumentation-active_model_serializers.gemspec @@ -29,17 +29,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'active_model_serializers', '>= 0.10.0' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/active_record/opentelemetry-instrumentation-active_record.gemspec b/instrumentation/active_record/opentelemetry-instrumentation-active_record.gemspec index 1f9af91e60..b9351875f4 100644 --- a/instrumentation/active_record/opentelemetry-instrumentation-active_record.gemspec +++ b/instrumentation/active_record/opentelemetry-instrumentation-active_record.gemspec @@ -30,17 +30,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'ruby2_keywords' spec.add_development_dependency 'activerecord' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/active_support/CHANGELOG.md b/instrumentation/active_support/CHANGELOG.md index 3ca30ff7e2..b2ad56d80b 100644 --- a/instrumentation/active_support/CHANGELOG.md +++ b/instrumentation/active_support/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-active_support +### v0.4.2 / 2023-09-07 + +FIXED: Reduce Object allocation + ### v0.4.1 / 2023-06-05 * FIXED: Base config options diff --git a/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/span_subscriber.rb b/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/span_subscriber.rb index cfc0c20b24..72e8f04a9c 100644 --- a/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/span_subscriber.rb +++ b/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/span_subscriber.rb @@ -76,11 +76,11 @@ def finish(name, id, payload) token = payload.delete(:__opentelemetry_ctx_token) return unless span && token - payload = transform_payload(payload) - attrs = payload.map do |k, v| - [k.to_s, sanitized_value(v)] if valid_payload_key?(k) && valid_payload_value?(v) + attrs = transform_payload(payload).each_with_object({}) do |(k, v), accum| + accum[k.to_s] = sanitized_value(v) if valid_payload_key?(k) && valid_payload_value?(v) end - span.add_attributes(attrs.compact.to_h) + + span.add_attributes(attrs) if (e = payload[:exception_object]) span.record_exception(e) diff --git a/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/version.rb b/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/version.rb index 8d0733ba28..bb7b408cc0 100644 --- a/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/version.rb +++ b/instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module ActiveSupport - VERSION = '0.4.1' + VERSION = '0.4.2' end end end diff --git a/instrumentation/active_support/opentelemetry-instrumentation-active_support.gemspec b/instrumentation/active_support/opentelemetry-instrumentation-active_support.gemspec index 5b2de1e866..6b6aaa7d35 100644 --- a/instrumentation/active_support/opentelemetry-instrumentation-active_support.gemspec +++ b/instrumentation/active_support/opentelemetry-instrumentation-active_support.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activesupport' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk' @@ -38,11 +38,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pry-byebug' spec.add_development_dependency 'rails', '>= 6' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/all/CHANGELOG.md b/instrumentation/all/CHANGELOG.md index fca9c3d5e4..c81851ebfa 100644 --- a/instrumentation/all/CHANGELOG.md +++ b/instrumentation/all/CHANGELOG.md @@ -1,5 +1,13 @@ # Release History: opentelemetry-instrumentation-all +### v0.50.1 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names (Resque) + +### v0.50.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.40.0 / 2023-08-07 * ADDED: Add Gruf instrumentation diff --git a/instrumentation/all/lib/opentelemetry/instrumentation/all/version.rb b/instrumentation/all/lib/opentelemetry/instrumentation/all/version.rb index 45347f3211..038f4e9a26 100644 --- a/instrumentation/all/lib/opentelemetry/instrumentation/all/version.rb +++ b/instrumentation/all/lib/opentelemetry/instrumentation/all/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module All - VERSION = '0.40.0' + VERSION = '0.50.1' end end end diff --git a/instrumentation/all/opentelemetry-instrumentation-all.gemspec b/instrumentation/all/opentelemetry-instrumentation-all.gemspec index 823b332f29..0bb1151ac6 100644 --- a/instrumentation/all/opentelemetry-instrumentation-all.gemspec +++ b/instrumentation/all/opentelemetry-instrumentation-all.gemspec @@ -27,11 +27,11 @@ Gem::Specification.new do |spec| spec.required_ruby_version = '>= 3.0' spec.add_dependency 'opentelemetry-instrumentation-active_model_serializers', '~> 0.20.1' - spec.add_dependency 'opentelemetry-instrumentation-aws_sdk', '~> 0.4.1' - spec.add_dependency 'opentelemetry-instrumentation-bunny', '~> 0.20.1' + spec.add_dependency 'opentelemetry-instrumentation-aws_sdk', '~> 0.5.0' + spec.add_dependency 'opentelemetry-instrumentation-bunny', '~> 0.21.0' spec.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.21.1' spec.add_dependency 'opentelemetry-instrumentation-dalli', '~> 0.24.1' - spec.add_dependency 'opentelemetry-instrumentation-delayed_job', '~> 0.20.1' + spec.add_dependency 'opentelemetry-instrumentation-delayed_job', '~> 0.21.0' spec.add_dependency 'opentelemetry-instrumentation-ethon', '~> 0.21.1' spec.add_dependency 'opentelemetry-instrumentation-excon', '~> 0.21.1' spec.add_dependency 'opentelemetry-instrumentation-faraday', '~> 0.23.1' @@ -46,17 +46,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-mysql2', '~> 0.24.2' spec.add_dependency 'opentelemetry-instrumentation-net_http', '~> 0.22.1' spec.add_dependency 'opentelemetry-instrumentation-pg', '~> 0.25.2' - spec.add_dependency 'opentelemetry-instrumentation-que', '~> 0.6.1' - spec.add_dependency 'opentelemetry-instrumentation-racecar', '~> 0.2.1' + spec.add_dependency 'opentelemetry-instrumentation-que', '~> 0.7.0' + spec.add_dependency 'opentelemetry-instrumentation-racecar', '~> 0.3.0' spec.add_dependency 'opentelemetry-instrumentation-rack', '~> 0.23.1' - spec.add_dependency 'opentelemetry-instrumentation-rails', '~> 0.27.1' + spec.add_dependency 'opentelemetry-instrumentation-rails', '~> 0.28.0' spec.add_dependency 'opentelemetry-instrumentation-rake', '~> 0.2.1' - spec.add_dependency 'opentelemetry-instrumentation-rdkafka', '~> 0.3.1' + spec.add_dependency 'opentelemetry-instrumentation-rdkafka', '~> 0.4.0' spec.add_dependency 'opentelemetry-instrumentation-redis', '~> 0.25.1' - spec.add_dependency 'opentelemetry-instrumentation-resque', '~> 0.4.1' + spec.add_dependency 'opentelemetry-instrumentation-resque', '~> 0.5.0' spec.add_dependency 'opentelemetry-instrumentation-restclient', '~> 0.22.1' - spec.add_dependency 'opentelemetry-instrumentation-ruby_kafka', '~> 0.20.1' - spec.add_dependency 'opentelemetry-instrumentation-sidekiq', '~> 0.24.1' + spec.add_dependency 'opentelemetry-instrumentation-ruby_kafka', '~> 0.21.0' + spec.add_dependency 'opentelemetry-instrumentation-sidekiq', '~> 0.25.0' spec.add_dependency 'opentelemetry-instrumentation-sinatra', '~> 0.23.1' spec.add_dependency 'opentelemetry-instrumentation-trilogy', '~> 0.56.1' @@ -65,10 +65,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/aws_sdk/CHANGELOG.md b/instrumentation/aws_sdk/CHANGELOG.md index 4916d4d71b..686a7708ac 100644 --- a/instrumentation/aws_sdk/CHANGELOG.md +++ b/instrumentation/aws_sdk/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-aws_sdk +### v0.5.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.4.2 / 2023-08-03 * FIXED: Remove inline linter rules diff --git a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/handler.rb b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/handler.rb index 50bad4617d..a973adeb5c 100644 --- a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/handler.rb +++ b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/handler.rb @@ -95,7 +95,7 @@ def span_kind(client_method) def span_name(context, client_method) case client_method when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH - "#{MessagingHelper.queue_name(context)} send" + "#{MessagingHelper.queue_name(context)} publish" when SQS_RECEIVE_MESSAGE "#{MessagingHelper.queue_name(context)} receive" else diff --git a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/message_attributes.rb b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/message_attributes.rb index b5b5777f16..4a4519f027 100644 --- a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/message_attributes.rb +++ b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/message_attributes.rb @@ -29,7 +29,7 @@ def self.set(carrier, key, value) # OpenTelemetry.propagation.extract(message, getter: MessageAttributeGetter) class MessageAttributeGetter def self.get(carrier, key) - return carrier[key][:string_value] if carrier[key][:data_type] == 'String' + carrier[key][:string_value] if carrier[key][:data_type] == 'String' end end end diff --git a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/version.rb b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/version.rb index 17a14f8e15..d40079038d 100644 --- a/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/version.rb +++ b/instrumentation/aws_sdk/lib/opentelemetry/instrumentation/aws_sdk/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module AwsSdk - VERSION = '0.4.2' + VERSION = '0.5.0' end end end diff --git a/instrumentation/aws_sdk/opentelemetry-instrumentation-aws_sdk.gemspec b/instrumentation/aws_sdk/opentelemetry-instrumentation-aws_sdk.gemspec index bc5960c3a6..1c91da124f 100644 --- a/instrumentation/aws_sdk/opentelemetry-instrumentation-aws_sdk.gemspec +++ b/instrumentation/aws_sdk/opentelemetry-instrumentation-aws_sdk.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'aws-sdk', '>= 2.0' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' @@ -37,11 +37,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pry' spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/aws_sdk/test/opentelemetry/instrumentation_test.rb b/instrumentation/aws_sdk/test/opentelemetry/instrumentation_test.rb index ed07e858ca..1917da5e05 100644 --- a/instrumentation/aws_sdk/test/opentelemetry/instrumentation_test.rb +++ b/instrumentation/aws_sdk/test/opentelemetry/instrumentation_test.rb @@ -205,7 +205,7 @@ sns_client.publish message: 'msg', phone_number: '123456' _(last_span.attributes['messaging.destination']).must_equal 'phone_number' - _(last_span.name).must_equal 'phone_number send' + _(last_span.name).must_equal 'phone_number publish' end end end diff --git a/instrumentation/base/opentelemetry-instrumentation-base.gemspec b/instrumentation/base/opentelemetry-instrumentation-base.gemspec index b20a102495..f40f75af0b 100644 --- a/instrumentation/base/opentelemetry-instrumentation-base.gemspec +++ b/instrumentation/base/opentelemetry-instrumentation-base.gemspec @@ -32,10 +32,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.22.0' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/bunny/CHANGELOG.md b/instrumentation/bunny/CHANGELOG.md index e8d72bb695..303b724da2 100644 --- a/instrumentation/bunny/CHANGELOG.md +++ b/instrumentation/bunny/CHANGELOG.md @@ -1,5 +1,13 @@ # Release History: opentelemetry-instrumentation-bunny +### v0.21.1 / 2023-09-27 + +* FIXED: Headers property needs to exist + +### v0.21.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.20.1 / 2023-06-05 * FIXED: Base config options diff --git a/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/patch_helpers.rb b/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/patch_helpers.rb index 8e2d0f4e67..043a175699 100644 --- a/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/patch_helpers.rb +++ b/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/patch_helpers.rb @@ -16,7 +16,7 @@ def self.with_send_span(channel, tracer, exchange, routing_key, &block) attributes = basic_attributes(channel, channel.connection, exchange, routing_key) destination = destination_name(exchange, routing_key) - tracer.in_span("#{destination} send", attributes: attributes, kind: :producer, &block) + tracer.in_span("#{destination} publish", attributes: attributes, kind: :producer, &block) end def self.with_process_span(channel, tracer, delivery_info, properties, &block) @@ -35,6 +35,7 @@ def self.destination_name(exchange, routing_key) def self.extract_context(properties) # use the receive span as parent context parent_context = OpenTelemetry.propagation.extract(properties[:tracer_receive_headers]) + return [parent_context, nil] if properties[:headers].nil? # link to the producer context producer_context = OpenTelemetry.propagation.extract(properties[:headers]) diff --git a/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/version.rb b/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/version.rb index e278de3951..c567843e53 100644 --- a/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/version.rb +++ b/instrumentation/bunny/lib/opentelemetry/instrumentation/bunny/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Bunny - VERSION = '0.20.1' + VERSION = '0.21.1' end end end diff --git a/instrumentation/bunny/opentelemetry-instrumentation-bunny.gemspec b/instrumentation/bunny/opentelemetry-instrumentation-bunny.gemspec index 9c5f73fa41..40aa3a9f51 100644 --- a/instrumentation/bunny/opentelemetry-instrumentation-bunny.gemspec +++ b/instrumentation/bunny/opentelemetry-instrumentation-bunny.gemspec @@ -28,16 +28,15 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'bunny' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patch_helpers_test.rb b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patch_helpers_test.rb new file mode 100644 index 0000000000..522f555a22 --- /dev/null +++ b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patch_helpers_test.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require_relative '../../../../lib/opentelemetry/instrumentation/bunny/patch_helpers' + +describe OpenTelemetry::Instrumentation::Bunny::PatchHelpers do + let(:properties) do + { + headers: { + 'traceparent' => '00-eab67ae26433f603121bd5674149d9e1-2007f3325d3cb6d6-01' + }, + tracer_receive_headers: { + 'traceparent' => '00-cd52775b3cb38931adf5fa880f890c25-cddb52a470027489-01' + } + } + end + + describe '.extract_context' do + it 'returns the parent context with links when headers from producer exists' do + parent_context, links = OpenTelemetry::Instrumentation::Bunny::PatchHelpers.extract_context(properties) + _(parent_context).must_be_instance_of(OpenTelemetry::Context) + _(links).must_be_instance_of(Array) + _(links.first).must_be_instance_of(OpenTelemetry::Trace::Link) + end + + it 'returns the parent context with no links when headers from producer not present' do + properties.delete(:headers) + parent_context, links = OpenTelemetry::Instrumentation::Bunny::PatchHelpers.extract_context(properties) + _(parent_context).must_be_instance_of(OpenTelemetry::Context) + _(links).must_be_nil + end + end +end diff --git a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/channel_test.rb b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/channel_test.rb index f82c72bb10..737483c7e6 100644 --- a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/channel_test.rb +++ b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/channel_test.rb @@ -48,17 +48,17 @@ _(spans.size >= 3).must_equal(true) - send_span = spans.find { |span| span.name == "#{topic}.ruby.news send" } - _(send_span).wont_be_nil - _(send_span.kind).must_equal(:producer) - _(send_span.attributes['messaging.system']).must_equal('rabbitmq') - _(send_span.attributes['messaging.destination']).must_equal(topic) - _(send_span.attributes['messaging.destination_kind']).must_equal('topic') - _(send_span.attributes['messaging.protocol']).must_equal('AMQP') - _(send_span.attributes['messaging.protocol_version']).must_equal('0.9.1') - _(send_span.attributes['messaging.rabbitmq.routing_key']).must_equal('ruby.news') - _(send_span.attributes['net.peer.name']).must_equal(host) - _(send_span.attributes['net.peer.port']).must_equal(port.to_i) + publish_span = spans.find { |span| span.name == "#{topic}.ruby.news publish" } + _(publish_span).wont_be_nil + _(publish_span.kind).must_equal(:producer) + _(publish_span.attributes['messaging.system']).must_equal('rabbitmq') + _(publish_span.attributes['messaging.destination']).must_equal(topic) + _(publish_span.attributes['messaging.destination_kind']).must_equal('topic') + _(publish_span.attributes['messaging.protocol']).must_equal('AMQP') + _(publish_span.attributes['messaging.protocol_version']).must_equal('0.9.1') + _(publish_span.attributes['messaging.rabbitmq.routing_key']).must_equal('ruby.news') + _(publish_span.attributes['net.peer.name']).must_equal(host) + _(publish_span.attributes['net.peer.port']).must_equal(port.to_i) receive_span = spans.find { |span| span.name == "#{topic}.ruby.news receive" } _(receive_span).wont_be_nil @@ -78,7 +78,7 @@ _(process_span.trace_id).must_equal(receive_span.trace_id) linked_span_context = process_span.links.first.span_context - _(linked_span_context.trace_id).must_equal(send_span.trace_id) - _(linked_span_context.span_id).must_equal(send_span.span_id) + _(linked_span_context.trace_id).must_equal(publish_span.trace_id) + _(linked_span_context.span_id).must_equal(publish_span.span_id) end end unless ENV['OMIT_SERVICES'] diff --git a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/consumer_test.rb b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/consumer_test.rb index d6322014ea..2d19600bcf 100644 --- a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/consumer_test.rb +++ b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/consumer_test.rb @@ -53,9 +53,9 @@ _(spans.size >= 3).must_equal(true) - send_span = spans.find { |span| span.name == "#{topic}.ruby.news send" } - _(send_span).wont_be_nil - _(send_span.kind).must_equal(:producer) + publish_span = spans.find { |span| span.name == "#{topic}.ruby.news publish" } + _(publish_span).wont_be_nil + _(publish_span.kind).must_equal(:producer) receive_span = spans.find { |span| span.name == "#{topic}.ruby.news receive" } _(receive_span).wont_be_nil @@ -68,7 +68,7 @@ _(process_span.trace_id).must_equal(receive_span.trace_id) linked_span_context = process_span.links.first.span_context - _(linked_span_context.trace_id).must_equal(send_span.trace_id) - _(linked_span_context.span_id).must_equal(send_span.span_id) + _(linked_span_context.trace_id).must_equal(publish_span.trace_id) + _(linked_span_context.span_id).must_equal(publish_span.span_id) end end unless ENV['OMIT_SERVICES'] diff --git a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/queue_test.rb b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/queue_test.rb index c0c90a2924..86c2df1ee4 100644 --- a/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/queue_test.rb +++ b/instrumentation/bunny/test/opentelemetry/instrumentation/bunny/patches/queue_test.rb @@ -47,8 +47,8 @@ queue.pop { |_delivery_info, _metadata, _payload| break } - send_span = spans.find { |span| span.name == ".#{queue_name} send" } - _(send_span).wont_be_nil + publish_span = spans.find { |span| span.name == ".#{queue_name} publish" } + _(publish_span).wont_be_nil receive_span = spans.find { |span| span.name == ".#{queue_name} receive" } _(receive_span).wont_be_nil @@ -58,7 +58,7 @@ _(process_span.kind).must_equal(:consumer) linked_span_context = process_span.links.first.span_context - _(linked_span_context.trace_id).must_equal(send_span.trace_id) + _(linked_span_context.trace_id).must_equal(publish_span.trace_id) end it 'traces messages returned' do diff --git a/instrumentation/bunny/test/test_helper.rb b/instrumentation/bunny/test/test_helper.rb index 835bba61be..0c28392007 100644 --- a/instrumentation/bunny/test/test_helper.rb +++ b/instrumentation/bunny/test/test_helper.rb @@ -19,4 +19,5 @@ c.error_handler = ->(exception:, message:) { raise(exception || message) } c.logger = Logger.new($stderr, level: ENV.fetch('OTEL_LOG_LEVEL', 'fatal').to_sym) c.add_span_processor SPAN_PROCESSOR + c.propagators = [OpenTelemetry::Trace::Propagation::TraceContext.text_map_propagator] end diff --git a/instrumentation/concurrent_ruby/opentelemetry-instrumentation-concurrent_ruby.gemspec b/instrumentation/concurrent_ruby/opentelemetry-instrumentation-concurrent_ruby.gemspec index 0c7ded253d..d2cfb4b33d 100644 --- a/instrumentation/concurrent_ruby/opentelemetry-instrumentation-concurrent_ruby.gemspec +++ b/instrumentation/concurrent_ruby/opentelemetry-instrumentation-concurrent_ruby.gemspec @@ -28,16 +28,15 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'concurrent-ruby', '~> 1.1.6' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/dalli/opentelemetry-instrumentation-dalli.gemspec b/instrumentation/dalli/opentelemetry-instrumentation-dalli.gemspec index cae6a2f62e..8a12e23604 100644 --- a/instrumentation/dalli/opentelemetry-instrumentation-dalli.gemspec +++ b/instrumentation/dalli/opentelemetry-instrumentation-dalli.gemspec @@ -29,16 +29,15 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'dalli', '>= 2.7' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/delayed_job/Appraisals b/instrumentation/delayed_job/Appraisals index c3e9b24a24..61ac8e82de 100644 --- a/instrumentation/delayed_job/Appraisals +++ b/instrumentation/delayed_job/Appraisals @@ -4,6 +4,14 @@ # # SPDX-License-Identifier: Apache-2.0 -appraise 'delayed_job-4.1' do - gem 'delayed_job', '~> 4.1.0' +appraise 'delayed_job_4.1-rails-7.1' do + gem 'activejob', '~> 7.1.0' +end + +appraise 'delayed_job_4.1-rails-7.0' do + gem 'activejob', '~> 7.0.0' +end + +appraise 'delayed_job-4.1-rails-6.1' do + gem 'activejob', '~> 6.1.0' end diff --git a/instrumentation/delayed_job/CHANGELOG.md b/instrumentation/delayed_job/CHANGELOG.md index 6013e87526..67b9f9441f 100644 --- a/instrumentation/delayed_job/CHANGELOG.md +++ b/instrumentation/delayed_job/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-delayed_job +### v0.21.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.20.1 / 2023-06-05 * FIXED: Base config options diff --git a/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin.rb b/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin.rb index 5d9e49fd8a..304868adb4 100644 --- a/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin.rb +++ b/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin.rb @@ -17,10 +17,10 @@ def instrument_enqueue(job, &block) return block.call(job) unless enabled? attributes = build_attributes(job) - attributes['messaging.operation'] = 'send' + attributes['messaging.operation'] = 'publish' attributes.compact! - tracer.in_span("#{job_queue(job)} send", attributes: attributes, kind: :producer) do |span| + tracer.in_span("#{job_queue(job)} publish", attributes: attributes, kind: :producer) do |span| yield job span.set_attribute('messaging.message_id', job.id.to_s) add_events(span, job) @@ -56,7 +56,6 @@ def build_attributes(job) end def add_events(span, job) - span.add_event('created_at', timestamp: job.created_at) span.add_event('run_at', timestamp: job.run_at) if job.run_at span.add_event('locked_at', timestamp: job.locked_at) if job.locked_at end diff --git a/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/version.rb b/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/version.rb index e1fde513b3..989bf86fba 100644 --- a/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/version.rb +++ b/instrumentation/delayed_job/lib/opentelemetry/instrumentation/delayed_job/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module DelayedJob - VERSION = '0.20.1' + VERSION = '0.21.0' end end end diff --git a/instrumentation/delayed_job/opentelemetry-instrumentation-delayed_job.gemspec b/instrumentation/delayed_job/opentelemetry-instrumentation-delayed_job.gemspec index 0b5b6f0b4d..9978617c20 100644 --- a/instrumentation/delayed_job/opentelemetry-instrumentation-delayed_job.gemspec +++ b/instrumentation/delayed_job/opentelemetry-instrumentation-delayed_job.gemspec @@ -28,20 +28,18 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' - spec.add_development_dependency 'delayed_job', '~> 4.1.0' - spec.add_development_dependency 'delayed_job_active_record' + spec.add_development_dependency 'delayed_job', '~> 4.1.7' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'sqlite3' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin_test.rb b/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin_test.rb index 17f1f93a70..85f8f74644 100644 --- a/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin_test.rb +++ b/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job/plugins/tracer_plugin_test.rb @@ -16,8 +16,7 @@ let(:span) { exporter.finished_spans.last } before do - TestHelper.setup_active_record - + Delayed::Worker.backend.delete_all stub_const('BasicPayload', Class.new do def perform; end end) @@ -50,8 +49,6 @@ def job_data after do OpenTelemetry.propagation = @orig_propagation - - TestHelper.teardown_active_record end describe 'enqueue callback' do @@ -65,20 +62,18 @@ def job_data _(exporter.finished_spans.size).must_equal 1 _(span).must_be_kind_of OpenTelemetry::SDK::Trace::SpanData - _(span.name).must_equal 'default send' + _(span.name).must_equal 'default publish' _(span.attributes['messaging.system']).must_equal 'delayed_job' _(span.attributes['messaging.destination']).must_equal 'default' _(span.attributes['messaging.destination_kind']).must_equal 'queue' _(span.attributes['messaging.delayed_job.name']).must_equal 'BasicPayload' _(span.attributes['messaging.delayed_job.priority']).must_equal 0 - _(span.attributes['messaging.operation']).must_equal 'send' + _(span.attributes['messaging.operation']).must_equal 'publish' _(span.attributes['messaging.message_id']).must_be_kind_of String - _(span.events.size).must_equal 2 - _(span.events[0].name).must_equal 'created_at' + _(span.events.size).must_equal 1 + _(span.events[0].name).must_equal 'run_at' _(span.events[0].timestamp).must_be_kind_of Integer - _(span.events[1].name).must_equal 'run_at' - _(span.events[1].timestamp).must_be_kind_of Integer end describe 'when queue name is set' do @@ -122,9 +117,8 @@ def job_data _(exporter.finished_spans).must_equal [] job_enqueue _(exporter.finished_spans.size).must_equal 1 - _(exporter.finished_spans.first.name).must_equal 'default send' + _(exporter.finished_spans.first.name).must_equal 'default publish' job_run - _(exporter.finished_spans.size).must_equal 2 _(span).must_be_kind_of OpenTelemetry::SDK::Trace::SpanData _(span.name).must_equal 'default process' @@ -138,17 +132,15 @@ def job_data _(span.attributes['messaging.operation']).must_equal 'process' _(span.attributes['messaging.message_id']).must_be_kind_of String - _(span.events.size).must_equal 3 - _(span.events[0].name).must_equal 'created_at' + _(span.events[0].name).must_equal 'run_at' _(span.events[0].timestamp).must_be_kind_of Integer - _(span.events[1].name).must_equal 'run_at' + _(span.events[1].name).must_equal 'locked_at' _(span.events[1].timestamp).must_be_kind_of Integer - _(span.events[2].name).must_equal 'locked_at' - _(span.events[2].timestamp).must_be_kind_of Integer end describe 'when queue name is set' do let(:job_params) { { queue: 'foobar_queue' } } + let(:job_enqueue) { Delayed::Job.enqueue(@basic_payload.new, job_params) } it 'span tags include queue name' do job_run @@ -181,11 +173,10 @@ def job_data it 'has resource name equal to underlying ActiveJob class name' do job_run _(span.attributes['messaging.delayed_job.name']).must_equal 'ErrorPayload' - _(span.events.size).must_equal 4 - _(span.events[3].name).must_equal 'exception' - _(span.events[3].timestamp).must_be_kind_of Integer - _(span.events[3].attributes['exception.type']).must_equal 'ArgumentError' - _(span.events[3].attributes['exception.message']).must_equal 'This job failed' + _(span.events[2].name).must_equal 'exception' + _(span.events[2].timestamp).must_be_kind_of Integer + _(span.events[2].attributes['exception.type']).must_equal 'ArgumentError' + _(span.events[2].attributes['exception.message']).must_equal 'This job failed' end end end diff --git a/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job_test.rb b/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job_test.rb index 33ad547bd3..907122b347 100644 --- a/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job_test.rb +++ b/instrumentation/delayed_job/test/opentelemetry/instrumentation/delayed_job_test.rb @@ -11,6 +11,7 @@ let(:exporter) { EXPORTER } before do + Delayed::Worker.backend.delete_all instrumentation.install exporter.reset end @@ -48,14 +49,6 @@ end describe 'tracing' do - before do - TestHelper.setup_active_record - end - - after do - TestHelper.teardown_active_record - end - it 'before job' do _(exporter.finished_spans.size).must_equal 0 end diff --git a/instrumentation/delayed_job/test/test_helper.rb b/instrumentation/delayed_job/test/test_helper.rb index 76ff7bba11..3b5b701954 100644 --- a/instrumentation/delayed_job/test/test_helper.rb +++ b/instrumentation/delayed_job/test/test_helper.rb @@ -7,8 +7,13 @@ require 'bundler/setup' Bundler.require(:default, :development, :test) +# These are dependencies that delayed job assumes are already loaded +# We are compensating for that here in this test... that is a smell +# NoMethodError: undefined method `extract_options!' for [#, {}]:Array +# delayed_job-4.1.11/lib/delayed/backend/job_preparer.rb:7:in `initialize'0 +require 'active_support/core_ext/array/extract_options' + require 'opentelemetry-instrumentation-delayed_job' -require 'active_support/core_ext/kernel/reporting' require 'minitest/autorun' require 'rspec/mocks/minitest_integration' @@ -24,31 +29,7 @@ c.add_span_processor span_processor end -ActiveRecord::Migration.verbose = false - -module TestHelper - extend self - - def setup_active_record - ::ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') - ::ActiveRecord::Schema.define do - create_table 'delayed_jobs', force: :cascade do |t| - t.integer 'priority', default: 0, null: false - t.integer 'attempts', default: 0, null: false - t.text 'handler', null: false - t.text 'last_error' - t.datetime 'run_at' - t.datetime 'locked_at' - t.datetime 'failed_at' - t.string 'locked_by' - t.string 'queue' - t.datetime 'created_at' - t.datetime 'updated_at' - end - end - end - - def teardown_active_record - ::ActiveRecord::Base.connection.close - end -end +gem_dir = Gem::Specification.find_by_name('delayed_job').gem_dir +require "#{gem_dir}/spec/delayed/backend/test" + +Delayed::Worker.backend = Delayed::Backend::Test::Job diff --git a/instrumentation/ethon/opentelemetry-instrumentation-ethon.gemspec b/instrumentation/ethon/opentelemetry-instrumentation-ethon.gemspec index abed3e4ca1..e24672d520 100644 --- a/instrumentation/ethon/opentelemetry-instrumentation-ethon.gemspec +++ b/instrumentation/ethon/opentelemetry-instrumentation-ethon.gemspec @@ -29,16 +29,15 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'ethon', '~> 0.12.0' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/excon/opentelemetry-instrumentation-excon.gemspec b/instrumentation/excon/opentelemetry-instrumentation-excon.gemspec index e9cbd7adfe..117c4e6f18 100644 --- a/instrumentation/excon/opentelemetry-instrumentation-excon.gemspec +++ b/instrumentation/excon/opentelemetry-instrumentation-excon.gemspec @@ -29,17 +29,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'excon', '~> 0.71.0' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/faraday/opentelemetry-instrumentation-faraday.gemspec b/instrumentation/faraday/opentelemetry-instrumentation-faraday.gemspec index 90dd4c0cf8..d89bcaf74a 100644 --- a/instrumentation/faraday/opentelemetry-instrumentation-faraday.gemspec +++ b/instrumentation/faraday/opentelemetry-instrumentation-faraday.gemspec @@ -29,17 +29,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'faraday', '~> 0.17.0' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/grape/opentelemetry-instrumentation-grape.gemspec b/instrumentation/grape/opentelemetry-instrumentation-grape.gemspec index 11bcc70149..1d59fb9a63 100644 --- a/instrumentation/grape/opentelemetry-instrumentation-grape.gemspec +++ b/instrumentation/grape/opentelemetry-instrumentation-grape.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-rack', '~> 0.21' spec.add_development_dependency 'activesupport' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'grape', '~> 1.2' spec.add_development_dependency 'minitest', '~> 5.0' @@ -39,11 +39,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rack-test' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/graphql/CHANGELOG.md b/instrumentation/graphql/CHANGELOG.md index b184ab6908..1fb6b31a0f 100644 --- a/instrumentation/graphql/CHANGELOG.md +++ b/instrumentation/graphql/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-graphql +### v0.26.7 / 2023-09-27 + +* FIXED: Micro optimization: build Hash w/ {} (https://github.com/open-telemetry/opentelemetry-ruby-contrib/pull/665) + ### v0.26.6 / 2023-08-26 * FIXED: Improve GraphQL tracing compatibility with other tracers diff --git a/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb b/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb index 3f470685d1..881aa10ecc 100644 --- a/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb +++ b/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb @@ -75,10 +75,11 @@ def execute_field(field:, query:, ast_node:, arguments:, object:, &block) platform_key = _otel_execute_field_key(field: field) return super unless platform_key - attributes = {} - attributes['graphql.field.parent'] = field.owner&.graphql_name - attributes['graphql.field.name'] = field.graphql_name - attributes['graphql.lazy'] = false + attributes = { + 'graphql.field.parent' => field.owner&.graphql_name, + 'graphql.field.name' => field.graphql_name, + 'graphql.lazy' => false + } tracer.in_span(platform_key, attributes: attributes, &block) end @@ -87,10 +88,11 @@ def execute_field_lazy(field:, query:, ast_node:, arguments:, object:, &block) platform_key = _otel_execute_field_key(field: field) return super unless platform_key - attributes = {} - attributes['graphql.field.parent'] = field.owner&.graphql_name - attributes['graphql.field.name'] = field.graphql_name - attributes['graphql.lazy'] = true + attributes = { + 'graphql.field.parent' => field.owner&.graphql_name, + 'graphql.field.name' => field.graphql_name, + 'graphql.lazy' => true + } tracer.in_span(platform_key, attributes: attributes, &block) end @@ -99,9 +101,10 @@ def authorized(query:, type:, object:, &block) platform_key = @_otel_authorized_key_cache[type] return super unless platform_key - attributes = {} - attributes['graphql.type.name'] = type.graphql_name - attributes['graphql.lazy'] = false + attributes = { + 'graphql.type.name' => type.graphql_name, + 'graphql.lazy' => false + } tracer.in_span(platform_key, attributes: attributes, &block) end @@ -110,9 +113,10 @@ def authorized_lazy(query:, type:, object:, &block) platform_key = @_otel_authorized_key_cache[type] return super unless platform_key - attributes = {} - attributes['graphql.type.name'] = type.graphql_name - attributes['graphql.lazy'] = true + attributes = { + 'graphql.type.name' => type.graphql_name, + 'graphql.lazy' => true + } tracer.in_span(platform_key, attributes: attributes, &block) end @@ -120,9 +124,10 @@ def authorized_lazy(query:, type:, object:, &block) def resolve_type(query:, type:, object:, &block) platform_key = @_otel_resolve_type_key_cache[type] - attributes = {} - attributes['graphql.type.name'] = type.graphql_name - attributes['graphql.lazy'] = false + attributes = { + 'graphql.type.name' => type.graphql_name, + 'graphql.lazy' => false + } tracer.in_span(platform_key, attributes: attributes, &block) end @@ -130,9 +135,10 @@ def resolve_type(query:, type:, object:, &block) def resolve_type_lazy(query:, type:, object:, &block) platform_key = @_otel_resolve_type_key_cache[type] - attributes = {} - attributes['graphql.type.name'] = type.graphql_name - attributes['graphql.lazy'] = true + attributes = { + 'graphql.type.name' => type.graphql_name, + 'graphql.lazy' => true + } tracer.in_span(platform_key, attributes: attributes, &block) end diff --git a/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/version.rb b/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/version.rb index ba51dd6b31..aca6963d2a 100644 --- a/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/version.rb +++ b/instrumentation/graphql/lib/opentelemetry/instrumentation/graphql/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module GraphQL - VERSION = '0.26.6' + VERSION = '0.26.7' end end end diff --git a/instrumentation/graphql/opentelemetry-instrumentation-graphql.gemspec b/instrumentation/graphql/opentelemetry-instrumentation-graphql.gemspec index 5a9e409f1f..c5a8678c3b 100644 --- a/instrumentation/graphql/opentelemetry-instrumentation-graphql.gemspec +++ b/instrumentation/graphql/opentelemetry-instrumentation-graphql.gemspec @@ -28,18 +28,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'graphql', '>= 1.9.0', '< 3.0.0' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb index d1c28022f7..ffb69973ff 100644 --- a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb +++ b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb @@ -10,7 +10,7 @@ module Gruf module Interceptors class Client < ::Gruf::Interceptors::ClientInterceptor def call(request_context:) - return yield if instrumentation_config.blank? + return yield if instrumentation_config.empty? service = request_context.method.split('/')[1] method = request_context.method_name diff --git a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb index 5609d9c637..fec68f357d 100644 --- a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb +++ b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb @@ -10,7 +10,7 @@ module Gruf module Interceptors class Server < ::Gruf::Interceptors::ServerInterceptor def call - return yield if instrumentation_config.blank? + return yield if instrumentation_config.empty? method = request.method_name diff --git a/instrumentation/gruf/opentelemetry-instrumentation-gruf.gemspec b/instrumentation/gruf/opentelemetry-instrumentation-gruf.gemspec index 2a6e9e69f3..4a7a0b550a 100644 --- a/instrumentation/gruf/opentelemetry-instrumentation-gruf.gemspec +++ b/instrumentation/gruf/opentelemetry-instrumentation-gruf.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '>= 1.0.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '>= 1.17' spec.add_development_dependency 'grpc_mock' spec.add_development_dependency 'gruf', '>= 2.15.1' @@ -36,11 +36,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'opentelemetry-sdk', '~> 1.0' spec.add_development_dependency 'opentelemetry-test-helpers' spec.add_development_dependency 'rake', '~> 12.3.3' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-gruf/v#{OpenTelemetry::Instrumentation::Gruf::VERSION}/file.CHANGELOG.html" diff --git a/instrumentation/http/opentelemetry-instrumentation-http.gemspec b/instrumentation/http/opentelemetry-instrumentation-http.gemspec index d4f34e7728..c8cd137b4e 100644 --- a/instrumentation/http/opentelemetry-instrumentation-http.gemspec +++ b/instrumentation/http/opentelemetry-instrumentation-http.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'http' spec.add_development_dependency 'minitest', '~> 5.0' @@ -36,11 +36,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/http_client/opentelemetry-instrumentation-http_client.gemspec b/instrumentation/http_client/opentelemetry-instrumentation-http_client.gemspec index 5771500c59..6bd4328fe6 100644 --- a/instrumentation/http_client/opentelemetry-instrumentation-http_client.gemspec +++ b/instrumentation/http_client/opentelemetry-instrumentation-http_client.gemspec @@ -29,18 +29,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'httpclient' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/koala/opentelemetry-instrumentation-koala.gemspec b/instrumentation/koala/opentelemetry-instrumentation-koala.gemspec index a9aaed7d31..578fd1e1ca 100644 --- a/instrumentation/koala/opentelemetry-instrumentation-koala.gemspec +++ b/instrumentation/koala/opentelemetry-instrumentation-koala.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'koala', '~> 3.0.0' spec.add_development_dependency 'minitest', '~> 5.0' @@ -37,11 +37,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/lmdb/opentelemetry-instrumentation-lmdb.gemspec b/instrumentation/lmdb/opentelemetry-instrumentation-lmdb.gemspec index f8e7743aac..f5c24419d8 100644 --- a/instrumentation/lmdb/opentelemetry-instrumentation-lmdb.gemspec +++ b/instrumentation/lmdb/opentelemetry-instrumentation-lmdb.gemspec @@ -28,18 +28,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'lmdb' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/mongo/opentelemetry-instrumentation-mongo.gemspec b/instrumentation/mongo/opentelemetry-instrumentation-mongo.gemspec index 16b06c4285..38fa563e11 100644 --- a/instrumentation/mongo/opentelemetry-instrumentation-mongo.gemspec +++ b/instrumentation/mongo/opentelemetry-instrumentation-mongo.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'mongo', '~> 2.5' @@ -37,11 +37,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pry' spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/mysql2/opentelemetry-instrumentation-mysql2.gemspec b/instrumentation/mysql2/opentelemetry-instrumentation-mysql2.gemspec index 021510257a..e4cdc1c55d 100644 --- a/instrumentation/mysql2/opentelemetry-instrumentation-mysql2.gemspec +++ b/instrumentation/mysql2/opentelemetry-instrumentation-mysql2.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'mysql2', '>= 0.4.0' @@ -36,10 +36,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'pry' spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/net_http/opentelemetry-instrumentation-net_http.gemspec b/instrumentation/net_http/opentelemetry-instrumentation-net_http.gemspec index b078e0117c..d61af1b886 100644 --- a/instrumentation/net_http/opentelemetry-instrumentation-net_http.gemspec +++ b/instrumentation/net_http/opentelemetry-instrumentation-net_http.gemspec @@ -34,11 +34,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0.1' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.11.0' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/pg/lib/opentelemetry/instrumentation/pg/patches/connection.rb b/instrumentation/pg/lib/opentelemetry/instrumentation/pg/patches/connection.rb index 2586ad61c6..75f000f140 100644 --- a/instrumentation/pg/lib/opentelemetry/instrumentation/pg/patches/connection.rb +++ b/instrumentation/pg/lib/opentelemetry/instrumentation/pg/patches/connection.rb @@ -162,7 +162,7 @@ def transport_addr # string when there is only one. Some older versions of libpq allow # multiple without any way to discern which is presently connected. addr = conninfo_hash[:hostaddr] - return addr unless addr&.include?(',') + addr unless addr&.include?(',') end def transport_attrs @@ -190,7 +190,7 @@ def transport_port # As a fallback, we can use the port of the parsed connection # string when there is exactly one. p = conninfo_hash[:port] - return p.to_i unless p.nil? || p.empty? || p.include?(',') + p.to_i unless p.nil? || p.empty? || p.include?(',') end end end diff --git a/instrumentation/pg/opentelemetry-instrumentation-pg.gemspec b/instrumentation/pg/opentelemetry-instrumentation-pg.gemspec index 47ddd6ee0d..2c77b66293 100644 --- a/instrumentation/pg/opentelemetry-instrumentation-pg.gemspec +++ b/instrumentation/pg/opentelemetry-instrumentation-pg.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activerecord' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' @@ -37,10 +37,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pg', '>= 1.1.0' spec.add_development_dependency 'pry' spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/que/CHANGELOG.md b/instrumentation/que/CHANGELOG.md index 7a878d4636..91c8a240cf 100644 --- a/instrumentation/que/CHANGELOG.md +++ b/instrumentation/que/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-que +### v0.7.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.6.2 / 2023-08-07 * FIXED: Correctly set bulk_enqueue job options diff --git a/instrumentation/que/lib/opentelemetry/instrumentation/que/patches/que_job.rb b/instrumentation/que/lib/opentelemetry/instrumentation/que/patches/que_job.rb index 7e89e9f89a..5be8989849 100644 --- a/instrumentation/que/lib/opentelemetry/instrumentation/que/patches/que_job.rb +++ b/instrumentation/que/lib/opentelemetry/instrumentation/que/patches/que_job.rb @@ -22,7 +22,7 @@ def enqueue(*args, job_options: {}, **arg_opts) tracer = Que::Instrumentation.instance.tracer otel_config = Que::Instrumentation.instance.config - tracer.in_span('send', kind: :producer) do |span| + tracer.in_span('publish', kind: :producer) do |span| # Que doesn't have a good place to store metadata. There are # basically two options: the job payload and the job tags. # @@ -57,7 +57,7 @@ def enqueue(*args, job_options: {}, **arg_opts) job_attrs = job.que_attrs end - span.name = "#{job_attrs[:job_class]} send" + span.name = "#{job_attrs[:job_class]} publish" span.add_attributes(QueJob.job_attributes(job_attrs)) job @@ -73,7 +73,7 @@ def self.job_attributes(job_attrs) attributes = { 'messaging.system' => 'que', 'messaging.destination_kind' => 'queue', - 'messaging.operation' => 'send', + 'messaging.operation' => 'publish', 'messaging.destination' => job_attrs[:queue] || 'default', 'messaging.que.job_class' => job_attrs[:job_class], 'messaging.que.priority' => job_attrs[:priority] || 100 diff --git a/instrumentation/que/lib/opentelemetry/instrumentation/que/version.rb b/instrumentation/que/lib/opentelemetry/instrumentation/que/version.rb index d4fc1e6493..b49a45f064 100644 --- a/instrumentation/que/lib/opentelemetry/instrumentation/que/version.rb +++ b/instrumentation/que/lib/opentelemetry/instrumentation/que/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Que - VERSION = '0.6.2' + VERSION = '0.7.0' end end end diff --git a/instrumentation/que/opentelemetry-instrumentation-que.gemspec b/instrumentation/que/opentelemetry-instrumentation-que.gemspec index aca9cb1971..af99825668 100644 --- a/instrumentation/que/opentelemetry-instrumentation-que.gemspec +++ b/instrumentation/que/opentelemetry-instrumentation-que.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activerecord', '~> 6.0' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-instrumentation-pg', '~> 0.20' @@ -38,10 +38,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pg', '~> 1.1' spec.add_development_dependency 'que', '~> 1.2.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/que/test/opentelemetry/instrumentation/que_test.rb b/instrumentation/que/test/opentelemetry/instrumentation/que_test.rb index 5c4c9bfd4e..9ec9847c1c 100644 --- a/instrumentation/que/test/opentelemetry/instrumentation/que_test.rb +++ b/instrumentation/que/test/opentelemetry/instrumentation/que_test.rb @@ -35,7 +35,7 @@ TestJobAsync.enqueue span = finished_spans.last - _(span.name).must_equal('TestJobAsync send') + _(span.name).must_equal('TestJobAsync publish') end it 'records attributes' do @@ -45,7 +45,7 @@ _(attributes['messaging.system']).must_equal('que') _(attributes['messaging.destination']).must_equal('default') _(attributes['messaging.destination_kind']).must_equal('queue') - _(attributes['messaging.operation']).must_equal('send') + _(attributes['messaging.operation']).must_equal('publish') _(attributes['messaging.message_id']).must_be_instance_of(Integer) _(attributes['messaging.que.job_class']).must_equal('TestJobAsync') _(attributes['messaging.que.priority']).must_equal(100) @@ -117,7 +117,7 @@ TestJobSync.enqueue span1 = finished_spans.last - _(span1.name).must_equal('TestJobSync send') + _(span1.name).must_equal('TestJobSync publish') span2 = finished_spans.first _(span2.name).must_equal('TestJobSync process') @@ -171,14 +171,14 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) _(process_span.total_recorded_links).must_equal(1) - _(process_span.links[0].span_context.trace_id).must_equal(send_span.trace_id) - _(process_span.links[0].span_context.span_id).must_equal(send_span.span_id) + _(process_span.links[0].span_context.trace_id).must_equal(publish_span.trace_id) + _(process_span.links[0].span_context.span_id).must_equal(publish_span.span_id) end end @@ -191,11 +191,11 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).must_equal(process_span.trace_id) - _(process_span.parent_span_id).must_equal(send_span.span_id) + _(publish_span.trace_id).must_equal(process_span.trace_id) + _(process_span.parent_span_id).must_equal(publish_span.span_id) _(process_span.total_recorded_links).must_equal(0) end end @@ -221,11 +221,11 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).wont_equal(process_span.trace_id) - _(send_span.total_recorded_links).must_equal(0) + _(publish_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.total_recorded_links).must_equal(0) _(process_span.total_recorded_links).must_equal(0) end end @@ -281,7 +281,7 @@ def self.run(first, second); end end span = finished_spans.last - _(span.name).must_equal('TestJobAsync send') + _(span.name).must_equal('TestJobAsync publish') end it 'links spans together' do @@ -293,14 +293,14 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) _(process_span.total_recorded_links).must_equal(1) - _(process_span.links[0].span_context.trace_id).must_equal(send_span.trace_id) - _(process_span.links[0].span_context.span_id).must_equal(send_span.span_id) + _(process_span.links[0].span_context.trace_id).must_equal(publish_span.trace_id) + _(process_span.links[0].span_context.span_id).must_equal(publish_span.span_id) end end @@ -376,7 +376,7 @@ def self.run(first, second); end end span1 = finished_spans.first - _(span1.name).must_equal('TestJobSync send') + _(span1.name).must_equal('TestJobSync publish') span2 = finished_spans.last _(span2.name).must_equal('TestJobSync process') @@ -429,14 +429,14 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.trace_id).wont_equal(process_span.trace_id) _(process_span.total_recorded_links).must_equal(1) - _(process_span.links[0].span_context.trace_id).must_equal(send_span.trace_id) - _(process_span.links[0].span_context.span_id).must_equal(send_span.span_id) + _(process_span.links[0].span_context.trace_id).must_equal(publish_span.trace_id) + _(process_span.links[0].span_context.span_id).must_equal(publish_span.span_id) end end @@ -452,11 +452,11 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).must_equal(process_span.trace_id) - _(process_span.parent_span_id).must_equal(send_span.span_id) + _(publish_span.trace_id).must_equal(process_span.trace_id) + _(process_span.parent_span_id).must_equal(publish_span.span_id) _(process_span.total_recorded_links).must_equal(0) end end @@ -482,11 +482,11 @@ def self.run(first, second); end _(finished_spans.size).must_equal(2) - send_span = finished_spans.first + publish_span = finished_spans.first process_span = finished_spans.last - _(send_span.trace_id).wont_equal(process_span.trace_id) - _(send_span.total_recorded_links).must_equal(0) + _(publish_span.trace_id).wont_equal(process_span.trace_id) + _(publish_span.total_recorded_links).must_equal(0) _(process_span.total_recorded_links).must_equal(0) end end diff --git a/instrumentation/racecar/CHANGELOG.md b/instrumentation/racecar/CHANGELOG.md index 636abbd075..cb0cce4a48 100644 --- a/instrumentation/racecar/CHANGELOG.md +++ b/instrumentation/racecar/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-racecar +### v0.3.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.2.1 / 2023-06-05 * FIXED: Base config options diff --git a/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/patches/consumer.rb b/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/patches/consumer.rb index f1d46eae8d..ba711d575b 100644 --- a/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/patches/consumer.rb +++ b/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/patches/consumer.rb @@ -19,7 +19,7 @@ def produce(payload, topic:, key: nil, partition: nil, partition_key: nil, heade headers ||= {} - tracer.in_span("#{topic} send", attributes: attributes, kind: :producer) do + tracer.in_span("#{topic} publish", attributes: attributes, kind: :producer) do OpenTelemetry.propagation.inject(headers) super end diff --git a/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/version.rb b/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/version.rb index 7db6269870..86a2d94b45 100644 --- a/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/version.rb +++ b/instrumentation/racecar/lib/opentelemetry/instrumentation/racecar/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Racecar - VERSION = '0.2.1' + VERSION = '0.3.0' end end end diff --git a/instrumentation/racecar/opentelemetry-instrumentation-racecar.gemspec b/instrumentation/racecar/opentelemetry-instrumentation-racecar.gemspec index d376d8dc5f..cb52a1d099 100644 --- a/instrumentation/racecar/opentelemetry-instrumentation-racecar.gemspec +++ b/instrumentation/racecar/opentelemetry-instrumentation-racecar.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activesupport' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.0' @@ -37,11 +37,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'racecar', '~> 2.7' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/racecar/test/opentelemetry/instrumentation/racecar_test.rb b/instrumentation/racecar/test/opentelemetry/instrumentation/racecar_test.rb index 66b63d5ed1..44be8030b3 100644 --- a/instrumentation/racecar/test/opentelemetry/instrumentation/racecar_test.rb +++ b/instrumentation/racecar/test/opentelemetry/instrumentation/racecar_test.rb @@ -40,7 +40,7 @@ def produce(messages) producer.delivery_callback = ->(_) {} producer_messages.map do |msg| - tracer.in_span("#{msg[:topic]} send", kind: :producer) do + tracer.in_span("#{msg[:topic]} publish", kind: :producer) do msg[:headers] ||= {} OpenTelemetry.propagation.inject(msg[:headers]) producer.produce(**msg) @@ -120,9 +120,9 @@ def stop_racecar(thread) it 'traces each message and traces publishing' do process_spans = spans.select { |s| s.name == "#{topic_name} process" } - racecar_send_spans = spans.select { |s| s.name == "ack-#{topic_name} send" } + racecar_publish_spans = spans.select { |s| s.name == "ack-#{topic_name} publish" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.name).must_equal("#{topic_name} process") _(first_process_span.kind).must_equal(:consumer) @@ -132,20 +132,20 @@ def stop_racecar(thread) first_process_span_link = first_process_span.links[0] linked_span_context = first_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic_name} send") - _(linked_send_span.trace_id).must_equal(first_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic_name} publish") + _(linked_publish_span.trace_id).must_equal(first_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) # first racecar ack span - first_send_span = racecar_send_spans[0] - _(first_send_span.name).must_equal("ack-#{topic_name} send") - _(first_send_span.kind).must_equal(:producer) - _(first_send_span.instrumentation_library.name).must_equal('OpenTelemetry::Instrumentation::Racecar') - _(first_send_span.parent_span_id).must_equal(first_process_span.span_id) - _(first_send_span.trace_id).must_equal(first_process_span.trace_id) - - # Second pair of send and process spans + first_publish_span = racecar_publish_spans[0] + _(first_publish_span.name).must_equal("ack-#{topic_name} publish") + _(first_publish_span.kind).must_equal(:producer) + _(first_publish_span.instrumentation_library.name).must_equal('OpenTelemetry::Instrumentation::Racecar') + _(first_publish_span.parent_span_id).must_equal(first_process_span.span_id) + _(first_publish_span.trace_id).must_equal(first_process_span.trace_id) + + # Second pair of publish and process spans second_process_span = process_spans[1] _(second_process_span.name).must_equal("#{topic_name} process") _(second_process_span.kind).must_equal(:consumer) @@ -153,18 +153,18 @@ def stop_racecar(thread) second_process_span_link = second_process_span.links[0] linked_span_context = second_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic_name} send") - _(linked_send_span.trace_id).must_equal(second_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic_name} publish") + _(linked_publish_span.trace_id).must_equal(second_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) # second racecar ack span - second_send_span = racecar_send_spans[1] - _(second_send_span.name).must_equal("ack-#{topic_name} send") - _(second_send_span.kind).must_equal(:producer) - _(second_send_span.instrumentation_library.name).must_equal('OpenTelemetry::Instrumentation::Racecar') - _(second_send_span.parent_span_id).must_equal(second_process_span.span_id) - _(second_send_span.trace_id).must_equal(second_process_span.trace_id) + second_publish_span = racecar_publish_spans[1] + _(second_publish_span.name).must_equal("ack-#{topic_name} publish") + _(second_publish_span.kind).must_equal(:producer) + _(second_publish_span.instrumentation_library.name).must_equal('OpenTelemetry::Instrumentation::Racecar') + _(second_publish_span.parent_span_id).must_equal(second_process_span.span_id) + _(second_publish_span.trace_id).must_equal(second_process_span.trace_id) end describe 'when message keys are encoded differently' do @@ -212,7 +212,7 @@ def stop_racecar(thread) it 'can consume and publish a message' do process_spans = spans.select { |s| s.name == "#{topic_name} process" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.name).must_equal("#{topic_name} process") _(first_process_span.kind).must_equal(:consumer) @@ -222,10 +222,10 @@ def stop_racecar(thread) first_process_span_link = first_process_span.links[0] linked_span_context = first_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic_name} send") - _(linked_send_span.trace_id).must_equal(first_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic_name} publish") + _(linked_publish_span.trace_id).must_equal(first_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) event = first_process_span.events.first _(event.name).must_equal('exception') diff --git a/instrumentation/rack/opentelemetry-instrumentation-rack.gemspec b/instrumentation/rack/opentelemetry-instrumentation-rack.gemspec index 8873a9a07f..35d20b5591 100644 --- a/instrumentation/rack/opentelemetry-instrumentation-rack.gemspec +++ b/instrumentation/rack/opentelemetry-instrumentation-rack.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' @@ -39,11 +39,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rack-test' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/rails/CHANGELOG.md b/instrumentation/rails/CHANGELOG.md index 8483d9a8d4..2ff2b00e9f 100644 --- a/instrumentation/rails/CHANGELOG.md +++ b/instrumentation/rails/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-rails +### v0.28.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.27.1 / 2023-06-05 * FIXED: Use latest bug fix version for all dependencies diff --git a/instrumentation/rails/lib/opentelemetry/instrumentation/rails/version.rb b/instrumentation/rails/lib/opentelemetry/instrumentation/rails/version.rb index 314fdc88b8..f5d46002f2 100644 --- a/instrumentation/rails/lib/opentelemetry/instrumentation/rails/version.rb +++ b/instrumentation/rails/lib/opentelemetry/instrumentation/rails/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Rails - VERSION = '0.27.1' + VERSION = '0.28.0' end end end diff --git a/instrumentation/rails/opentelemetry-instrumentation-rails.gemspec b/instrumentation/rails/opentelemetry-instrumentation-rails.gemspec index 10eb7da44e..c49f43e706 100644 --- a/instrumentation/rails/opentelemetry-instrumentation-rails.gemspec +++ b/instrumentation/rails/opentelemetry-instrumentation-rails.gemspec @@ -28,12 +28,12 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-action_pack', '~> 0.7.0' spec.add_dependency 'opentelemetry-instrumentation-action_view', '~> 0.6.0' - spec.add_dependency 'opentelemetry-instrumentation-active_job', '~> 0.5.1' + spec.add_dependency 'opentelemetry-instrumentation-active_job', '~> 0.6.0' spec.add_dependency 'opentelemetry-instrumentation-active_record', '~> 0.6.1' spec.add_dependency 'opentelemetry-instrumentation-active_support', '~> 0.4.1' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.4.1' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' @@ -41,11 +41,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rack-test', '~> 2.1.0' spec.add_development_dependency 'rails', '>= 6' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.22.0' - spec.add_development_dependency 'webmock', '~> 3.18.1' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' spec.metadata['source_code_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/rails' if spec.respond_to?(:metadata) end diff --git a/instrumentation/rake/opentelemetry-instrumentation-rake.gemspec b/instrumentation/rake/opentelemetry-instrumentation-rake.gemspec index e5f5158e90..0862445909 100644 --- a/instrumentation/rake/opentelemetry-instrumentation-rake.gemspec +++ b/instrumentation/rake/opentelemetry-instrumentation-rake.gemspec @@ -28,17 +28,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.0' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '>= 0.9.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/rdkafka/CHANGELOG.md b/instrumentation/rdkafka/CHANGELOG.md index 805c5ebb6f..4b66d4fd66 100644 --- a/instrumentation/rdkafka/CHANGELOG.md +++ b/instrumentation/rdkafka/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-rdkafka +### v0.4.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.3.2 / 2023-07-21 * ADDED: Update `opentelemetry-common` from [0.19.3 to 0.20.0](https://github.com/open-telemetry/opentelemetry-ruby-contrib/pull/537) diff --git a/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/patches/producer.rb b/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/patches/producer.rb index 7b234b70e9..3515f9ca56 100644 --- a/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/patches/producer.rb +++ b/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/patches/producer.rb @@ -19,7 +19,7 @@ def produce(topic:, payload: nil, key: nil, partition: nil, partition_key: nil, headers ||= {} - tracer.in_span("#{topic} send", attributes: attributes, kind: :producer) do + tracer.in_span("#{topic} publish", attributes: attributes, kind: :producer) do OpenTelemetry.propagation.inject(headers) super end diff --git a/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/version.rb b/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/version.rb index 17df4b6b41..150141cece 100644 --- a/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/version.rb +++ b/instrumentation/rdkafka/lib/opentelemetry/instrumentation/rdkafka/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Rdkafka - VERSION = '0.3.2' + VERSION = '0.4.0' end end end diff --git a/instrumentation/rdkafka/opentelemetry-instrumentation-rdkafka.gemspec b/instrumentation/rdkafka/opentelemetry-instrumentation-rdkafka.gemspec index 40587b827f..9dbd122db9 100644 --- a/instrumentation/rdkafka/opentelemetry-instrumentation-rdkafka.gemspec +++ b/instrumentation/rdkafka/opentelemetry-instrumentation-rdkafka.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk' @@ -37,11 +37,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rdkafka', '>= 0.12' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/consumer_test.rb b/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/consumer_test.rb index 3ddcaf2f91..bfd2f9da73 100644 --- a/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/consumer_test.rb +++ b/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/consumer_test.rb @@ -72,7 +72,7 @@ process_spans = spans.select { |s| s.name == "#{topic_name} process" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.name).must_equal("#{topic_name} process") _(first_process_span.kind).must_equal(:consumer) @@ -82,12 +82,12 @@ first_process_span_link = first_process_span.links[0] linked_span_context = first_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic_name} send") - _(linked_send_span.trace_id).must_equal(first_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic_name} publish") + _(linked_publish_span.trace_id).must_equal(first_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) - # Second pair of send and process spans + # Second pair of publish and process spans second_process_span = process_spans[1] _(second_process_span.name).must_equal("#{topic_name} process") _(second_process_span.kind).must_equal(:consumer) @@ -95,10 +95,10 @@ second_process_span_link = second_process_span.links[0] linked_span_context = second_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic_name} send") - _(linked_send_span.trace_id).must_equal(second_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic_name} publish") + _(linked_publish_span.trace_id).must_equal(second_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) event = second_process_span.events.first _(event.name).must_equal('exception') @@ -148,7 +148,7 @@ _(spans.size).must_equal(4) process_spans = spans.select { |s| s.name == "#{topic_name} process" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.attributes).wont_include('messaging.kafka.message_key') diff --git a/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/producer_test.rb b/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/producer_test.rb index 983d8b1576..06e40de584 100644 --- a/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/producer_test.rb +++ b/instrumentation/rdkafka/test/opentelemetry/instrumentation/rdkafka/patches/producer_test.rb @@ -48,7 +48,7 @@ delivery_handles.each(&:wait) - _(spans.first.name).must_equal("#{topic_name} send") + _(spans.first.name).must_equal("#{topic_name} publish") _(spans.first.kind).must_equal(:producer) _(spans.first.attributes['messaging.system']).must_equal('kafka') diff --git a/instrumentation/redis/opentelemetry-instrumentation-redis.gemspec b/instrumentation/redis/opentelemetry-instrumentation-redis.gemspec index f1f02ad102..3b8b392980 100644 --- a/instrumentation/redis/opentelemetry-instrumentation-redis.gemspec +++ b/instrumentation/redis/opentelemetry-instrumentation-redis.gemspec @@ -29,17 +29,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'redis', '~> 4.1.0' spec.add_development_dependency 'redis-client', '~> 0.7' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/resque/CHANGELOG.md b/instrumentation/resque/CHANGELOG.md index b59f27ddd9..5225be2c0d 100644 --- a/instrumentation/resque/CHANGELOG.md +++ b/instrumentation/resque/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-resque +### v0.5.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.4.2 / 2023-08-03 * FIXED: Remove inline linter rules diff --git a/instrumentation/resque/lib/opentelemetry/instrumentation/resque/patches/resque_module.rb b/instrumentation/resque/lib/opentelemetry/instrumentation/resque/patches/resque_module.rb index 98d6de0337..bde8b8737e 100644 --- a/instrumentation/resque/lib/opentelemetry/instrumentation/resque/patches/resque_module.rb +++ b/instrumentation/resque/lib/opentelemetry/instrumentation/resque/patches/resque_module.rb @@ -35,8 +35,8 @@ def push(queue, item) } span_name = case config[:span_naming] - when :job_class then "#{job_class} send" - else "#{queue} send" + when :job_class then "#{job_class} publish" + else "#{queue} publish" end tracer.in_span(span_name, attributes: attributes, kind: :producer) do diff --git a/instrumentation/resque/lib/opentelemetry/instrumentation/resque/version.rb b/instrumentation/resque/lib/opentelemetry/instrumentation/resque/version.rb index 9327a3bd4c..284cf059f5 100644 --- a/instrumentation/resque/lib/opentelemetry/instrumentation/resque/version.rb +++ b/instrumentation/resque/lib/opentelemetry/instrumentation/resque/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Resque - VERSION = '0.4.2' + VERSION = '0.5.0' end end end diff --git a/instrumentation/resque/opentelemetry-instrumentation-resque.gemspec b/instrumentation/resque/opentelemetry-instrumentation-resque.gemspec index a6454ecddc..6294c54537 100644 --- a/instrumentation/resque/opentelemetry-instrumentation-resque.gemspec +++ b/instrumentation/resque/opentelemetry-instrumentation-resque.gemspec @@ -28,18 +28,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'resque' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/resque/test/opentelemetry/instrumentation/resque/patches/resque_test.rb b/instrumentation/resque/test/opentelemetry/instrumentation/resque/patches/resque_test.rb index 951add09bd..1b8f7ee1af 100644 --- a/instrumentation/resque/test/opentelemetry/instrumentation/resque/patches/resque_test.rb +++ b/instrumentation/resque/test/opentelemetry/instrumentation/resque/patches/resque_test.rb @@ -26,7 +26,7 @@ it 'traces' do Resque.enqueue(DummyJob) - _(enqueue_span.name).must_equal('super_urgent send') + _(enqueue_span.name).must_equal('super_urgent publish') _(enqueue_span.attributes['messaging.system']).must_equal('resque') _(enqueue_span.attributes['messaging.resque.job_class']).must_equal('DummyJob') _(enqueue_span.attributes['messaging.destination']).must_equal('super_urgent') @@ -35,7 +35,7 @@ it 'traces when enqueued with Active Job' do DummyJobWithActiveJob.perform_later(1, 2) - _(enqueue_span.name).must_equal('super_urgent send') + _(enqueue_span.name).must_equal('super_urgent publish') _(enqueue_span.attributes['messaging.system']).must_equal('resque') _(enqueue_span.attributes['messaging.resque.job_class']).must_equal('DummyJobWithActiveJob') _(enqueue_span.attributes['messaging.destination']).must_equal('super_urgent') @@ -48,12 +48,12 @@ it 'uses the job class name for the span name' do Resque.enqueue(DummyJob) - _(enqueue_span.name).must_equal('DummyJob send') + _(enqueue_span.name).must_equal('DummyJob publish') end it 'uses the job class name when enqueued with Active Job' do DummyJobWithActiveJob.perform_later(1, 2) - _(enqueue_span.name).must_equal('DummyJobWithActiveJob send') + _(enqueue_span.name).must_equal('DummyJobWithActiveJob publish') end end end diff --git a/instrumentation/restclient/opentelemetry-instrumentation-restclient.gemspec b/instrumentation/restclient/opentelemetry-instrumentation-restclient.gemspec index 9de7271401..42aaaa0fe0 100644 --- a/instrumentation/restclient/opentelemetry-instrumentation-restclient.gemspec +++ b/instrumentation/restclient/opentelemetry-instrumentation-restclient.gemspec @@ -29,17 +29,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-common', '~> 0.20.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rest-client', '~> 2.1.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/rspec/opentelemetry-instrumentation-rspec.gemspec b/instrumentation/rspec/opentelemetry-instrumentation-rspec.gemspec index 04c8c15b34..976bd7c106 100644 --- a/instrumentation/rspec/opentelemetry-instrumentation-rspec.gemspec +++ b/instrumentation/rspec/opentelemetry-instrumentation-rspec.gemspec @@ -28,18 +28,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec', '~> 3.10.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/ruby_kafka/CHANGELOG.md b/instrumentation/ruby_kafka/CHANGELOG.md index 3308f99c6b..cad2b514d9 100644 --- a/instrumentation/ruby_kafka/CHANGELOG.md +++ b/instrumentation/ruby_kafka/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-ruby_kafka +### v0.21.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.20.2 / 2023-08-09 * FIXED: propagate context from async producer diff --git a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/client.rb b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/client.rb index 09996bd76f..1e5a5d4da3 100644 --- a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/client.rb +++ b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/client.rb @@ -24,7 +24,7 @@ def deliver_message(value, topic:, key: nil, headers: {}, partition: nil, partit attributes['messaging.kafka.partition'] = partition if partition - tracer.in_span("#{topic} send", attributes: attributes, kind: :producer) do + tracer.in_span("#{topic} publish", attributes: attributes, kind: :producer) do OpenTelemetry.propagation.inject(headers) super end diff --git a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/producer.rb b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/producer.rb index 5b19485466..8d7880be0b 100644 --- a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/producer.rb +++ b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/patches/producer.rb @@ -22,7 +22,7 @@ def produce(value, topic:, key: nil, headers: {}, partition: nil, partition_key: # Thread's context, so the next two lines preserve the correct Thread-local context. ctx = OpenTelemetry.propagation.extract(headers) OpenTelemetry::Context.with_current(ctx) do - tracer.in_span("#{topic} send", attributes: attributes, kind: :producer) do + tracer.in_span("#{topic} publish", attributes: attributes, kind: :producer) do OpenTelemetry.propagation.inject(headers) super end diff --git a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/version.rb b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/version.rb index 3d75d39e06..ec39acf713 100644 --- a/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/version.rb +++ b/instrumentation/ruby_kafka/lib/opentelemetry/instrumentation/ruby_kafka/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module RubyKafka - VERSION = '0.20.2' + VERSION = '0.21.0' end end end diff --git a/instrumentation/ruby_kafka/opentelemetry-instrumentation-ruby_kafka.gemspec b/instrumentation/ruby_kafka/opentelemetry-instrumentation-ruby_kafka.gemspec index 6a1b40717b..740399830d 100644 --- a/instrumentation/ruby_kafka/opentelemetry-instrumentation-ruby_kafka.gemspec +++ b/instrumentation/ruby_kafka/opentelemetry-instrumentation-ruby_kafka.gemspec @@ -28,17 +28,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-api', '~> 1.0' spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'ruby-kafka' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/client_test.rb b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/client_test.rb index b6b97982ea..a5c6a3e80b 100644 --- a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/client_test.rb +++ b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/client_test.rb @@ -40,7 +40,7 @@ kafka.each_message(topic: topic) { |_msg| break } # rubocop:disable Lint/UnreachableLoop _(spans.size).must_equal(2) - _(spans[0].name).must_equal("#{topic} send") + _(spans[0].name).must_equal("#{topic} publish") _(spans[0].kind).must_equal(:producer) _(spans[1].name).must_equal("#{topic} process") @@ -57,9 +57,9 @@ break if counter >= 2 end - send_spans = spans.select { |s| s.name == "#{topic} send" } - _(send_spans[0].attributes).wont_include('messaging.kafka.message_key') - _(send_spans[1].attributes['messaging.kafka.message_key']).must_equal('foobarbaz') + publish_spans = spans.select { |s| s.name == "#{topic} publish" } + _(publish_spans[0].attributes).wont_include('messaging.kafka.message_key') + _(publish_spans[1].attributes['messaging.kafka.message_key']).must_equal('foobarbaz') process_spans = spans.select { |s| s.name == "#{topic} process" } _(process_spans[0].attributes).wont_include('messaging.kafka.message_key') diff --git a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/consumer_test.rb b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/consumer_test.rb index 5c9937a267..2a175612b7 100644 --- a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/consumer_test.rb +++ b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/consumer_test.rb @@ -58,7 +58,7 @@ process_spans = spans.select { |s| s.name == "#{topic} process" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.name).must_equal("#{topic} process") _(first_process_span.kind).must_equal(:consumer) @@ -68,12 +68,12 @@ first_process_span_link = first_process_span.links[0] linked_span_context = first_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic} send") - _(linked_send_span.trace_id).must_equal(first_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic} publish") + _(linked_publish_span.trace_id).must_equal(first_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) - # Second pair of send and process spans + # Second pair of publish and process spans second_process_span = process_spans[1] _(second_process_span.name).must_equal("#{topic} process") _(second_process_span.kind).must_equal(:consumer) @@ -81,10 +81,10 @@ second_process_span_link = second_process_span.links[0] linked_span_context = second_process_span_link.span_context - linked_send_span = spans.find { |s| s.span_id == linked_span_context.span_id } - _(linked_send_span.name).must_equal("#{topic} send") - _(linked_send_span.trace_id).must_equal(second_process_span.trace_id) - _(linked_send_span.trace_id).must_equal(linked_span_context.trace_id) + linked_publish_span = spans.find { |s| s.span_id == linked_span_context.span_id } + _(linked_publish_span.name).must_equal("#{topic} publish") + _(linked_publish_span.trace_id).must_equal(second_process_span.trace_id) + _(linked_publish_span.trace_id).must_equal(linked_span_context.trace_id) event = second_process_span.events.first _(event.name).must_equal('exception') @@ -106,7 +106,7 @@ process_spans = spans.select { |s| s.name == "#{topic} process" } - # First pair for send and process spans + # First pair for publish and process spans first_process_span = process_spans[0] _(first_process_span.attributes).wont_include('messaging.kafka.message_key') diff --git a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/producer_test.rb b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/producer_test.rb index 15c298437b..8324e1000f 100644 --- a/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/producer_test.rb +++ b/instrumentation/ruby_kafka/test/opentelemetry/instrumentation/ruby-kafka/patches/producer_test.rb @@ -24,8 +24,8 @@ let(:producer) { kafka.producer } let(:consumer) { kafka.consumer(group_id: SecureRandom.uuid, fetcher_max_queue_size: 1) } let(:async_producer) { kafka.async_producer(delivery_threshold: 1000) } - let(:send_span) { EXPORTER.finished_spans.find { |sp| sp.name == "#{topic} send" } } - let(:async_send_span) { EXPORTER.finished_spans.find { |sp| sp.name == "#{async_topic} send" } } + let(:publish_span) { EXPORTER.finished_spans.find { |sp| sp.name == "#{topic} publish" } } + let(:async_publish_span) { EXPORTER.finished_spans.find { |sp| sp.name == "#{async_topic} publish" } } before do kafka.create_topic(topic) @@ -54,7 +54,7 @@ producer.produce('hello', topic: topic) producer.deliver_messages - _(spans.first.name).must_equal("#{topic} send") + _(spans.first.name).must_equal("#{topic} publish") _(spans.first.kind).must_equal(:producer) _(spans.first.attributes['messaging.system']).must_equal('kafka') @@ -68,7 +68,7 @@ # Wait for the async calls to produce spans wait_for(error_message: 'Max wait time exceeded for async producer') { EXPORTER.finished_spans.size.positive? } - _(spans.first.name).must_equal("#{async_topic} send") + _(spans.first.name).must_equal("#{async_topic} publish") _(spans.first.kind).must_equal(:producer) _(spans.first.attributes['messaging.system']).must_equal('kafka') @@ -83,8 +83,8 @@ producer.deliver_messages end - _(send_span.hex_parent_span_id).must_equal(span_id) - _(send_span.hex_trace_id).must_equal(trace_id) + _(publish_span.hex_parent_span_id).must_equal(span_id) + _(publish_span.hex_trace_id).must_equal(trace_id) end it 'propagates context when tracing async produce calls' do @@ -98,8 +98,8 @@ # Wait for the async calls to produce spans wait_for(error_message: 'Max wait time exceeded for async producer') { EXPORTER.finished_spans.size == 2 } - _(async_send_span.trace_id).must_equal(sp.context.trace_id) - _(async_send_span.parent_span_id).must_equal(sp.context.span_id) + _(async_publish_span.trace_id).must_equal(sp.context.trace_id) + _(async_publish_span.parent_span_id).must_equal(sp.context.span_id) end it 'propagates context for nonrecording spans' do @@ -122,7 +122,7 @@ end sp.finish _(EXPORTER.finished_spans.size).must_equal(2) - _(send_span.hex_parent_span_id).must_equal(sp.context.hex_span_id) + _(publish_span.hex_parent_span_id).must_equal(sp.context.hex_span_id) end end end unless ENV['OMIT_SERVICES'] diff --git a/instrumentation/sidekiq/CHANGELOG.md b/instrumentation/sidekiq/CHANGELOG.md index 8109594a4b..8fb267d125 100644 --- a/instrumentation/sidekiq/CHANGELOG.md +++ b/instrumentation/sidekiq/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History: opentelemetry-instrumentation-sidekiq +### v0.25.0 / 2023-09-07 + +* FIXED: Align messaging instrumentation operation names + ### v0.24.4 / 2023-08-07 * FIXED: Allow traces inside jobs while avoiding Redis noise diff --git a/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware.rb b/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware.rb index 02105564bc..039390a8f3 100644 --- a/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware.rb +++ b/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware.rb @@ -25,8 +25,8 @@ def call(_worker_class, job, _queue, _redis_pool) attributes[SemanticConventions::Trace::PEER_SERVICE] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service] span_name = case instrumentation_config[:span_naming] - when :job_class then "#{job['wrapped']&.to_s || job['class']} send" - else "#{job['queue']} send" + when :job_class then "#{job['wrapped']&.to_s || job['class']} publish" + else "#{job['queue']} publish" end tracer.in_span(span_name, attributes: attributes, kind: :producer) do |span| diff --git a/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/version.rb b/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/version.rb index b60032f3e4..bde8730d8f 100644 --- a/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/version.rb +++ b/instrumentation/sidekiq/lib/opentelemetry/instrumentation/sidekiq/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Instrumentation module Sidekiq - VERSION = '0.24.4' + VERSION = '0.25.0' end end end diff --git a/instrumentation/sidekiq/opentelemetry-instrumentation-sidekiq.gemspec b/instrumentation/sidekiq/opentelemetry-instrumentation-sidekiq.gemspec index a17fba324f..009da600c9 100644 --- a/instrumentation/sidekiq/opentelemetry-instrumentation-sidekiq.gemspec +++ b/instrumentation/sidekiq/opentelemetry-instrumentation-sidekiq.gemspec @@ -30,17 +30,16 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_development_dependency 'activejob', '>= 6.0' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'sidekiq', '~> 5.2.0' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware_test.rb b/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware_test.rb index b76c490c4a..a2de3d05d3 100644 --- a/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware_test.rb +++ b/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/client/tracer_middleware_test.rb @@ -35,7 +35,7 @@ _(exporter.finished_spans.size).must_equal 1 - _(enqueue_span.name).must_equal 'default send' + _(enqueue_span.name).must_equal 'default publish' _(enqueue_span.kind).must_equal :producer _(enqueue_span.parent_span_id).must_equal OpenTelemetry::Trace::INVALID_SPAN_ID _(enqueue_span.attributes['messaging.system']).must_equal 'sidekiq' @@ -49,7 +49,7 @@ it 'traces when enqueued with Active Job' do SimpleJobWithActiveJob.perform_later(1, 2) - _(enqueue_span.name).must_equal('default send') + _(enqueue_span.name).must_equal('default publish') _(enqueue_span.attributes['messaging.system']).must_equal('sidekiq') _(enqueue_span.attributes['messaging.sidekiq.job_class']).must_equal('SimpleJobWithActiveJob') _(enqueue_span.attributes['messaging.destination']).must_equal('default') @@ -62,12 +62,12 @@ it 'uses the job class name for the span name' do SimpleJob.perform_async - _(enqueue_span.name).must_equal('SimpleJob send') + _(enqueue_span.name).must_equal('SimpleJob publish') end it 'uses the job class name when enqueued with Active Job' do SimpleJobWithActiveJob.perform_later(1, 2) - _(enqueue_span.name).must_equal('SimpleJobWithActiveJob send') + _(enqueue_span.name).must_equal('SimpleJobWithActiveJob publish') end end diff --git a/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/server/tracer_middleware_test.rb b/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/server/tracer_middleware_test.rb index 716ca83730..145d3b7438 100644 --- a/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/server/tracer_middleware_test.rb +++ b/instrumentation/sidekiq/test/opentelemetry/instrumentation/sidekiq/middlewares/server/tracer_middleware_test.rb @@ -123,7 +123,7 @@ # root job that enqueues another job _(root_span.parent_span_id).must_equal OpenTelemetry::Trace::INVALID_SPAN_ID - _(root_span.name).must_equal 'default send' + _(root_span.name).must_equal 'default publish' _(root_span.kind).must_equal :producer # process span is linked to the root enqueuing job @@ -133,7 +133,7 @@ # enquene span is child to the parent process job child_span2 = spans.find { |s| s.parent_span_id == child_span1.span_id } - _(child_span2.name).must_equal 'default send' + _(child_span2.name).must_equal 'default publish' _(child_span2.kind).must_equal :producer # last process job is linked back to the process job that enqueued it @@ -182,7 +182,7 @@ _(exporter.finished_spans.size).must_equal 4 _(root_span.parent_span_id).must_equal OpenTelemetry::Trace::INVALID_SPAN_ID - _(root_span.name).must_equal 'default send' + _(root_span.name).must_equal 'default publish' _(root_span.kind).must_equal :producer child_span1 = spans.find { |s| s.parent_span_id == root_span.span_id } @@ -190,7 +190,7 @@ _(child_span1.kind).must_equal :consumer child_span2 = spans.find { |s| s.parent_span_id == child_span1.span_id } - _(child_span2.name).must_equal 'default send' + _(child_span2.name).must_equal 'default publish' _(child_span2.kind).must_equal :producer child_span3 = spans.find { |s| s.parent_span_id == child_span2.span_id } diff --git a/instrumentation/sinatra/opentelemetry-instrumentation-sinatra.gemspec b/instrumentation/sinatra/opentelemetry-instrumentation-sinatra.gemspec index 1e9061f533..3bc8627045 100644 --- a/instrumentation/sinatra/opentelemetry-instrumentation-sinatra.gemspec +++ b/instrumentation/sinatra/opentelemetry-instrumentation-sinatra.gemspec @@ -30,18 +30,17 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_dependency 'opentelemetry-instrumentation-rack', '~> 0.21' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' spec.add_development_dependency 'opentelemetry-test-helpers', '~> 0.3' spec.add_development_dependency 'rack-test', '~> 1.1.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'sinatra', '~> 2.0.7' - spec.add_development_dependency 'webmock', '~> 3.7.6' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/instrumentation/trilogy/opentelemetry-instrumentation-trilogy.gemspec b/instrumentation/trilogy/opentelemetry-instrumentation-trilogy.gemspec index 33ab7bb832..d3cad653a5 100644 --- a/instrumentation/trilogy/opentelemetry-instrumentation-trilogy.gemspec +++ b/instrumentation/trilogy/opentelemetry-instrumentation-trilogy.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'opentelemetry-instrumentation-base', '~> 0.22.1' spec.add_dependency 'opentelemetry-semantic_conventions', '>= 1.8.0' - spec.add_development_dependency 'appraisal', '~> 2.2.0' + spec.add_development_dependency 'appraisal', '~> 2.5' spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'opentelemetry-sdk', '~> 1.1' @@ -38,11 +38,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'pry-byebug' unless RUBY_ENGINE == 'jruby' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec-mocks' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17.1' spec.add_development_dependency 'trilogy', '>= 2.0', '< 3.0' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec b/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec index fae5253b04..7e4c36003d 100644 --- a/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec +++ b/propagator/ottrace/opentelemetry-propagator-ottrace.gemspec @@ -28,10 +28,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.22.0' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/propagator/xray/opentelemetry-propagator-xray.gemspec b/propagator/xray/opentelemetry-propagator-xray.gemspec index 708da72582..b5fb7b3300 100644 --- a/propagator/xray/opentelemetry-propagator-xray.gemspec +++ b/propagator/xray/opentelemetry-propagator-xray.gemspec @@ -31,10 +31,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.22.0' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/releases/Gemfile b/releases/Gemfile index 16e0a01282..bfc49848dc 100644 --- a/releases/Gemfile +++ b/releases/Gemfile @@ -51,3 +51,10 @@ Dir['../instrumentation/**/version.rb'].each do |f| version = File.read(f).match(/VERSION = '([\d\.]+)'/)[1] gem "opentelemetry-instrumentation-#{name}", version end + +Dir['../resources/**/version.rb'].each do |f| + name = f.match(%r{resources/(\w+)/lib})[1] + + version = File.read(f).match(/VERSION = '([\d\.]+)'/)[1] + gem "opentelemetry-resource-detector-#{name}", version +end diff --git a/resource_detectors/CHANGELOG.md b/resource_detectors/CHANGELOG.md index 9633e6025a..5d6b2c0e69 100644 --- a/resource_detectors/CHANGELOG.md +++ b/resource_detectors/CHANGELOG.md @@ -1,8 +1,12 @@ # Release History: opentelemetry-resource_detectors -### v0.24.1 / 2023-08-03 +### v0.24.2 / 2023-09-07 -* FIXED: Remove inline linter rules +* CHANGED: split resource_detectors into their own gems + +### v0.24.1 / 2023-08-03 + +* FIXED: Remove inline linter rules ### v0.24.0 / 2023-08-02 diff --git a/resource_detectors/lib/opentelemetry/resource/detectors/azure.rb b/resource_detectors/lib/opentelemetry/resource/detectors/azure.rb index 41397ff5f1..c27ccc0124 100644 --- a/resource_detectors/lib/opentelemetry/resource/detectors/azure.rb +++ b/resource_detectors/lib/opentelemetry/resource/detectors/azure.rb @@ -10,12 +10,20 @@ module OpenTelemetry module Resource module Detectors # Azure contains detect class method for determining Azure environment resource attributes + # + # This gem has been moved into a separate gem: + # opentelemetry-resource-detector-azure + # + # Log a warning if someone still uses this gem for Azure Resource Detection module Azure extend self AZURE_METADATA_URI = 'http://169.254.169.254/metadata/instance/compute?api-version=2019-08-15' def detect + OpenTelemetry.logger.warn('Azure resource detector - The Azure resource detector has been moved to a separate gem. ' \ + 'Please use the "opentelemetry-resource-detector-azure" gem onwards.') + metadata = azure_metadata resource_attributes = {} diff --git a/resource_detectors/lib/opentelemetry/resource/detectors/google_cloud_platform.rb b/resource_detectors/lib/opentelemetry/resource/detectors/google_cloud_platform.rb index 75a0a64b57..17795ebf42 100644 --- a/resource_detectors/lib/opentelemetry/resource/detectors/google_cloud_platform.rb +++ b/resource_detectors/lib/opentelemetry/resource/detectors/google_cloud_platform.rb @@ -10,10 +10,18 @@ module OpenTelemetry module Resource module Detectors # GoogleCloudPlatform contains detect class method for determining gcp environment resource attributes + # + # This gem has been moved into a separate gem: + # opentelemetry-resource-detector-google_cloud_platform + # + # Log a warning if someone still uses this gem for GoogleCloudPlatform Resource Detection module GoogleCloudPlatform extend self def detect + OpenTelemetry.logger.warn('GoogleCloudPlatform resource detector - The GoogleCloudPlatform resource detector has been moved to a separate gem. ' \ + 'Please use the "opentelemetry-resource-detector-google_cloud_platform" gem onwards.') + gcp_env = Google::Cloud::Env.new resource_attributes = {} diff --git a/resource_detectors/lib/opentelemetry/resource/detectors/version.rb b/resource_detectors/lib/opentelemetry/resource/detectors/version.rb index 0fb11c0d81..d500bc0128 100644 --- a/resource_detectors/lib/opentelemetry/resource/detectors/version.rb +++ b/resource_detectors/lib/opentelemetry/resource/detectors/version.rb @@ -7,7 +7,7 @@ module OpenTelemetry module Resource module Detectors - VERSION = '0.24.1' + VERSION = '0.24.2' end end end diff --git a/resource_detectors/opentelemetry-resource_detectors.gemspec b/resource_detectors/opentelemetry-resource_detectors.gemspec index 1cd7cbaccb..0f6eb3693c 100644 --- a/resource_detectors/opentelemetry-resource_detectors.gemspec +++ b/resource_detectors/opentelemetry-resource_detectors.gemspec @@ -31,11 +31,13 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17' - spec.add_development_dependency 'webmock', '~> 3.18.1' + spec.add_development_dependency 'webmock', '~> 3.19' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' + + spec.post_install_message = 'This gem has been deprecated. Please use opentelemetry-resource-detector-azure ' \ + 'or opentelemetry-resource-detector-google_cloud_platform onwards.' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/resources/azure/.rubocop.yml b/resources/azure/.rubocop.yml new file mode 100644 index 0000000000..1248a2f825 --- /dev/null +++ b/resources/azure/.rubocop.yml @@ -0,0 +1 @@ +inherit_from: ../../.rubocop.yml diff --git a/resources/azure/.yardopts b/resources/azure/.yardopts new file mode 100644 index 0000000000..7f834c16bd --- /dev/null +++ b/resources/azure/.yardopts @@ -0,0 +1,9 @@ +--no-private +--title=OpenTelemetry Resource Detector Azure +--markup=markdown +--main=README.md +./lib/opentelemetry/resource/detector/**/*.rb +./lib/opentelemetry/resource/detector.rb +- +README.md +CHANGELOG.md diff --git a/resources/azure/CHANGELOG.md b/resources/azure/CHANGELOG.md new file mode 100644 index 0000000000..b141c98a17 --- /dev/null +++ b/resources/azure/CHANGELOG.md @@ -0,0 +1,5 @@ +# Release History: opentelemetry-resource-detector-azure + +### v0.1.0 / 2023-09-07 + +* Initial release. diff --git a/resources/azure/Gemfile b/resources/azure/Gemfile new file mode 100644 index 0000000000..6ae9e48bcd --- /dev/null +++ b/resources/azure/Gemfile @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +source 'https://rubygems.org' + +gemspec + +group :development, :test do + gem 'byebug' unless RUBY_PLATFORM == 'java' + gem 'pry' +end diff --git a/resources/azure/LICENSE b/resources/azure/LICENSE new file mode 100644 index 0000000000..1ef7dad2c5 --- /dev/null +++ b/resources/azure/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright The OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/resources/azure/README.md b/resources/azure/README.md new file mode 100644 index 0000000000..1784ff070a --- /dev/null +++ b/resources/azure/README.md @@ -0,0 +1,58 @@ +# OpenTelemetry::Resource::Detector::Azure + +The `opentelemetry-resource-detector-azure` gem provides a Azure resource detector for OpenTelemetry. + +## What is OpenTelemetry? + +OpenTelemetry is an open source observability framework, providing a general-purpose API, SDK, and related tools required for the instrumentation of cloud-native software, frameworks, and libraries. + +OpenTelemetry provides a single set of APIs, libraries, agents, and collector services to capture distributed traces and metrics from your application. You can analyze them using Prometheus, Jaeger, and other observability tools. + +## How does this gem fit in? + +The `opentelemetry-resource-detector-azure` gem provides a means of retrieving a resource for supported environments following the resource semantic conventions. + +## How do I get started? + +Install the gem using: + +``` +gem install opentelemetry-sdk +gem install opentelemetry-resource-detector-azure +``` + +Or, if you use Bundler, include `opentelemetry-sdk` and `opentelemetry-resource-detector-azure` in your `Gemfile`. + +```rb +require 'opentelemetry/sdk' +require 'opentelemetry/resource/detector' + +OpenTelemetry::SDK.configure do |c| + c.resource = OpenTelemetry::Resource::Detector::Azure.detect +end +``` + +This will populate the following resource attributes for compute running on Azure: + +* `cloud.provider` +* `cloud.account.id` +* `cloud.platform` +* `cloud.region` +* `cloud.availability_zone` +* `host.id` +* `host.image.id` +* `host.name` +* `host.type` + +## How can I get involved? + +The `opentelemetry-resource-detector-azure` gem source is on GitHub, along with related gems. + +The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us in [GitHub Discussions][discussions-url] or attending our weekly meeting. See the meeting calendar for dates and times. For more information on this and other language SIGs, see the OpenTelemetry community page. + +## License + +The `opentelemetry-resource-detector-azure` gem is distributed under the Apache 2.0 license. See LICENSE for more information. + +[discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/discussions +[k8sattributesprocessor-url]: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/k8sattributesprocessor/README.md \ No newline at end of file diff --git a/resources/azure/Rakefile b/resources/azure/Rakefile new file mode 100644 index 0000000000..1a64ba842e --- /dev/null +++ b/resources/azure/Rakefile @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'bundler/gem_tasks' +require 'rake/testtask' +require 'yard' +require 'rubocop/rake_task' + +RuboCop::RakeTask.new + +Rake::TestTask.new :test do |t| + t.libs << 'test' + t.libs << 'lib' + t.test_files = FileList['test/**/*_test.rb'] +end + +YARD::Rake::YardocTask.new do |t| + t.stats_options = ['--list-undoc'] +end + +if RUBY_ENGINE == 'truffleruby' + task default: %i[test] +else + task default: %i[test rubocop yard] +end diff --git a/resources/azure/lib/opentelemetry-resource-detector-azure.rb b/resources/azure/lib/opentelemetry-resource-detector-azure.rb new file mode 100644 index 0000000000..a740ef21cc --- /dev/null +++ b/resources/azure/lib/opentelemetry-resource-detector-azure.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require_relative 'opentelemetry/resource/detector' diff --git a/resources/azure/lib/opentelemetry/resource/detector.rb b/resources/azure/lib/opentelemetry/resource/detector.rb new file mode 100644 index 0000000000..98c0e367fe --- /dev/null +++ b/resources/azure/lib/opentelemetry/resource/detector.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'opentelemetry/sdk' +require 'opentelemetry/resource/detector/azure' +require 'opentelemetry/resource/detector/azure/version' + +# OpenTelemetry is an open source observability framework, providing a +# general-purpose API, SDK, and related tools required for the instrumentation +# of cloud-native software, frameworks, and libraries. +# +# The OpenTelemetry module provides global accessors for telemetry objects. +# See the documentation for the `opentelemetry-api` gem for details. +module OpenTelemetry + module Resource + # Detector contains the resource detectors + module Detector + end + end +end diff --git a/resources/azure/lib/opentelemetry/resource/detector/azure.rb b/resources/azure/lib/opentelemetry/resource/detector/azure.rb new file mode 100644 index 0000000000..2b7e51a857 --- /dev/null +++ b/resources/azure/lib/opentelemetry/resource/detector/azure.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'net/http' + +module OpenTelemetry + module Resource + module Detector + # Azure contains detect class method for determining Azure environment resource attributes + module Azure + extend self + + AZURE_METADATA_URI = 'http://169.254.169.254/metadata/instance/compute?api-version=2019-08-15' + + def detect + metadata = azure_metadata + resource_attributes = {} + + unless metadata.nil? + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PROVIDER] = 'azure' + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_ACCOUNT_ID] = metadata['subscriptionId'] + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PLATFORM] = cloud_platform(metadata['provider']) + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_REGION] = metadata['location'] + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_AVAILABILITY_ZONE] = metadata['zone'] + + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_ID] = metadata['vmId'] + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_IMAGE_ID] = metadata.dig('storageProfile', 'imageReference', 'id') + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_TYPE] = metadata['vmSize'] + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_NAME] = metadata['name'] + end + + resource_attributes.delete_if { |_key, value| value.nil? || value.empty? } + OpenTelemetry::SDK::Resources::Resource.create(resource_attributes) + end + + private + + def azure_metadata + uri = URI(AZURE_METADATA_URI) + + req = Net::HTTP::Get.new(uri) + req['Metadata'] = 'true' + + response = Net::HTTP.start(uri.hostname, uri.port, open_timeout: 2) do |http| + http.request(req) + end + + return unless response.code == '200' + + JSON.parse(response.body) + rescue Errno::EHOSTDOWN, Net::OpenTimeout, SocketError + nil + end + + def cloud_platform(metadata) + case metadata + when 'Microsoft.Compute' + 'azure_vm' + else + '' + end + end + end + end + end +end diff --git a/resources/azure/lib/opentelemetry/resource/detector/azure/version.rb b/resources/azure/lib/opentelemetry/resource/detector/azure/version.rb new file mode 100644 index 0000000000..3a629249cf --- /dev/null +++ b/resources/azure/lib/opentelemetry/resource/detector/azure/version.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +module OpenTelemetry + module Resource + module Detector + module Azure + VERSION = '0.1.0' + end + end + end +end diff --git a/resources/azure/opentelemetry-resource-detector-azure.gemspec b/resources/azure/opentelemetry-resource-detector-azure.gemspec new file mode 100644 index 0000000000..0c3d097553 --- /dev/null +++ b/resources/azure/opentelemetry-resource-detector-azure.gemspec @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +lib = File.expand_path('lib', __dir__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'opentelemetry/resource/detector/azure/version' + +Gem::Specification.new do |spec| + spec.name = 'opentelemetry-resource-detector-azure' + spec.version = OpenTelemetry::Resource::Detector::Azure::VERSION + spec.authors = ['OpenTelemetry Authors'] + spec.email = ['cncf-opentelemetry-contributors@lists.cncf.io'] + + spec.summary = 'Azure resource detection helpers for OpenTelemetry' + spec.description = 'Azure resource detection helpers for OpenTelemetry' + spec.homepage = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib' + spec.license = 'Apache-2.0' + + spec.files = Dir.glob('lib/**/*.rb') + + Dir.glob('*.md') + + ['LICENSE', '.yardopts'] + spec.require_paths = ['lib'] + spec.required_ruby_version = '>= 2.6.0' + + spec.add_dependency 'opentelemetry-sdk', '~> 1.0' + + spec.add_development_dependency 'bundler', '~> 2.4' + spec.add_development_dependency 'minitest', '~> 5.0' + spec.add_development_dependency 'rake', '~> 13.0' + spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'simplecov', '~> 0.17' + spec.add_development_dependency 'webmock', '~> 3.19.1' + spec.add_development_dependency 'yard', '~> 0.9' + + if spec.respond_to?(:metadata) + spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" + spec.metadata['source_code_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/resources/container' + spec.metadata['bug_tracker_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues' + spec.metadata['documentation_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}" + end +end diff --git a/resources/azure/test/opentelemetry/resource/detector/azure_test.rb b/resources/azure/test/opentelemetry/resource/detector/azure_test.rb new file mode 100644 index 0000000000..a4416b1d4f --- /dev/null +++ b/resources/azure/test/opentelemetry/resource/detector/azure_test.rb @@ -0,0 +1,120 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'test_helper' + +describe OpenTelemetry::Resource::Detector::Azure do + before do + WebMock.disable_net_connect! + stub_request(:get, 'http://169.254.169.254/metadata/instance/compute?api-version=2019-08-15') + .with( + headers: { + 'Accept' => '*/*', + 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', + 'Host' => '169.254.169.254', + 'Metadata' => 'true', + 'User-Agent' => 'Ruby' + } + ).to_raise(SocketError) + end + + after do + WebMock.allow_net_connect! + end + + let(:detector) { OpenTelemetry::Resource::Detector::Azure } + + describe '.detect' do + let(:detected_resource) { detector.detect } + let(:detected_resource_attributes) { detected_resource.attribute_enumerator.to_h } + let(:expected_resource_attributes) { {} } + + describe 'when NOT in an azure environment' do + it 'returns an empty resource' do + _(detected_resource).must_be_instance_of(OpenTelemetry::SDK::Resources::Resource) + _(detected_resource_attributes).must_equal(expected_resource_attributes) + end + end + + describe 'when in an azure VM environment' do + let(:project_id) { 'opentelemetry' } + let(:azure_metadata) do + { + 'subscriptionId' => project_id, + 'provider' => 'Microsoft.Compute', + 'location' => 'westeurope', + 'zone' => '2', + 'vmId' => '012345671234-abcd-1234-0123456789ab', + 'storageProfile' => { + 'imageReference' => { + 'id' => '/subscriptions/12345678-abcd-1234-abcd-0123456789ab/resourceGroups/AKS-Ubuntu/providers/Microsoft.Compute/galleries/AKSUbuntu/images/1804gen2containerd/versions/2022.06.22' + } + }, + 'vmSize' => 'Standard_D2s_v3', + 'name' => 'opentelemetry' + }.to_json + end + + before do + metadata = Minitest::Mock.new + metadata.expect(:code, 200) + metadata.expect(:body, azure_metadata) + metadata.expect(:nil?, false) + + WebMock.disable_net_connect! + stub_request(:get, 'http://169.254.169.254/metadata/instance/compute?api-version=2019-08-15') + .with( + headers: { + 'Accept' => '*/*', + 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', + 'Host' => '169.254.169.254', + 'Metadata' => 'true', + 'User-Agent' => 'Ruby' + } + ).to_return(status: 200, body: azure_metadata, headers: {}) + end + + after do + WebMock.allow_net_connect! + end + + let(:expected_resource_attributes) do + { + 'cloud.provider' => 'azure', + 'cloud.account.id' => 'opentelemetry', + 'cloud.platform' => 'azure_vm', + 'cloud.region' => 'westeurope', + 'cloud.availability_zone' => '2', + 'host.id' => '012345671234-abcd-1234-0123456789ab', + 'host.image.id' => '/subscriptions/12345678-abcd-1234-abcd-0123456789ab/resourceGroups/AKS-Ubuntu/providers/Microsoft.Compute/galleries/AKSUbuntu/images/1804gen2containerd/versions/2022.06.22', + 'host.name' => 'opentelemetry', + 'host.type' => 'Standard_D2s_v3' + } + end + + it 'returns a resource with azure attributes' do + _(detected_resource).must_be_instance_of(OpenTelemetry::SDK::Resources::Resource) + _(detected_resource_attributes).must_equal(expected_resource_attributes) + end + + describe 'and a nil resource value is detected' do + let(:project_id) { nil } + + it 'returns a resource without that attribute' do + _(detected_resource_attributes.key?('cloud.account.id')).must_equal(false) + end + end + + describe 'and an empty string resource value is detected' do + let(:project_id) { '' } + + it 'returns a resource without that attribute' do + _(detected_resource_attributes.key?('cloud.account.id')).must_equal(false) + end + end + end + end +end diff --git a/resources/azure/test/test_helper.rb b/resources/azure/test/test_helper.rb new file mode 100644 index 0000000000..3727952a1e --- /dev/null +++ b/resources/azure/test/test_helper.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'bundler/setup' +Bundler.require(:default, :development, :test) + +SimpleCov.minimum_coverage 85 +SimpleCov.start + +require 'opentelemetry-resource-detector-azure' +require 'minitest/autorun' +require 'webmock/minitest' + +OpenTelemetry.logger = Logger.new($stderr, level: ENV.fetch('OTEL_LOG_LEVEL', 'fatal').to_sym) diff --git a/resources/container/.yardopts b/resources/container/.yardopts index e65a4667ad..c6faada6c4 100644 --- a/resources/container/.yardopts +++ b/resources/container/.yardopts @@ -1,9 +1,9 @@ --no-private ---title=OpenTelemetry Resource Detectors Container +--title=OpenTelemetry Resource Detector Container --markup=markdown --main=README.md -./lib/opentelemetry/resource/detectors/**/*.rb -./lib/opentelemetry/resource/detectors.rb +./lib/opentelemetry/resource/detector/**/*.rb +./lib/opentelemetry/resource/detector.rb - README.md CHANGELOG.md diff --git a/resources/container/opentelemetry-resource-detector-container.gemspec b/resources/container/opentelemetry-resource-detector-container.gemspec index d4001a1a4f..baf1db7463 100644 --- a/resources/container/opentelemetry-resource-detector-container.gemspec +++ b/resources/container/opentelemetry-resource-detector-container.gemspec @@ -30,11 +30,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '~> 2.4' spec.add_development_dependency 'minitest', '~> 5.0' spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'rubocop', '~> 1.56.1' spec.add_development_dependency 'simplecov', '~> 0.17' - spec.add_development_dependency 'webmock', '~> 3.18.1' spec.add_development_dependency 'yard', '~> 0.9' - spec.add_development_dependency 'yard-doctest', '~> 0.1.6' if spec.respond_to?(:metadata) spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" diff --git a/resources/container/test/test_helper.rb b/resources/container/test/test_helper.rb index e7274e33d3..1937b514a3 100644 --- a/resources/container/test/test_helper.rb +++ b/resources/container/test/test_helper.rb @@ -12,6 +12,5 @@ require 'opentelemetry-resource-detector-container' require 'minitest/autorun' -require 'webmock/minitest' OpenTelemetry.logger = Logger.new($stderr, level: ENV.fetch('OTEL_LOG_LEVEL', 'fatal').to_sym) diff --git a/resources/google_cloud_platform/.rubocop.yml b/resources/google_cloud_platform/.rubocop.yml new file mode 100644 index 0000000000..1248a2f825 --- /dev/null +++ b/resources/google_cloud_platform/.rubocop.yml @@ -0,0 +1 @@ +inherit_from: ../../.rubocop.yml diff --git a/resources/google_cloud_platform/.yardopts b/resources/google_cloud_platform/.yardopts new file mode 100644 index 0000000000..bfbc5db2f9 --- /dev/null +++ b/resources/google_cloud_platform/.yardopts @@ -0,0 +1,9 @@ +--no-private +--title=OpenTelemetry Resource Detector Google Cloud Platform +--markup=markdown +--main=README.md +./lib/opentelemetry/resource/detector/**/*.rb +./lib/opentelemetry/resource/detector.rb +- +README.md +CHANGELOG.md diff --git a/resources/google_cloud_platform/CHANGELOG.md b/resources/google_cloud_platform/CHANGELOG.md new file mode 100644 index 0000000000..8df9867ea4 --- /dev/null +++ b/resources/google_cloud_platform/CHANGELOG.md @@ -0,0 +1,5 @@ +# Release History: opentelemetry-resource-detector-google_cloud_platform + +### v0.1.0 / 2023-09-07 + +* Initial release. diff --git a/resources/google_cloud_platform/Gemfile b/resources/google_cloud_platform/Gemfile new file mode 100644 index 0000000000..6ae9e48bcd --- /dev/null +++ b/resources/google_cloud_platform/Gemfile @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +source 'https://rubygems.org' + +gemspec + +group :development, :test do + gem 'byebug' unless RUBY_PLATFORM == 'java' + gem 'pry' +end diff --git a/resources/google_cloud_platform/LICENSE b/resources/google_cloud_platform/LICENSE new file mode 100644 index 0000000000..1ef7dad2c5 --- /dev/null +++ b/resources/google_cloud_platform/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright The OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/resources/google_cloud_platform/README.md b/resources/google_cloud_platform/README.md new file mode 100644 index 0000000000..fb928269bb --- /dev/null +++ b/resources/google_cloud_platform/README.md @@ -0,0 +1,72 @@ +# OpenTelemetry::Resource::Detector::GoogleCloudPlatform + +The `opentelemetry-resource-detector-google_cloud_platform` gem provides a Google Cloud Platform resource detector for OpenTelemetry. + +## What is OpenTelemetry? + +OpenTelemetry is an open source observability framework, providing a general-purpose API, SDK, and related tools required for the instrumentation of cloud-native software, frameworks, and libraries. + +OpenTelemetry provides a single set of APIs, libraries, agents, and collector services to capture distributed traces and metrics from your application. You can analyze them using Prometheus, Jaeger, and other observability tools. + +## How does this gem fit in? + +The `opentelemetry-resource-detector-google_cloud_platform` gem provides a means of retrieving a resource for supported environments following the resource semantic conventions. + +## How do I get started? + +Install the gem using: + +``` +gem install opentelemetry-sdk +gem install opentelemetry-resource-detector-google_cloud_platform +``` + +Or, if you use Bundler, include `opentelemetry-sdk` and `opentelemetry-resource-detector-google_cloud_platform` in your `Gemfile`. + +```rb +require 'opentelemetry/sdk' +require 'opentelemetry/resource/detector' + +OpenTelemetry::SDK.configure do |c| + c.resource = OpenTelemetry::Resource::Detector::GoogleCloudPlatform.detect +end +``` + + +This will populate the following resource attributes for compute running on Google Cloud Platform: + +* Compute Engine: +* * `cloud.provider` +* * `cloud.account.id` +* * `cloud.region` +* * `cloud.availability_zone` +* * `host.id` +* * `host.name` + +* Google Kubernetes Engine: +* * `k8s.cluster.name` +* * `k8s.namespace.name` +* * `k8s.pod.name` +* * `k8s.node.name` +* * `container.name` + +* Google Cloud Run: +* * `cloud.provider` +* * `cloud.account.id` +* * `cloud.region` +* * `cloud.availability_zone` +* * `faas.name` +* * `faas.version` + +## How can I get involved? + +The `opentelemetry-resource-detector-google_cloud_platform` gem source is on GitHub, along with related gems. + +The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us in [GitHub Discussions][discussions-url] or attending our weekly meeting. See the meeting calendar for dates and times. For more information on this and other language SIGs, see the OpenTelemetry community page. + +## License + +The `opentelemetry-resource-detector-google_cloud_platform` gem is distributed under the Apache 2.0 license. See LICENSE for more information. + +[discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/discussions +[k8sattributesprocessor-url]: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/k8sattributesprocessor/README.md \ No newline at end of file diff --git a/resources/google_cloud_platform/Rakefile b/resources/google_cloud_platform/Rakefile new file mode 100644 index 0000000000..1a64ba842e --- /dev/null +++ b/resources/google_cloud_platform/Rakefile @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'bundler/gem_tasks' +require 'rake/testtask' +require 'yard' +require 'rubocop/rake_task' + +RuboCop::RakeTask.new + +Rake::TestTask.new :test do |t| + t.libs << 'test' + t.libs << 'lib' + t.test_files = FileList['test/**/*_test.rb'] +end + +YARD::Rake::YardocTask.new do |t| + t.stats_options = ['--list-undoc'] +end + +if RUBY_ENGINE == 'truffleruby' + task default: %i[test] +else + task default: %i[test rubocop yard] +end diff --git a/resources/google_cloud_platform/lib/opentelemetry-resource-detector-google_cloud_platform.rb b/resources/google_cloud_platform/lib/opentelemetry-resource-detector-google_cloud_platform.rb new file mode 100644 index 0000000000..a740ef21cc --- /dev/null +++ b/resources/google_cloud_platform/lib/opentelemetry-resource-detector-google_cloud_platform.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require_relative 'opentelemetry/resource/detector' diff --git a/resources/google_cloud_platform/lib/opentelemetry/resource/detector.rb b/resources/google_cloud_platform/lib/opentelemetry/resource/detector.rb new file mode 100644 index 0000000000..4dcd898bc8 --- /dev/null +++ b/resources/google_cloud_platform/lib/opentelemetry/resource/detector.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'opentelemetry/sdk' +require 'opentelemetry/resource/detector/google_cloud_platform' +require 'opentelemetry/resource/detector/google_cloud_platform/version' + +# OpenTelemetry is an open source observability framework, providing a +# general-purpose API, SDK, and related tools required for the instrumentation +# of cloud-native software, frameworks, and libraries. +# +# The OpenTelemetry module provides global accessors for telemetry objects. +# See the documentation for the `opentelemetry-api` gem for details. +module OpenTelemetry + module Resource + # Detector contains the resource detectors + module Detector + end + end +end diff --git a/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform.rb b/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform.rb new file mode 100644 index 0000000000..440996d01d --- /dev/null +++ b/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'google-cloud-env' + +module OpenTelemetry + module Resource + module Detector + # GoogleCloudPlatform contains detect class method for determining gcp environment resource attributes + module GoogleCloudPlatform + extend self + + def detect + gcp_env = Google::Cloud::Env.new + resource_attributes = {} + + if gcp_env.compute_engine? + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PROVIDER] = 'gcp' + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_ACCOUNT_ID] = gcp_env.project_id + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_REGION] = gcp_env.instance_attribute('cluster-location') + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_AVAILABILITY_ZONE] = gcp_env.instance_zone + + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_ID] = gcp_env.lookup_metadata('instance', 'id') + resource_attributes[OpenTelemetry::SemanticConventions::Resource::HOST_NAME] = ENV['HOSTNAME'] || + gcp_env.lookup_metadata('instance', 'hostname') || + safe_gethostname + end + + if gcp_env.kubernetes_engine? + resource_attributes[OpenTelemetry::SemanticConventions::Resource::K8S_CLUSTER_NAME] = gcp_env.instance_attribute('cluster-name') + resource_attributes[OpenTelemetry::SemanticConventions::Resource::K8S_NAMESPACE_NAME] = gcp_env.kubernetes_engine_namespace_id + resource_attributes[OpenTelemetry::SemanticConventions::Resource::K8S_POD_NAME] = ENV['HOSTNAME'] || safe_gethostname + resource_attributes[OpenTelemetry::SemanticConventions::Resource::K8S_NODE_NAME] = gcp_env.lookup_metadata('instance', 'hostname') + + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CONTAINER_NAME] = ENV.fetch('CONTAINER_NAME', nil) + end + + if gcp_env.knative? + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_PROVIDER] = 'gcp' + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_ACCOUNT_ID] = gcp_env.project_id + resource_attributes[OpenTelemetry::SemanticConventions::Resource::FAAS_NAME] = gcp_env.knative_service_id + resource_attributes[OpenTelemetry::SemanticConventions::Resource::FAAS_VERSION] = gcp_env.knative_service_revision + zone = gcp_env.instance_zone + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_REGION] = get_region zone + resource_attributes[OpenTelemetry::SemanticConventions::Resource::CLOUD_AVAILABILITY_ZONE] = zone + end + + resource_attributes.delete_if { |_key, value| value.nil? || value.empty? } + OpenTelemetry::SDK::Resources::Resource.create(resource_attributes) + end + + private + + def get_region(zone) + return if zone.nil? || zone.empty? + + split_arr = zone.split('-', 3) + split_arr[0].concat('-', split_arr[1]) + end + + def safe_gethostname + Socket.gethostname + rescue StandardError + '' + end + end + end + end +end diff --git a/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform/version.rb b/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform/version.rb new file mode 100644 index 0000000000..a1ca07145f --- /dev/null +++ b/resources/google_cloud_platform/lib/opentelemetry/resource/detector/google_cloud_platform/version.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +module OpenTelemetry + module Resource + module Detector + module GoogleCloudPlatform + VERSION = '0.1.0' + end + end + end +end diff --git a/resources/google_cloud_platform/opentelemetry-resource-detector-google_cloud_platform.gemspec b/resources/google_cloud_platform/opentelemetry-resource-detector-google_cloud_platform.gemspec new file mode 100644 index 0000000000..931751f637 --- /dev/null +++ b/resources/google_cloud_platform/opentelemetry-resource-detector-google_cloud_platform.gemspec @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +lib = File.expand_path('lib', __dir__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'opentelemetry/resource/detector/google_cloud_platform/version' + +Gem::Specification.new do |spec| + spec.name = 'opentelemetry-resource-detector-google_cloud_platform' + spec.version = OpenTelemetry::Resource::Detector::GoogleCloudPlatform::VERSION + spec.authors = ['OpenTelemetry Authors'] + spec.email = ['cncf-opentelemetry-contributors@lists.cncf.io'] + + spec.summary = 'Google Cloud Platform resource detection helpers for OpenTelemetry' + spec.description = 'Google Cloud Platform resource detection helpers for OpenTelemetry' + spec.homepage = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib' + spec.license = 'Apache-2.0' + + spec.files = Dir.glob('lib/**/*.rb') + + Dir.glob('*.md') + + ['LICENSE', '.yardopts'] + spec.require_paths = ['lib'] + spec.required_ruby_version = '>= 2.6.0' + + spec.add_dependency 'google-cloud-env' + spec.add_dependency 'opentelemetry-sdk', '~> 1.0' + + spec.add_development_dependency 'bundler', '~> 2.4' + spec.add_development_dependency 'minitest', '~> 5.0' + spec.add_development_dependency 'rake', '~> 13.0' + spec.add_development_dependency 'rubocop', '~> 1.55.1' + spec.add_development_dependency 'simplecov', '~> 0.17' + spec.add_development_dependency 'webmock', '~> 3.19.1' + spec.add_development_dependency 'yard', '~> 0.9' + + if spec.respond_to?(:metadata) + spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md" + spec.metadata['source_code_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/resources/container' + spec.metadata['bug_tracker_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues' + spec.metadata['documentation_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}" + end +end diff --git a/resources/google_cloud_platform/test/opentelemetry/resource/detector/google_cloud_platform_test.rb b/resources/google_cloud_platform/test/opentelemetry/resource/detector/google_cloud_platform_test.rb new file mode 100644 index 0000000000..c737fb30a4 --- /dev/null +++ b/resources/google_cloud_platform/test/opentelemetry/resource/detector/google_cloud_platform_test.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'test_helper' + +describe OpenTelemetry::Resource::Detector::GoogleCloudPlatform do + let(:detector) { OpenTelemetry::Resource::Detector::GoogleCloudPlatform } + + describe '.detect' do + before do + WebMock.disable_net_connect! + stub_request(:get, 'http://169.254.169.254/') + .with( + headers: { + 'Accept' => '*/*', + 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', + 'Metadata-Flavor' => 'Google', + 'User-Agent' => 'Ruby' + } + ) + .to_return(status: 200, body: '', headers: {}) + end + + after do + WebMock.allow_net_connect! + end + + let(:detected_resource) { detector.detect } + let(:detected_resource_attributes) { detected_resource.attribute_enumerator.to_h } + let(:expected_resource_attributes) { {} } + + it 'returns an empty resource' do + _(detected_resource).must_be_instance_of(OpenTelemetry::SDK::Resources::Resource) + _(detected_resource_attributes).must_equal(expected_resource_attributes) + end + + describe 'when in a gcp environment' do + let(:project_id) { 'opentelemetry' } + + before do + gcp_env_mock = Minitest::Mock.new + gcp_env_mock.expect(:compute_engine?, true) + gcp_env_mock.expect(:project_id, project_id) + gcp_env_mock.expect(:instance_attribute, 'us-central1', %w[cluster-location]) + gcp_env_mock.expect(:instance_zone, 'us-central1-a') + gcp_env_mock.expect(:lookup_metadata, 'opentelemetry-test', %w[instance id]) + gcp_env_mock.expect(:lookup_metadata, 'opentelemetry-node-1', %w[instance hostname]) + gcp_env_mock.expect(:instance_attribute, 'opentelemetry-cluster', %w[cluster-name]) + gcp_env_mock.expect(:kubernetes_engine?, true) + gcp_env_mock.expect(:kubernetes_engine_namespace_id, 'default') + gcp_env_mock.expect(:knative?, true) + gcp_env_mock.expect(:project_id, project_id) + gcp_env_mock.expect(:knative_service_id, 'test-google-cloud-function') + gcp_env_mock.expect(:knative_service_revision, '2') + gcp_env_mock.expect(:instance_zone, 'us-central1-a') + + Socket.stub(:gethostname, 'opentelemetry-test') do + old_hostname = ENV.fetch('HOSTNAME', nil) + ENV['HOSTNAME'] = 'opentelemetry-host-name-1' + begin + Google::Cloud::Env.stub(:new, gcp_env_mock) { detected_resource } + ensure + ENV['HOSTNAME'] = old_hostname + end + end + end + + let(:expected_resource_attributes) do + { + 'cloud.provider' => 'gcp', + 'cloud.account.id' => 'opentelemetry', + 'cloud.region' => 'us-central1', + 'cloud.availability_zone' => 'us-central1-a', + 'host.id' => 'opentelemetry-test', + 'host.name' => 'opentelemetry-host-name-1', + 'k8s.cluster.name' => 'opentelemetry-cluster', + 'k8s.namespace.name' => 'default', + 'k8s.pod.name' => 'opentelemetry-host-name-1', + 'k8s.node.name' => 'opentelemetry-node-1', + 'faas.name' => 'test-google-cloud-function', + 'faas.version' => '2' + } + end + + it 'returns a resource with gcp attributes' do + _(detected_resource).must_be_instance_of(OpenTelemetry::SDK::Resources::Resource) + _(detected_resource_attributes).must_equal(expected_resource_attributes) + end + + describe 'and a nil resource value is detected' do + let(:project_id) { nil } + + it 'returns a resource without that attribute' do + _(detected_resource_attributes.key?('cloud.account.id')).must_equal(false) + end + end + + describe 'and an empty string resource value is detected' do + let(:project_id) { '' } + + it 'returns a resource without that attribute' do + _(detected_resource_attributes.key?('cloud.account.id')).must_equal(false) + end + end + end + end +end diff --git a/resources/google_cloud_platform/test/test_helper.rb b/resources/google_cloud_platform/test/test_helper.rb new file mode 100644 index 0000000000..ed27a87430 --- /dev/null +++ b/resources/google_cloud_platform/test/test_helper.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Copyright The OpenTelemetry Authors +# +# SPDX-License-Identifier: Apache-2.0 + +require 'bundler/setup' +Bundler.require(:default, :development, :test) + +SimpleCov.minimum_coverage 85 +SimpleCov.start + +require 'opentelemetry-resource-detector-google_cloud_platform' +require 'minitest/autorun' +require 'webmock/minitest' + +OpenTelemetry.logger = Logger.new($stderr, level: ENV.fetch('OTEL_LOG_LEVEL', 'fatal').to_sym)