From 67ffa0e2a14f1aa558e74ec86553c802519fe086 Mon Sep 17 00:00:00 2001 From: Robb Kidd Date: Tue, 19 Mar 2024 11:43:38 -0400 Subject: [PATCH] maint: switch year-ruby from Beeline to OTel (#998) ## Which problem is this PR solving? - Closes #966 ## Short description of the changes - also updates Ruby service dependencies and to use Ruby 3.0 --- ruby/frontend/.ruby-version | 2 +- ruby/frontend/Dockerfile | 2 +- ruby/frontend/Gemfile.lock | 404 ++++++++++++++++------------- ruby/message-service/.ruby-version | 2 +- ruby/message-service/Dockerfile | 18 +- ruby/message-service/Gemfile | 1 + ruby/message-service/Gemfile.lock | 257 ++++++++++-------- ruby/name-service/.ruby-version | 2 +- ruby/name-service/Dockerfile | 18 +- ruby/name-service/Gemfile | 1 + ruby/name-service/Gemfile.lock | 72 ++--- ruby/year-service/.ruby-version | 2 +- ruby/year-service/Dockerfile | 21 +- ruby/year-service/Gemfile | 4 +- ruby/year-service/Gemfile.lock | 284 ++++++++++++++++---- ruby/year-service/config.ru | 82 +++--- ruby/year-service/o11y_wrapper.rb | 66 +++++ 17 files changed, 800 insertions(+), 438 deletions(-) create mode 100644 ruby/year-service/o11y_wrapper.rb diff --git a/ruby/frontend/.ruby-version b/ruby/frontend/.ruby-version index 37c2961c..818bd47a 100644 --- a/ruby/frontend/.ruby-version +++ b/ruby/frontend/.ruby-version @@ -1 +1 @@ -2.7.2 +3.0.6 diff --git a/ruby/frontend/Dockerfile b/ruby/frontend/Dockerfile index b7d9bfac..fc343c57 100644 --- a/ruby/frontend/Dockerfile +++ b/ruby/frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:2.7 +FROM ruby:3.0 RUN gem install bundler WORKDIR /myapp COPY Gemfile* /myapp/ diff --git a/ruby/frontend/Gemfile.lock b/ruby/frontend/Gemfile.lock index 34b36bb4..749ee756 100644 --- a/ruby/frontend/Gemfile.lock +++ b/ruby/frontend/Gemfile.lock @@ -1,88 +1,105 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) + actioncable (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + zeitwerk (~> 2.6) + actionmailbox (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.6) - actionpack (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activesupport (= 7.0.6) + actionmailer (7.1.3.2) + actionpack (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.6) - actionview (= 7.0.6) - activesupport (= 7.0.6) - rack (~> 2.0, >= 2.2.4) + rails-dom-testing (~> 2.2) + actionpack (7.1.3.2) + actionview (= 7.1.3.2) + activesupport (= 7.1.3.2) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.6) - actionpack (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.3.2) + actionpack (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.6) - activesupport (= 7.0.6) + actionview (7.1.3.2) + activesupport (= 7.1.3.2) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.6) - activesupport (= 7.0.6) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.3.6) - activemodel (7.0.6) - activesupport (= 7.0.6) - activerecord (7.0.6) - activemodel (= 7.0.6) - activesupport (= 7.0.6) - activestorage (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activesupport (= 7.0.6) + activemodel (7.1.3.2) + activesupport (= 7.1.3.2) + activerecord (7.1.3.2) + activemodel (= 7.1.3.2) + activesupport (= 7.1.3.2) + timeout (>= 0.4.0) + activestorage (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activesupport (= 7.1.3.2) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.6) + activesupport (7.1.3.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) + base64 (0.2.0) + bigdecimal (3.1.7) builder (3.2.4) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) crass (1.0.6) - date (3.3.3) + date (3.3.4) + drb (2.2.1) erubi (1.12.0) - faraday (2.7.10) - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - globalid (1.1.0) - activesupport (>= 5.0) - google-protobuf (3.23.4) - googleapis-common-protos-types (1.7.0) - google-protobuf (~> 3.14) - i18n (1.14.1) + faraday (2.9.0) + faraday-net_http (>= 2.0, < 3.2) + faraday-net_http (3.1.0) + net-http + globalid (1.2.1) + activesupport (>= 6.1) + google-protobuf (3.25.3-arm64-darwin) + googleapis-common-protos-types (1.14.0) + google-protobuf (~> 3.18) + i18n (1.14.4) concurrent-ruby (~> 1.0) - loofah (2.21.3) + io-console (0.7.2) + irb (1.12.0) + rdoc + reline (>= 0.4.2) + loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -90,261 +107,290 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) - method_source (1.0.0) - mini_mime (1.1.2) - mini_portile2 (2.8.4) - minitest (5.18.1) - net-imap (0.3.6) + marcel (1.0.4) + mini_mime (1.1.5) + minitest (5.22.3) + mutex_m (0.2.0) + net-http (0.4.1) + uri + net-imap (0.4.10) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.3.3) + net-smtp (0.4.0.1) net-protocol - nio4r (2.5.9) - nokogiri (1.15.3) - mini_portile2 (~> 2.8.2) + nio4r (2.7.0) + nokogiri (1.16.3-arm64-darwin) racc (~> 1.4) - opentelemetry-api (1.1.0) - opentelemetry-common (0.19.7) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) opentelemetry-api (~> 1.0) - opentelemetry-exporter-otlp (0.25.0) - google-protobuf (~> 3.19) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) googleapis-common-protos-types (~> 1.3) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.6) + opentelemetry-common (~> 0.20) opentelemetry-sdk (~> 1.2) opentelemetry-semantic_conventions - opentelemetry-instrumentation-action_pack (0.7.0) + opentelemetry-helpers-mysql (0.1.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20) + opentelemetry-helpers-sql-obfuscation (0.1.0) + opentelemetry-common (~> 0.20) + opentelemetry-instrumentation-action_pack (0.9.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-rack (~> 0.21) - opentelemetry-instrumentation-action_view (0.6.0) + opentelemetry-instrumentation-action_view (0.7.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_job (0.5.1) + opentelemetry-instrumentation-active_job (0.7.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_model_serializers (0.20.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_record (0.6.1) + opentelemetry-instrumentation-active_record (0.7.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) ruby2_keywords - opentelemetry-instrumentation-active_support (0.4.1) + opentelemetry-instrumentation-active_support (0.5.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-all (0.39.1) + opentelemetry-instrumentation-all (0.60.0) opentelemetry-instrumentation-active_model_serializers (~> 0.20.1) - opentelemetry-instrumentation-aws_sdk (~> 0.4.1) - opentelemetry-instrumentation-bunny (~> 0.20.1) + opentelemetry-instrumentation-aws_sdk (~> 0.5.0) + opentelemetry-instrumentation-bunny (~> 0.21.0) opentelemetry-instrumentation-concurrent_ruby (~> 0.21.1) - opentelemetry-instrumentation-dalli (~> 0.24.1) - opentelemetry-instrumentation-delayed_job (~> 0.20.1) + opentelemetry-instrumentation-dalli (~> 0.25.0) + opentelemetry-instrumentation-delayed_job (~> 0.22.0) opentelemetry-instrumentation-ethon (~> 0.21.1) - opentelemetry-instrumentation-excon (~> 0.21.1) - opentelemetry-instrumentation-faraday (~> 0.23.1) + opentelemetry-instrumentation-excon (~> 0.22.0) + opentelemetry-instrumentation-faraday (~> 0.24.0) opentelemetry-instrumentation-grape (~> 0.1.3) - opentelemetry-instrumentation-graphql (~> 0.26.2) + opentelemetry-instrumentation-graphql (~> 0.28.0) + opentelemetry-instrumentation-gruf (~> 0.2.0) opentelemetry-instrumentation-http (~> 0.23.1) opentelemetry-instrumentation-http_client (~> 0.22.1) opentelemetry-instrumentation-koala (~> 0.20.1) opentelemetry-instrumentation-lmdb (~> 0.22.1) opentelemetry-instrumentation-mongo (~> 0.22.1) - opentelemetry-instrumentation-mysql2 (~> 0.24.2) + opentelemetry-instrumentation-mysql2 (~> 0.27.0) opentelemetry-instrumentation-net_http (~> 0.22.1) - opentelemetry-instrumentation-pg (~> 0.25.2) - opentelemetry-instrumentation-que (~> 0.6.1) - opentelemetry-instrumentation-racecar (~> 0.2.1) - opentelemetry-instrumentation-rack (~> 0.23.1) - opentelemetry-instrumentation-rails (~> 0.27.1) + opentelemetry-instrumentation-pg (~> 0.27.0) + opentelemetry-instrumentation-que (~> 0.8.0) + opentelemetry-instrumentation-racecar (~> 0.3.0) + opentelemetry-instrumentation-rack (~> 0.24.0) + opentelemetry-instrumentation-rails (~> 0.30.0) opentelemetry-instrumentation-rake (~> 0.2.1) - opentelemetry-instrumentation-rdkafka (~> 0.3.1) + opentelemetry-instrumentation-rdkafka (~> 0.4.0) opentelemetry-instrumentation-redis (~> 0.25.1) - opentelemetry-instrumentation-resque (~> 0.4.1) + opentelemetry-instrumentation-resque (~> 0.5.0) opentelemetry-instrumentation-restclient (~> 0.22.1) - opentelemetry-instrumentation-ruby_kafka (~> 0.20.1) - opentelemetry-instrumentation-sidekiq (~> 0.24.1) + opentelemetry-instrumentation-ruby_kafka (~> 0.21.0) + opentelemetry-instrumentation-sidekiq (~> 0.25.0) opentelemetry-instrumentation-sinatra (~> 0.23.1) - opentelemetry-instrumentation-trilogy (~> 0.56.1) - opentelemetry-instrumentation-aws_sdk (0.4.1) + opentelemetry-instrumentation-trilogy (~> 0.59.0) + opentelemetry-instrumentation-aws_sdk (0.5.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-base (0.22.1) + opentelemetry-instrumentation-base (0.22.3) opentelemetry-api (~> 1.0) opentelemetry-registry (~> 0.1) - opentelemetry-instrumentation-bunny (0.20.1) + opentelemetry-instrumentation-bunny (0.21.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-concurrent_ruby (0.21.1) + opentelemetry-instrumentation-concurrent_ruby (0.21.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-dalli (0.24.1) + opentelemetry-instrumentation-dalli (0.25.0) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-delayed_job (0.20.1) + opentelemetry-instrumentation-delayed_job (0.22.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-ethon (0.21.1) + opentelemetry-instrumentation-ethon (0.21.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-excon (0.21.1) + opentelemetry-instrumentation-excon (0.22.0) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-faraday (0.23.1) + opentelemetry-instrumentation-faraday (0.24.0) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-grape (0.1.3) - opentelemetry-api (~> 1.1.0) + opentelemetry-instrumentation-grape (0.1.6) + opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-rack (~> 0.21) - opentelemetry-instrumentation-graphql (0.26.2) + opentelemetry-instrumentation-graphql (0.28.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-http (0.23.1) + opentelemetry-instrumentation-gruf (0.2.0) + opentelemetry-api (>= 1.0.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-http (0.23.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-http_client (0.22.1) + opentelemetry-instrumentation-http_client (0.22.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-koala (0.20.1) + opentelemetry-instrumentation-koala (0.20.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-lmdb (0.22.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-mongo (0.22.1) + opentelemetry-instrumentation-mongo (0.22.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-mysql2 (0.24.2) + opentelemetry-instrumentation-mysql2 (0.27.0) opentelemetry-api (~> 1.0) + opentelemetry-helpers-mysql + opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-net_http (0.22.1) + opentelemetry-instrumentation-net_http (0.22.4) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-pg (0.25.2) + opentelemetry-instrumentation-pg (0.27.1) opentelemetry-api (~> 1.0) + opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-que (0.6.1) + opentelemetry-instrumentation-que (0.8.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-racecar (0.2.1) + opentelemetry-instrumentation-racecar (0.3.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rack (0.23.2) + opentelemetry-instrumentation-rack (0.24.0) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rails (0.27.1) + opentelemetry-instrumentation-rails (0.30.0) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-action_pack (~> 0.7.0) - opentelemetry-instrumentation-action_view (~> 0.6.0) - opentelemetry-instrumentation-active_job (~> 0.5.1) - opentelemetry-instrumentation-active_record (~> 0.6.1) - opentelemetry-instrumentation-active_support (~> 0.4.1) + opentelemetry-instrumentation-action_pack (~> 0.9.0) + opentelemetry-instrumentation-action_view (~> 0.7.0) + opentelemetry-instrumentation-active_job (~> 0.7.0) + opentelemetry-instrumentation-active_record (~> 0.7.0) + opentelemetry-instrumentation-active_support (~> 0.5.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-rake (0.2.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rdkafka (0.3.1) + opentelemetry-instrumentation-rdkafka (0.4.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-redis (0.25.1) + opentelemetry-instrumentation-redis (0.25.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-resque (0.4.1) + opentelemetry-instrumentation-resque (0.5.1) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-restclient (0.22.1) + opentelemetry-instrumentation-restclient (0.22.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-ruby_kafka (0.20.1) + opentelemetry-instrumentation-ruby_kafka (0.21.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-sidekiq (0.24.1) + opentelemetry-instrumentation-sidekiq (0.25.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-sinatra (0.23.1) + opentelemetry-instrumentation-sinatra (0.23.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-rack (~> 0.21) - opentelemetry-instrumentation-trilogy (0.56.1) + opentelemetry-instrumentation-trilogy (0.59.2) opentelemetry-api (~> 1.0) + opentelemetry-helpers-mysql + opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-semantic_conventions (>= 1.8.0) opentelemetry-registry (0.3.0) opentelemetry-api (~> 1.1) - opentelemetry-sdk (1.2.0) + opentelemetry-sdk (1.4.0) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20) opentelemetry-registry (~> 0.2) opentelemetry-semantic_conventions opentelemetry-semantic_conventions (1.10.0) opentelemetry-api (~> 1.0) - puma (6.3.0) + psych (5.1.2) + stringio + puma (6.4.2) nio4r (~> 2.0) - racc (1.7.1) - rack (2.2.7) + racc (1.7.3) + rack (3.0.9.1) + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.6) - actioncable (= 7.0.6) - actionmailbox (= 7.0.6) - actionmailer (= 7.0.6) - actionpack (= 7.0.6) - actiontext (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activemodel (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rails (7.1.3.2) + actioncable (= 7.1.3.2) + actionmailbox (= 7.1.3.2) + actionmailer (= 7.1.3.2) + actionpack (= 7.1.3.2) + actiontext (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activemodel (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) bundler (>= 1.15.0) - railties (= 7.0.6) - rails-dom-testing (2.1.1) + railties (= 7.1.3.2) + rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) - method_source + railties (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) + irb + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) - rake (13.0.6) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) + rake (13.1.0) + rdoc (6.6.2) + psych (>= 4.0.0) + reline (0.4.3) + io-console (~> 0.5) ruby2_keywords (0.0.5) - thor (1.2.2) - timeout (0.4.0) + stringio (3.1.0) + thor (1.3.1) + timeout (0.4.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - websocket-driver (0.7.5) + uri (0.13.0) + webrick (1.8.1) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.8) + zeitwerk (2.6.13) PLATFORMS - ruby + arm64-darwin-23 DEPENDENCIES faraday @@ -355,4 +401,4 @@ DEPENDENCIES rails BUNDLED WITH - 2.3.14 + 2.2.33 diff --git a/ruby/message-service/.ruby-version b/ruby/message-service/.ruby-version index 37c2961c..818bd47a 100644 --- a/ruby/message-service/.ruby-version +++ b/ruby/message-service/.ruby-version @@ -1 +1 @@ -2.7.2 +3.0.6 diff --git a/ruby/message-service/Dockerfile b/ruby/message-service/Dockerfile index 22a127d3..ded8e3ef 100644 --- a/ruby/message-service/Dockerfile +++ b/ruby/message-service/Dockerfile @@ -1,9 +1,9 @@ -FROM ruby:2.7 -RUN gem install bundler -WORKDIR /myapp -COPY Gemfile /myapp/Gemfile -RUN bundle install -COPY message.ru /myapp - -EXPOSE 9000 -CMD [ "bundle", "exec", "rackup", "message.ru", "--server", "puma", "--host", "0.0.0.0"] +FROM ruby:3.0 +RUN gem install bundler +WORKDIR /myapp +COPY Gemfile /myapp/Gemfile +RUN bundle install +COPY message.ru /myapp + +EXPOSE 9000 +CMD [ "bundle", "exec", "rackup", "message.ru", "--server", "puma", "--host", "0.0.0.0"] diff --git a/ruby/message-service/Gemfile b/ruby/message-service/Gemfile index 67679dc1..af27c9fb 100644 --- a/ruby/message-service/Gemfile +++ b/ruby/message-service/Gemfile @@ -4,3 +4,4 @@ gem 'rails' gem 'puma' gem 'honeycomb-beeline' gem 'faraday' +gem 'rackup' diff --git a/ruby/message-service/Gemfile.lock b/ruby/message-service/Gemfile.lock index 33a69ecd..767308ac 100644 --- a/ruby/message-service/Gemfile.lock +++ b/ruby/message-service/Gemfile.lock @@ -1,111 +1,128 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) + actioncable (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + zeitwerk (~> 2.6) + actionmailbox (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.6) - actionpack (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activesupport (= 7.0.6) + actionmailer (7.1.3.2) + actionpack (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.6) - actionview (= 7.0.6) - activesupport (= 7.0.6) - rack (~> 2.0, >= 2.2.4) + rails-dom-testing (~> 2.2) + actionpack (7.1.3.2) + actionview (= 7.1.3.2) + activesupport (= 7.1.3.2) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.6) - actionpack (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.3.2) + actionpack (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.6) - activesupport (= 7.0.6) + actionview (7.1.3.2) + activesupport (= 7.1.3.2) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.6) - activesupport (= 7.0.6) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.3.6) - activemodel (7.0.6) - activesupport (= 7.0.6) - activerecord (7.0.6) - activemodel (= 7.0.6) - activesupport (= 7.0.6) - activestorage (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activesupport (= 7.0.6) + activemodel (7.1.3.2) + activesupport (= 7.1.3.2) + activerecord (7.1.3.2) + activemodel (= 7.1.3.2) + activesupport (= 7.1.3.2) + timeout (>= 0.4.0) + activestorage (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activesupport (= 7.1.3.2) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.6) + activesupport (7.1.3.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) - addressable (2.8.4) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) + base64 (0.2.0) + bigdecimal (3.1.7) builder (3.2.4) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) crass (1.0.6) - date (3.3.3) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) + date (3.3.4) + domain_name (0.6.20240107) + drb (2.2.1) erubi (1.12.0) - excon (0.100.0) - faraday (2.7.10) - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - ffi (1.15.5) - ffi-compiler (1.0.1) - ffi (>= 1.0.0) + excon (0.110.0) + faraday (2.9.0) + faraday-net_http (>= 2.0, < 3.2) + faraday-net_http (3.1.0) + net-http + ffi (1.16.3) + ffi-compiler (1.3.2) + ffi (>= 1.15.5) rake - globalid (1.1.0) - activesupport (>= 5.0) - honeycomb-beeline (3.0.0) - libhoney (>= 1.14.2) - http (5.1.1) + globalid (1.2.1) + activesupport (>= 6.1) + honeycomb-beeline (3.1.0) + libhoney (>= 2.3.0) + http (5.2.0) addressable (~> 2.8) + base64 (~> 0.1) http-cookie (~> 1.0) http-form_data (~> 2.2) - llhttp-ffi (~> 0.4.0) + llhttp-ffi (~> 0.5.0) http-cookie (1.0.5) domain_name (~> 0.5) http-form_data (2.3.0) - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) - libhoney (2.2.0) + io-console (0.7.2) + irb (1.12.0) + rdoc + reline (>= 0.4.2) + libhoney (2.3.0) addressable (~> 2.0) excon http (>= 2.0, < 6.0) - llhttp-ffi (0.4.0) + llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - loofah (2.21.3) + loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -113,81 +130,93 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) - method_source (1.0.0) - mini_mime (1.1.2) - mini_portile2 (2.8.2) - minitest (5.18.1) - net-imap (0.3.6) + marcel (1.0.4) + mini_mime (1.1.5) + minitest (5.22.3) + mutex_m (0.2.0) + net-http (0.4.1) + uri + net-imap (0.4.10) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.3.3) + net-smtp (0.4.0.1) net-protocol - nio4r (2.5.9) - nokogiri (1.15.2) - mini_portile2 (~> 2.8.2) + nio4r (2.7.0) + nokogiri (1.16.3-arm64-darwin) racc (~> 1.4) - public_suffix (5.0.3) - puma (6.3.0) + psych (5.1.2) + stringio + public_suffix (5.0.4) + puma (6.4.2) nio4r (~> 2.0) - racc (1.7.1) - rack (2.2.7) + racc (1.7.3) + rack (3.0.9.1) + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.6) - actioncable (= 7.0.6) - actionmailbox (= 7.0.6) - actionmailer (= 7.0.6) - actionpack (= 7.0.6) - actiontext (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activemodel (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rails (7.1.3.2) + actioncable (= 7.1.3.2) + actionmailbox (= 7.1.3.2) + actionmailer (= 7.1.3.2) + actionpack (= 7.1.3.2) + actiontext (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activemodel (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) bundler (>= 1.15.0) - railties (= 7.0.6) - rails-dom-testing (2.1.1) + railties (= 7.1.3.2) + rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) - method_source + railties (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) + irb + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) - rake (13.0.6) - ruby2_keywords (0.0.5) - thor (1.2.2) - timeout (0.4.0) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) + rake (13.1.0) + rdoc (6.6.2) + psych (>= 4.0.0) + reline (0.4.3) + io-console (~> 0.5) + stringio (3.1.0) + thor (1.3.1) + timeout (0.4.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) - websocket-driver (0.7.5) + uri (0.13.0) + webrick (1.8.1) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.8) + zeitwerk (2.6.13) PLATFORMS - ruby + arm64-darwin-23 DEPENDENCIES faraday honeycomb-beeline puma + rackup rails BUNDLED WITH - 2.1.4 + 2.2.33 diff --git a/ruby/name-service/.ruby-version b/ruby/name-service/.ruby-version index 37c2961c..818bd47a 100644 --- a/ruby/name-service/.ruby-version +++ b/ruby/name-service/.ruby-version @@ -1 +1 @@ -2.7.2 +3.0.6 diff --git a/ruby/name-service/Dockerfile b/ruby/name-service/Dockerfile index 4fabbdb5..412475ba 100644 --- a/ruby/name-service/Dockerfile +++ b/ruby/name-service/Dockerfile @@ -1,9 +1,9 @@ -FROM ruby:2.7 -RUN gem install bundler -WORKDIR /myapp -COPY Gemfile /myapp/Gemfile -RUN bundle install -COPY name.rb /myapp - -EXPOSE 8000 -CMD [ "bundle", "exec", "ruby", "name.rb"] +FROM ruby:3.0 +RUN gem install bundler +WORKDIR /myapp +COPY Gemfile /myapp/Gemfile +RUN bundle install +COPY name.rb /myapp + +EXPOSE 8000 +CMD [ "bundle", "exec", "ruby", "name.rb"] diff --git a/ruby/name-service/Gemfile b/ruby/name-service/Gemfile index 1eda5026..7a4020ca 100644 --- a/ruby/name-service/Gemfile +++ b/ruby/name-service/Gemfile @@ -3,3 +3,4 @@ source "https://rubygems.org" gem "honeycomb-beeline" gem "sinatra" gem "faraday" +gem "rackup" diff --git a/ruby/name-service/Gemfile.lock b/ruby/name-service/Gemfile.lock index 1fad03e3..a99f4ab0 100644 --- a/ruby/name-service/Gemfile.lock +++ b/ruby/name-service/Gemfile.lock @@ -1,61 +1,71 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.8.4) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - excon (0.100.0) - faraday (2.7.10) - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - ffi (1.15.5) - ffi-compiler (1.0.1) - ffi (>= 1.0.0) + base64 (0.2.0) + domain_name (0.6.20240107) + excon (0.110.0) + faraday (2.9.0) + faraday-net_http (>= 2.0, < 3.2) + faraday-net_http (3.1.0) + net-http + ffi (1.16.3) + ffi-compiler (1.3.2) + ffi (>= 1.15.5) rake - honeycomb-beeline (3.0.0) - libhoney (>= 1.14.2) - http (5.1.1) + honeycomb-beeline (3.1.0) + libhoney (>= 2.3.0) + http (5.2.0) addressable (~> 2.8) + base64 (~> 0.1) http-cookie (~> 1.0) http-form_data (~> 2.2) - llhttp-ffi (~> 0.4.0) + llhttp-ffi (~> 0.5.0) http-cookie (1.0.5) domain_name (~> 0.5) http-form_data (2.3.0) - libhoney (2.2.0) + libhoney (2.3.0) addressable (~> 2.0) excon http (>= 2.0, < 6.0) - llhttp-ffi (0.4.0) + llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - public_suffix (5.0.3) - rack (2.2.7) - rack-protection (3.0.6) - rack - rake (13.0.6) + net-http (0.4.1) + uri + public_suffix (5.0.4) + rack (3.0.9.1) + rack-protection (4.0.0) + base64 (>= 0.1.0) + rack (>= 3.0.0, < 4) + rack-session (2.0.0) + rack (>= 3.0.0) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rake (13.1.0) ruby2_keywords (0.0.5) - sinatra (3.0.6) + sinatra (4.0.0) mustermann (~> 3.0) - rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.0.6) + rack (>= 3.0.0, < 4) + rack-protection (= 4.0.0) + rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - tilt (2.2.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) + tilt (2.3.0) + uri (0.13.0) + webrick (1.8.1) PLATFORMS - ruby + arm64-darwin-23 DEPENDENCIES faraday honeycomb-beeline + rackup sinatra BUNDLED WITH - 2.1.4 + 2.2.33 diff --git a/ruby/year-service/.ruby-version b/ruby/year-service/.ruby-version index 37c2961c..818bd47a 100644 --- a/ruby/year-service/.ruby-version +++ b/ruby/year-service/.ruby-version @@ -1 +1 @@ -2.7.2 +3.0.6 diff --git a/ruby/year-service/Dockerfile b/ruby/year-service/Dockerfile index 13ca81f9..57eac21b 100644 --- a/ruby/year-service/Dockerfile +++ b/ruby/year-service/Dockerfile @@ -1,10 +1,11 @@ -FROM ruby:3.0 -RUN gem install bundler -WORKDIR /app -COPY Gemfile /app/Gemfile -COPY Gemfile.lock /app/Gemfile.lock -RUN bundle install -COPY config.ru /app - -EXPOSE 6001 -CMD ["bundle", "exec", "puma", "--port", "6001"] +FROM ruby:3.0 +RUN gem install bundler +WORKDIR /app +COPY Gemfile /app/Gemfile +COPY Gemfile.lock /app/Gemfile.lock +RUN bundle install +COPY config.ru /app +COPY o11y_wrapper.rb /app + +EXPOSE 6001 +CMD ["bundle", "exec", "puma", "--port", "6001"] diff --git a/ruby/year-service/Gemfile b/ruby/year-service/Gemfile index 4a1771da..4e06563d 100644 --- a/ruby/year-service/Gemfile +++ b/ruby/year-service/Gemfile @@ -1,5 +1,7 @@ source "https://rubygems.org" -gem "honeycomb-beeline" +gem 'opentelemetry-sdk' +gem 'opentelemetry-exporter-otlp' +gem 'opentelemetry-instrumentation-all' gem "grape" gem "puma" diff --git a/ruby/year-service/Gemfile.lock b/ruby/year-service/Gemfile.lock index b90224e2..fc483bc2 100644 --- a/ruby/year-service/Gemfile.lock +++ b/ruby/year-service/Gemfile.lock @@ -1,18 +1,23 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.0.5) + activesupport (7.1.3.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) - addressable (2.8.4) - public_suffix (>= 2.0.2, < 6.0) + base64 (0.2.0) + bigdecimal (3.1.7) builder (3.2.4) - concurrent-ruby (1.2.2) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - dry-core (1.0.0) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) + drb (2.2.1) + dry-core (1.0.1) concurrent-ruby (~> 1.0) zeitwerk (~> 2.6) dry-inflector (1.0.0) @@ -20,72 +25,255 @@ GEM concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) - dry-types (1.7.1) + dry-types (1.7.2) + bigdecimal (~> 3.0) concurrent-ruby (~> 1.0) dry-core (~> 1.0) dry-inflector (~> 1.0) dry-logic (~> 1.4) zeitwerk (~> 2.6) - excon (0.100.0) - ffi (1.15.5) - ffi-compiler (1.0.1) - ffi (>= 1.0.0) - rake - grape (1.7.1) - activesupport + google-protobuf (3.25.3-arm64-darwin) + googleapis-common-protos-types (1.14.0) + google-protobuf (~> 3.18) + grape (2.0.0) + activesupport (>= 5) builder dry-types (>= 1.1) mustermann-grape (~> 1.0.0) - rack (>= 1.3.0, < 3) + rack (>= 1.3.0) rack-accept - honeycomb-beeline (3.0.0) - libhoney (>= 1.14.2) - http (5.1.1) - addressable (~> 2.8) - http-cookie (~> 1.0) - http-form_data (~> 2.2) - llhttp-ffi (~> 0.4.0) - http-cookie (1.0.5) - domain_name (~> 0.5) - http-form_data (2.3.0) - i18n (1.13.0) + i18n (1.14.4) concurrent-ruby (~> 1.0) - libhoney (2.2.0) - addressable (~> 2.0) - excon - http (>= 2.0, < 6.0) - llhttp-ffi (0.4.0) - ffi-compiler (~> 1.0) - rake (~> 13.0) - minitest (5.18.0) + minitest (5.22.3) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) mustermann-grape (1.0.2) mustermann (>= 1.0.0) - nio4r (2.5.9) - public_suffix (5.0.3) - puma (6.3.0) + mutex_m (0.2.0) + nio4r (2.7.0) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-helpers-mysql (0.1.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20) + opentelemetry-helpers-sql-obfuscation (0.1.0) + opentelemetry-common (~> 0.20) + opentelemetry-instrumentation-action_pack (0.9.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (~> 0.21) + opentelemetry-instrumentation-action_view (0.7.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-active_support (~> 0.1) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-active_job (0.7.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-active_model_serializers (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-active_record (0.7.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + ruby2_keywords + opentelemetry-instrumentation-active_support (0.5.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-all (0.60.0) + opentelemetry-instrumentation-active_model_serializers (~> 0.20.1) + opentelemetry-instrumentation-aws_sdk (~> 0.5.0) + opentelemetry-instrumentation-bunny (~> 0.21.0) + opentelemetry-instrumentation-concurrent_ruby (~> 0.21.1) + opentelemetry-instrumentation-dalli (~> 0.25.0) + opentelemetry-instrumentation-delayed_job (~> 0.22.0) + opentelemetry-instrumentation-ethon (~> 0.21.1) + opentelemetry-instrumentation-excon (~> 0.22.0) + opentelemetry-instrumentation-faraday (~> 0.24.0) + opentelemetry-instrumentation-grape (~> 0.1.3) + opentelemetry-instrumentation-graphql (~> 0.28.0) + opentelemetry-instrumentation-gruf (~> 0.2.0) + opentelemetry-instrumentation-http (~> 0.23.1) + opentelemetry-instrumentation-http_client (~> 0.22.1) + opentelemetry-instrumentation-koala (~> 0.20.1) + opentelemetry-instrumentation-lmdb (~> 0.22.1) + opentelemetry-instrumentation-mongo (~> 0.22.1) + opentelemetry-instrumentation-mysql2 (~> 0.27.0) + opentelemetry-instrumentation-net_http (~> 0.22.1) + opentelemetry-instrumentation-pg (~> 0.27.0) + opentelemetry-instrumentation-que (~> 0.8.0) + opentelemetry-instrumentation-racecar (~> 0.3.0) + opentelemetry-instrumentation-rack (~> 0.24.0) + opentelemetry-instrumentation-rails (~> 0.30.0) + opentelemetry-instrumentation-rake (~> 0.2.1) + opentelemetry-instrumentation-rdkafka (~> 0.4.0) + opentelemetry-instrumentation-redis (~> 0.25.1) + opentelemetry-instrumentation-resque (~> 0.5.0) + opentelemetry-instrumentation-restclient (~> 0.22.1) + opentelemetry-instrumentation-ruby_kafka (~> 0.21.0) + opentelemetry-instrumentation-sidekiq (~> 0.25.0) + opentelemetry-instrumentation-sinatra (~> 0.23.1) + opentelemetry-instrumentation-trilogy (~> 0.59.0) + opentelemetry-instrumentation-aws_sdk (0.5.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-base (0.22.3) + opentelemetry-api (~> 1.0) + opentelemetry-registry (~> 0.1) + opentelemetry-instrumentation-bunny (0.21.2) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-concurrent_ruby (0.21.2) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-dalli (0.25.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-delayed_job (0.22.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-ethon (0.21.3) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-excon (0.22.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-faraday (0.24.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-grape (0.1.6) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (~> 0.21) + opentelemetry-instrumentation-graphql (0.28.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-gruf (0.2.0) + opentelemetry-api (>= 1.0.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-http (0.23.2) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-http_client (0.22.3) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-koala (0.20.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-lmdb (0.22.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-mongo (0.22.2) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-mysql2 (0.27.0) + opentelemetry-api (~> 1.0) + opentelemetry-helpers-mysql + opentelemetry-helpers-sql-obfuscation + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-net_http (0.22.4) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-pg (0.27.1) + opentelemetry-api (~> 1.0) + opentelemetry-helpers-sql-obfuscation + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-que (0.8.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-racecar (0.3.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (0.24.0) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rails (0.30.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-action_pack (~> 0.9.0) + opentelemetry-instrumentation-action_view (~> 0.7.0) + opentelemetry-instrumentation-active_job (~> 0.7.0) + opentelemetry-instrumentation-active_record (~> 0.7.0) + opentelemetry-instrumentation-active_support (~> 0.5.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rake (0.2.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rdkafka (0.4.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-redis (0.25.3) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-resque (0.5.1) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-restclient (0.22.3) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-ruby_kafka (0.21.0) + opentelemetry-api (~> 1.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-sidekiq (0.25.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-sinatra (0.23.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (~> 0.21) + opentelemetry-instrumentation-trilogy (0.59.2) + opentelemetry-api (~> 1.0) + opentelemetry-helpers-mysql + opentelemetry-helpers-sql-obfuscation + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-semantic_conventions (>= 1.8.0) + opentelemetry-registry (0.3.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.4.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + puma (6.4.2) nio4r (~> 2.0) - rack (2.2.7) + rack (3.0.9.1) rack-accept (0.4.5) rack (>= 0.4) - rake (13.0.6) ruby2_keywords (0.0.5) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) - zeitwerk (2.6.8) + zeitwerk (2.6.13) PLATFORMS - ruby - x86_64-darwin-20 + arm64-darwin-23 DEPENDENCIES grape - honeycomb-beeline + opentelemetry-exporter-otlp + opentelemetry-instrumentation-all + opentelemetry-sdk puma BUNDLED WITH - 2.2.21 + 2.2.33 diff --git a/ruby/year-service/config.ru b/ruby/year-service/config.ru index d60d18cf..e7dd53ca 100644 --- a/ruby/year-service/config.ru +++ b/ruby/year-service/config.ru @@ -1,32 +1,50 @@ -# frozen_string_literal: true - -require "bundler/setup" -Bundler.require - -require "honeycomb/propagation/w3c" - -Honeycomb.configure do |config| - config.write_key = ENV["HONEYCOMB_API_KEY"] - config.service_name = "year-ruby" - config.api_host = ENV['HONEYCOMB_API_ENDPOINT'] - - config.http_trace_parser_hook do |env| - Honeycomb::W3CPropagation::UnmarshalTraceContext.parse_rack_env(env) - end - - config.notification_events = [/grape$/] -end - -class App < Grape::API - format :txt - - get "/year" do - Honeycomb.start_span(name: "🗓 get-a-year ✨") do - sleep rand(0..0.005) - (2015..2020).to_a.sample - end - end -end - -use Honeycomb::Rack::Middleware, client: Honeycomb.client -run App +# frozen_string_literal: true + +require "bundler/setup" +Bundler.require + +require 'opentelemetry/sdk' +require 'opentelemetry/exporter/otlp' +require 'opentelemetry/instrumentation/all' +require_relative './o11y_wrapper.rb' + +begin + OpenTelemetry::SDK.configure do |c| + c.service_name = ENV['SERVICE_NAME'] || "year-ruby" + + # enable all auto-instrumentation available + c.use_all() + + # add the Baggage and CarryOn processors to thepipeline + c.add_span_processor(O11yWrapper::BaggageSpanProcessor.new) + c.add_span_processor(O11yWrapper::CarryOnSpanProcessor.new) + + # Because we tinkered with the pipeline, we'll need to + # wire up span batching and sending via OTLP ourselves. + # This is usually the default. + c.add_span_processor( + OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( + OpenTelemetry::Exporter::OTLP::Exporter.new() + ) + ) + end +rescue OpenTelemetry::SDK::ConfigurationError => e + puts "What now?" + puts e.inspect +end + +Tracer = OpenTelemetry.tracer_provider.tracer("year-internal") + +class App < Grape::API + format :txt + + get :year do + Tracer.in_span("🗓 get-a-year ✨") do + sleep rand(0..0.005) + (2015..2020).to_a.sample + end + end +end + +use OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware +run App diff --git a/ruby/year-service/o11y_wrapper.rb b/ruby/year-service/o11y_wrapper.rb new file mode 100644 index 00000000..54d0ba7f --- /dev/null +++ b/ruby/year-service/o11y_wrapper.rb @@ -0,0 +1,66 @@ +require 'opentelemetry/sdk' + +# A module to wrap customizations for instrumentation. This represents what +# an organization might do to collect customizations into a library to +# standardize and reuse across multiple services. +module O11yWrapper + # The BaggageSpanProcessor reads attributes stored in Baggage in the span's + # parent context and adds them to the span. + # + # Add this span processor to the pipeline and then keys and values + # added to Baggage will appear on subsequent child spans for a trace within + # this service *and* be propagated to external services via propagation + # headers. If the external services also have a Baggage span processor, the + # keys and values will appear in those child spans as well. + # + # ⚠ ⚠ ⚠️ + # To repeat: a consequence of adding data to Baggage is that the keys and + # values will appear in all outgoing HTTP headers from the application. + # Do not put sensitive information in Baggage. + class BaggageSpanProcessor < OpenTelemetry::SDK::Trace::SpanProcessor + def on_start(span, parent_context) + span.add_attributes(OpenTelemetry::Baggage.values(context: parent_context)) + end + end + + # CarryOn is not Baggage. + # + # Paired with a CarryOnSpanProcessor, adding keys and values to CarryOn will + # result in those key/values appearing on subsequent child spans for a trace + # but only within the current process. Data will not automatically propagate + # outside the process as with Baggage. + # + # ... though, you *could* choose to check your CarryOn into Baggage at any + # point you are comfortable propagating your CarryOn data to other services. + module CarryOn + extend self + + # the key under which attributes will be stored for CarryOn within a context + CONTEXT_KEY = ::OpenTelemetry::Context.create_key('carry-on-attrs') + private_constant :CONTEXT_KEY + + # retrieve the CarryOn attributes from a given or current context + def attributes(context = nil) + context ||= ::OpenTelemetry::Context.current + context.value(CONTEXT_KEY) || {} + end + + # return a new Context with the attributes given set within CarryOn + def with_attributes(attributes_hash) + attributes_hash = attributes.merge(attributes_hash) + ::OpenTelemetry::Context.with_value(CONTEXT_KEY, attributes_hash) { |c, h| yield h, c } + end + end + + # The CarryOnSpanProcessor reads attributes stored under a custom CarryOn key + # in the span's parent context and adds them to the span. + # + # Add this span processor to the pipeline and then keys and values + # added to CarryOn will appear on subsequent child spans for a trace only + # within this service. CarryOn attributes do NOT propagate outside this process. + class CarryOnSpanProcessor < OpenTelemetry::SDK::Trace::SpanProcessor + def on_start(span, parent_context) + span.add_attributes(CarryOn.attributes(parent_context)) + end + end +end