Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 15 additions & 82 deletions .ci/.exclude.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,15 @@ exclude:
# Ruby 2.4
# Only test on rails-4.2, sinatra-1.4
- VERSION: ruby:2.4
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: ruby:2.4
FRAMEWORK: rails-6.1
- VERSION: ruby:2.4
FRAMEWORK: rails-6.0
- VERSION: ruby:2.4
FRAMEWORK: rails-5.2
- VERSION: ruby:2.4
FRAMEWORK: sinatra-2.2
- VERSION: ruby:2.4
FRAMEWORK: grape-1.6
- VERSION: ruby:2.4
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.0
- VERSION: ruby:2.4
FRAMEWORK: rails-main
- VERSION: ruby:2.4
Expand All @@ -26,8 +22,6 @@ exclude:
# Only test on ruby 2.4
- VERSION: ruby:3.1
FRAMEWORK: rails-4.2
- VERSION: ruby:3.0
FRAMEWORK: rails-4.2
- VERSION: ruby:2.7
FRAMEWORK: rails-4.2
- VERSION: ruby:2.6
Expand All @@ -43,8 +37,6 @@ exclude:
# sinatra-1.4 exclusions
- VERSION: ruby:3.1
FRAMEWORK: sinatra-1.4
- VERSION: ruby:3.0
FRAMEWORK: sinatra-1.4
- VERSION: ruby:2.7
FRAMEWORK: sinatra-1.4
- VERSION: jruby:9.2
Expand All @@ -56,22 +48,18 @@ exclude:
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: sinatra-1.4

# rails-6.0 and rails-6.1 exclusions
# rails-6.1 and rails 7.0 exclusions
# Don't test on ruby 2.4
- VERSION: ruby:2.4
FRAMEWORK: rails-6.1
- VERSION: ruby:2.4
FRAMEWORK: rails-6.0
FRAMEWORK: rails-7.2

# Only test rails main on ruby 3.1
- VERSION: ruby:3.0
FRAMEWORK: rails-main
- VERSION: ruby:2.7
FRAMEWORK: rails-main
- VERSION: ruby:2.6
FRAMEWORK: rails-main
- VERSION: ruby:2.5
FRAMEWORK: rails-main
- VERSION: ruby:2.4
FRAMEWORK: rails-main
- VERSION: jruby:9.2
Expand All @@ -83,29 +71,25 @@ exclude:
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: rails-main

# Only test rails 7.0 on ruby >= 2.7
# Only test rails 7.2 on ruby >= 3.1
- VERSION: ruby:2.7
FRAMEWORK: rails-7.2
- VERSION: ruby:2.6
FRAMEWORK: rails-7.0
- VERSION: ruby:2.5
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: ruby:2.4
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: jruby:9.2
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: elasticobservability/jruby:9.2-13-jdk
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: elasticobservability/jruby:9.2-11-jdk
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: rails-7.0
FRAMEWORK: rails-7.2

# Only test sinatra main on ruby 2.7 and ruby 3.1
- VERSION: ruby:3.0
FRAMEWORK: sinatra-main
- VERSION: ruby:2.6
FRAMEWORK: sinatra-main
- VERSION: ruby:2.5
FRAMEWORK: sinatra-main
- VERSION: ruby:2.4
FRAMEWORK: sinatra-main
- VERSION: jruby:9.2
Expand All @@ -117,11 +101,9 @@ exclude:
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: sinatra-main

# Only test grape master on ruby 2.7 and ruby 3.0
# Only test grape master on ruby 2.7 and ruby 3.1
- VERSION: ruby:2.6
FRAMEWORK: grape-master
- VERSION: ruby:2.5
FRAMEWORK: grape-master
- VERSION: ruby:2.4
FRAMEWORK: grape-master
- VERSION: jruby:9.2
Expand All @@ -133,61 +115,12 @@ exclude:
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: grape-master

# grape 1.5 doesn't support ruby 3.0
# grape 1.5 doesn't support ruby 3.1
- VERSION: ruby:3.1
FRAMEWORK: grape-1.6
- VERSION: ruby:3.1
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
- VERSION: ruby:3.1
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: ruby:3.0
FRAMEWORK: grape-1.6
- VERSION: ruby:3.0
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1

# only test ruby >= 3.0 with rails 6.0 and rails 6.1
# only test ruby >= 3.1 with rails 6.1 and rails 7.0
- VERSION: ruby:3.1
FRAMEWORK: rails-5.2
- VERSION: ruby:3.1
FRAMEWORK: rails-5.1
- VERSION: ruby:3.0
FRAMEWORK: rails-5.2
- VERSION: ruby:3.0
FRAMEWORK: rails-5.1

# Unsupported
# Ruby 2.6
- VERSION: ruby:2.6
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: ruby:2.6
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# Ruby 2.5
- VERSION: ruby:2.5
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: ruby:2.5
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# Ruby 2.4
- VERSION: ruby:2.4
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: ruby:2.4
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# JRuby 9.2
- VERSION: jruby:9.2
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: jruby:9.2
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# JRuby 9.2-13-jdk
- VERSION: elasticobservability/jruby:9.2-13-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: elasticobservability/jruby:9.2-13-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# JRuby 9.2-11-jdk
- VERSION: elasticobservability/jruby:9.2-11-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: elasticobservability/jruby:9.2-11-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
# JRuby 9.2-8-jdk
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
- VERSION: elasticobservability/jruby:9.2-8-jdk
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
5 changes: 1 addition & 4 deletions .ci/.framework.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
FRAMEWORK:
- rails-7.0
- rails-7.2
- rails-6.1
- rails-6.0
- rails-5.2
- rails-4.2

- sinatra-2.2
- sinatra-1.4

- grape-1.6

- grape-1.6,sinatra-2.2,rails-6.1
1 change: 0 additions & 1 deletion .ci/.ruby.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
VERSION:
- ruby:3.1
- ruby:3.0
- ruby:2.7
- ruby:2.6
- ruby:2.4
Expand Down
9 changes: 9 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ frameworks_versions.each do |framework, version|
end
end

# Handle Rack::Auth::Digest being removed in rack 3.1, grape requires it
if frameworks_versions.key?('grape')
gem 'rack', '~> 3.0.0'
end

if frameworks_versions.key?('rails')
unless /^(main|6)/.match?(frameworks_versions['rails'])
gem 'delayed_job', require: nil
Expand All @@ -125,8 +130,12 @@ if RUBY_PLATFORM == 'java'
end
elsif frameworks_versions['rails'] =~ /^(4|5)/
gem 'sqlite3', '~> 1.3.6'
elsif frameworks_versions['rails'] =~ /^(6|7)/
gem 'sqlite3', '~> 1.4'
elsif RUBY_VERSION < '2.7'
gem 'sqlite3', '~> 1.4.4'
elsif RUBY_VERSION < '3.0'
gem 'sqlite3', '~> 1.3.6'
else
gem 'sqlite3'
end
Expand Down
7 changes: 5 additions & 2 deletions lib/elastic_apm/context_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,11 @@ def get_body(req)
when 'application/x-www-form-urlencoded', 'multipart/form-data'
req.POST.dup
else
body = req.body.read
req.body.rewind
io = req.body
return '' unless io

body = io.read
io.rewind
body.byteslice(0, MAX_BODY_LENGTH).force_encoding('utf-8').scrub
end
end
Expand Down
2 changes: 1 addition & 1 deletion spec/elastic_apm/grpc_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

require 'spec_helper'

# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
# if !defined?(JRUBY_VERSION) && RUBY_VERSION >= '3.0'
# require 'grpc'
#
# module ElasticAPM
Expand Down
21 changes: 20 additions & 1 deletion spec/integration/rails_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ def create
render_ok
end

def test_body
render_ok
end

def raise_error
raise FancyError, "Help! I'm trapped in a specfile!"
end
Expand Down Expand Up @@ -151,6 +155,7 @@ def ping(recipient, subject)
root to: 'application#index'
get '/tags_and_context', to: 'application#context'
post '/', to: 'application#create'
post '/test_body', to: 'application#test_body'
get '/error', to: 'application#raise_error'
get '/report_message', to: 'application#report_message'
get '/send_notification', to: 'application#send_notification'
Expand Down Expand Up @@ -207,7 +212,7 @@ def ping(recipient, subject)
end

describe 'transactions' do
context 'when a simple request is made' do
context 'when a simple get request is made' do
it 'spans action and posts it' do
get '/'

Expand All @@ -218,6 +223,20 @@ def ping(recipient, subject)
end
end

context 'when a simple post request is made with a body' do
it 'spans action and posts it' do
post '/test_body', '{"data":{"a":"1","b":"five"}}',
'CONTENT_TYPE' => 'application/json'

wait_for transactions: 1, spans: 2

name = @mock_intake.transactions.fetch(0)['name']
expect(name).to eq 'ApplicationController#test_body'
body = @mock_intake.transactions.fetch(0).dig('context', 'request', 'body')
expect(body).to eq '{"data":{"a":"1","b":"five"}}'
end
end

context 'when tags and context are set' do
it 'sets the values' do
get '/tags_and_context'
Expand Down
38 changes: 19 additions & 19 deletions spec/support/helloworld_pb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,22 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: helloworld.proto

if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
require 'google/protobuf'

Google::Protobuf::DescriptorPool.generated_pool.build do
add_message "helloworld.HelloRequest" do
optional :name, :string, 1
end
add_message "helloworld.HelloReply" do
optional :message, :string, 1
end
end

module Helloworld
HelloRequest = Google::Protobuf::DescriptorPool
.generated_pool.lookup('helloworld.HelloRequest').msgclass
HelloReply = Google::Protobuf::DescriptorPool
.generated_pool.lookup('helloworld.HelloReply').msgclass
end
end
# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
# require 'google/protobuf'
#
# Google::Protobuf::DescriptorPool.generated_pool.build do
# add_message "helloworld.HelloRequest" do
# optional :name, :string, 1
# end
# add_message "helloworld.HelloReply" do
# optional :message, :string, 1
# end
# end
#
# module Helloworld
# HelloRequest = Google::Protobuf::DescriptorPool
# .generated_pool.lookup('helloworld.HelloRequest').msgclass
# HelloReply = Google::Protobuf::DescriptorPool
# .generated_pool.lookup('helloworld.HelloReply').msgclass
# end
# end
42 changes: 21 additions & 21 deletions spec/support/helloworld_services_pb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,24 +31,24 @@

# frozen_string_literal: true

if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
require_relative 'helloworld_pb'

module Helloworld
module Greeter
# The greeting service definition.
class Service
include GRPC::GenericService

self.marshal_class_method = :encode
self.unmarshal_class_method = :decode
self.service_name = 'helloworld.Greeter'

# Sends a greeting
rpc :SayHello, HelloRequest, HelloReply
end

Stub = Service.rpc_stub_class
end
end
end
# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
# require_relative 'helloworld_pb'
#
# module Helloworld
# module Greeter
# # The greeting service definition.
# class Service
# include GRPC::GenericService
#
# self.marshal_class_method = :encode
# self.unmarshal_class_method = :decode
# self.service_name = 'helloworld.Greeter'
#
# # Sends a greeting
# rpc :SayHello, HelloRequest, HelloReply
# end
#
# Stub = Service.rpc_stub_class
# end
# end
# end
Loading